@ -243,62 +243,8 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta,
return AVERROR ( EINVAL ) ;
if ( ! avr - > resample_needed ) {
# if FF_API_RESAMPLE_CLOSE_OPEN
/* if resampling was not enabled previously, re-initialize the
AVAudioResampleContext and force resampling */
int fifo_samples ;
int restore_matrix = 0 ;
double matrix [ AVRESAMPLE_MAX_CHANNELS * AVRESAMPLE_MAX_CHANNELS ] = { 0 } ;
/* buffer any remaining samples in the output FIFO before closing */
fifo_samples = av_audio_fifo_size ( avr - > out_fifo ) ;
if ( fifo_samples > 0 ) {
fifo_buf = ff_audio_data_alloc ( avr - > out_channels , fifo_samples ,
avr - > out_sample_fmt , NULL ) ;
if ( ! fifo_buf )
return AVERROR ( EINVAL ) ;
ret = ff_audio_data_read_from_fifo ( avr - > out_fifo , fifo_buf ,
fifo_samples ) ;
if ( ret < 0 )
goto reinit_fail ;
}
/* save the channel mixing matrix */
if ( avr - > am ) {
ret = avresample_get_matrix ( avr , matrix , AVRESAMPLE_MAX_CHANNELS ) ;
if ( ret < 0 )
goto reinit_fail ;
restore_matrix = 1 ;
}
/* close the AVAudioResampleContext */
avresample_close ( avr ) ;
avr - > force_resampling = 1 ;
/* restore the channel mixing matrix */
if ( restore_matrix ) {
ret = avresample_set_matrix ( avr , matrix , AVRESAMPLE_MAX_CHANNELS ) ;
if ( ret < 0 )
goto reinit_fail ;
}
/* re-open the AVAudioResampleContext */
ret = avresample_open ( avr ) ;
if ( ret < 0 )
goto reinit_fail ;
/* restore buffered samples to the output FIFO */
if ( fifo_samples > 0 ) {
ret = ff_audio_data_add_to_fifo ( avr - > out_fifo , fifo_buf , 0 ,
fifo_samples ) ;
if ( ret < 0 )
goto reinit_fail ;
ff_audio_data_free ( & fifo_buf ) ;
}
# else
av_log ( avr , AV_LOG_ERROR , " Unable to set resampling compensation \n " ) ;
return AVERROR ( EINVAL ) ;
# endif
}
c = avr - > resample ;
c - > compensation_distance = compensation_distance ;