@ -183,20 +183,10 @@ static int return_audio_frame(AVFilterContext *ctx)
}
while ( s - > out - > nb_samples < s - > allocated_samples ) {
int len = FFMIN ( s - > allocated_samples - s - > out - > nb_samples ,
head - > nb_samples ) ;
av_samples_copy ( s - > out - > extended_data , head - > extended_data ,
s - > out - > nb_samples , 0 , len , nb_channels ,
link - > format ) ;
s - > out - > nb_samples + = len ;
int len ;
if ( len = = head - > nb_samples ) {
av_frame_free ( & head ) ;
queue_pop ( s ) ;
if ( ! s - > root . next & &
( ret = ff_request_frame ( ctx - > inputs [ 0 ] ) ) < 0 ) {
if ( ! s - > root . next ) {
ret = ff_request_frame ( ctx - > inputs [ 0 ] ) ;
if ( ret = = AVERROR_EOF ) {
av_samples_set_silence ( s - > out - > extended_data ,
s - > out - > nb_samples ,
@ -205,10 +195,22 @@ static int return_audio_frame(AVFilterContext *ctx)
nb_channels , link - > format ) ;
s - > out - > nb_samples = s - > allocated_samples ;
break ;
}
} else if ( ret < 0 )
return ret ;
}
head = s - > root . next - > frame ;
len = FFMIN ( s - > allocated_samples - s - > out - > nb_samples ,
head - > nb_samples ) ;
av_samples_copy ( s - > out - > extended_data , head - > extended_data ,
s - > out - > nb_samples , 0 , len , nb_channels ,
link - > format ) ;
s - > out - > nb_samples + = len ;
if ( len = = head - > nb_samples ) {
av_frame_free ( & head ) ;
queue_pop ( s ) ;
} else {
buffer_offset ( link , head , len ) ;
}