@ -58,12 +58,13 @@ AVFilterBufferRef *avfilter_default_get_video_buffer(AVFilterLink *link, int per
}
AVFilterBufferRef * avfilter_default_get_audio_buffer ( AVFilterLink * link , int perms ,
enum AVSampleFormat sample_fmt , int size ,
uint64_t channel_layout , int planar )
enum AVSampleFormat sample_fmt , int nb_samples ,
uint64_t channel_layout )
{
AVFilterBuffer * samples = av_mallocz ( sizeof ( AVFilterBuffer ) ) ;
AVFilterBufferRef * ref = NULL ;
int i , sample_size , chans_nb , bufsize , per_channel_size , step_size = 0 ;
int planar = av_sample_fmt_is_planar ( sample_fmt ) ;
char * buf ;
if ( ! samples | | ! ( ref = av_mallocz ( sizeof ( AVFilterBufferRef ) ) ) )
@ -77,7 +78,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
goto fail ;
ref - > audio - > channel_layout = channel_layout ;
ref - > audio - > size = size ;
ref - > audio - > nb_samples = nb_samples ;
ref - > audio - > planar = planar ;
/* make sure the buffer gets read permission or it's useless for output */
@ -89,8 +90,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
sample_size = av_get_bytes_per_sample ( sample_fmt ) ;
chans_nb = av_get_channel_layout_nb_channels ( channel_layout ) ;
per_channel_size = size / chans_nb ;
ref - > audio - > nb_samples = per_channel_size / sample_size ;
per_channel_size = nb_samples * sample_size ;
/* Set the number of bytes to traverse to reach next sample of a particular channel:
* For planar , this is simply the sample size .
@ -101,7 +101,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
memset ( & samples - > linesize [ chans_nb ] , 0 , ( 8 - chans_nb ) * sizeof ( samples - > linesize [ 0 ] ) ) ;
/* Calculate total buffer size, round to multiple of 16 to be SIMD friendly */
bufsize = ( size + 15 ) & ~ 15 ;
bufsize = ( nb_samples * chans_nb * sample_ size + 15 ) & ~ 15 ;
buf = av_malloc ( bufsize ) ;
if ( ! buf )
goto fail ;
@ -189,9 +189,8 @@ void avfilter_default_filter_samples(AVFilterLink *inlink, AVFilterBufferRef *sa
if ( outlink ) {
outlink - > out_buf = avfilter_default_get_audio_buffer ( inlink , AV_PERM_WRITE , samplesref - > format ,
samplesref - > audio - > size ,
samplesref - > audio - > channel_layout ,
samplesref - > audio - > planar ) ;
samplesref - > audio - > nb_samples ,
samplesref - > audio - > channel_layout ) ;
outlink - > out_buf - > pts = samplesref - > pts ;
outlink - > out_buf - > audio - > sample_rate = samplesref - > audio - > sample_rate ;
avfilter_filter_samples ( outlink , avfilter_ref_buffer ( outlink - > out_buf , ~ 0 ) ) ;
@ -293,9 +292,9 @@ AVFilterBufferRef *avfilter_null_get_video_buffer(AVFilterLink *link, int perms,
}
AVFilterBufferRef * avfilter_null_get_audio_buffer ( AVFilterLink * link , int perms ,
enum AVSampleFormat sample_fmt , int size ,
uint64_t channel_layout , int packed )
enum AVSampleFormat sample_fmt , int nb_samples ,
uint64_t channel_layout )
{
return avfilter_get_audio_buffer ( link - > dst - > outputs [ 0 ] , perms , sample_fmt ,
size , channel_layout , packed ) ;
nb_samples , channel_layout ) ;
}