mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-24 16:22:37 +00:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: avresample: use valid log context in mixing functions lavr: remove automatic context close/open for resampling compensation Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
082dd17bd2
@ -467,13 +467,13 @@ int ff_audio_mix_get_matrix(AudioMix *am, double *matrix, int stride)
|
||||
|
||||
if ( am->in_channels <= 0 || am->in_channels > AVRESAMPLE_MAX_CHANNELS ||
|
||||
am->out_channels <= 0 || am->out_channels > AVRESAMPLE_MAX_CHANNELS) {
|
||||
av_log(am, AV_LOG_ERROR, "Invalid channel counts\n");
|
||||
av_log(am->avr, AV_LOG_ERROR, "Invalid channel counts\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
#define GET_MATRIX_CONVERT(suffix, scale) \
|
||||
if (!am->matrix_ ## suffix[0]) { \
|
||||
av_log(am, AV_LOG_ERROR, "matrix is not set\n"); \
|
||||
av_log(am->avr, AV_LOG_ERROR, "matrix is not set\n"); \
|
||||
return AVERROR(EINVAL); \
|
||||
} \
|
||||
for (o = 0; o < am->out_channels; o++) \
|
||||
@ -491,7 +491,7 @@ int ff_audio_mix_get_matrix(AudioMix *am, double *matrix, int stride)
|
||||
GET_MATRIX_CONVERT(flt, 1.0);
|
||||
break;
|
||||
default:
|
||||
av_log(am, AV_LOG_ERROR, "Invalid mix coeff type\n");
|
||||
av_log(am->avr, AV_LOG_ERROR, "Invalid mix coeff type\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
@ -504,7 +504,7 @@ int ff_audio_mix_set_matrix(AudioMix *am, const double *matrix, int stride)
|
||||
|
||||
if ( am->in_channels <= 0 || am->in_channels > AVRESAMPLE_MAX_CHANNELS ||
|
||||
am->out_channels <= 0 || am->out_channels > AVRESAMPLE_MAX_CHANNELS) {
|
||||
av_log(am, AV_LOG_ERROR, "Invalid channel counts\n");
|
||||
av_log(am->avr, AV_LOG_ERROR, "Invalid channel counts\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
@ -540,7 +540,7 @@ int ff_audio_mix_set_matrix(AudioMix *am, const double *matrix, int stride)
|
||||
CONVERT_MATRIX(flt, v)
|
||||
break;
|
||||
default:
|
||||
av_log(am, AV_LOG_ERROR, "Invalid mix coeff type\n");
|
||||
av_log(am->avr, AV_LOG_ERROR, "Invalid mix coeff type\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
|
@ -252,11 +252,10 @@ int avresample_set_matrix(AVAudioResampleContext *avr, const double *matrix,
|
||||
/**
|
||||
* Set compensation for resampling.
|
||||
*
|
||||
* This can be called anytime after avresample_open(). If resampling was not
|
||||
* being done previously, the AVAudioResampleContext is closed and reopened
|
||||
* with resampling enabled. In this case, any samples remaining in the output
|
||||
* FIFO and the current channel mixing matrix will be restored after reopening
|
||||
* the context.
|
||||
* This can be called anytime after avresample_open(). If resampling is not
|
||||
* automatically enabled because of a sample rate conversion, the
|
||||
* "force_resampling" option must have been set to 1 when opening the context
|
||||
* in order to use resampling compensation.
|
||||
*
|
||||
* @param avr audio resample context
|
||||
* @param sample_delta compensation delta, in samples
|
||||
|
@ -255,9 +255,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta,
|
||||
if (!compensation_distance && sample_delta)
|
||||
return AVERROR(EINVAL);
|
||||
|
||||
/* if resampling was not enabled previously, re-initialize the
|
||||
AVAudioResampleContext and force resampling */
|
||||
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 };
|
||||
@ -307,6 +308,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta,
|
||||
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;
|
||||
|
@ -39,4 +39,8 @@
|
||||
* the public API and may change, break or disappear at any time.
|
||||
*/
|
||||
|
||||
#ifndef FF_API_RESAMPLE_CLOSE_OPEN
|
||||
#define FF_API_RESAMPLE_CLOSE_OPEN (LIBAVRESAMPLE_VERSION_MAJOR < 2)
|
||||
#endif
|
||||
|
||||
#endif /* AVRESAMPLE_VERSION_H */
|
||||
|
Loading…
Reference in New Issue
Block a user