Commit 082dd17b authored by Michael Niedermayer's avatar Michael Niedermayer

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: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents 8d07bbca 0cf35059
...@@ -467,13 +467,13 @@ int ff_audio_mix_get_matrix(AudioMix *am, double *matrix, int stride) ...@@ -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 || if ( am->in_channels <= 0 || am->in_channels > AVRESAMPLE_MAX_CHANNELS ||
am->out_channels <= 0 || am->out_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); return AVERROR(EINVAL);
} }
#define GET_MATRIX_CONVERT(suffix, scale) \ #define GET_MATRIX_CONVERT(suffix, scale) \
if (!am->matrix_ ## suffix[0]) { \ 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); \ return AVERROR(EINVAL); \
} \ } \
for (o = 0; o < am->out_channels; o++) \ for (o = 0; o < am->out_channels; o++) \
...@@ -491,7 +491,7 @@ int ff_audio_mix_get_matrix(AudioMix *am, double *matrix, int stride) ...@@ -491,7 +491,7 @@ int ff_audio_mix_get_matrix(AudioMix *am, double *matrix, int stride)
GET_MATRIX_CONVERT(flt, 1.0); GET_MATRIX_CONVERT(flt, 1.0);
break; break;
default: 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); return AVERROR(EINVAL);
} }
...@@ -504,7 +504,7 @@ int ff_audio_mix_set_matrix(AudioMix *am, const double *matrix, int stride) ...@@ -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 || if ( am->in_channels <= 0 || am->in_channels > AVRESAMPLE_MAX_CHANNELS ||
am->out_channels <= 0 || am->out_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); return AVERROR(EINVAL);
} }
...@@ -540,7 +540,7 @@ int ff_audio_mix_set_matrix(AudioMix *am, const double *matrix, int stride) ...@@ -540,7 +540,7 @@ int ff_audio_mix_set_matrix(AudioMix *am, const double *matrix, int stride)
CONVERT_MATRIX(flt, v) CONVERT_MATRIX(flt, v)
break; break;
default: 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); return AVERROR(EINVAL);
} }
......
...@@ -252,11 +252,10 @@ int avresample_set_matrix(AVAudioResampleContext *avr, const double *matrix, ...@@ -252,11 +252,10 @@ int avresample_set_matrix(AVAudioResampleContext *avr, const double *matrix,
/** /**
* Set compensation for resampling. * Set compensation for resampling.
* *
* This can be called anytime after avresample_open(). If resampling was not * This can be called anytime after avresample_open(). If resampling is not
* being done previously, the AVAudioResampleContext is closed and reopened * automatically enabled because of a sample rate conversion, the
* with resampling enabled. In this case, any samples remaining in the output * "force_resampling" option must have been set to 1 when opening the context
* FIFO and the current channel mixing matrix will be restored after reopening * in order to use resampling compensation.
* the context.
* *
* @param avr audio resample context * @param avr audio resample context
* @param sample_delta compensation delta, in samples * @param sample_delta compensation delta, in samples
......
...@@ -255,9 +255,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta, ...@@ -255,9 +255,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta,
if (!compensation_distance && sample_delta) if (!compensation_distance && sample_delta)
return AVERROR(EINVAL); return AVERROR(EINVAL);
/* if resampling was not enabled previously, re-initialize the
AVAudioResampleContext and force resampling */
if (!avr->resample_needed) { 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 fifo_samples;
int restore_matrix = 0; int restore_matrix = 0;
double matrix[AVRESAMPLE_MAX_CHANNELS * AVRESAMPLE_MAX_CHANNELS] = { 0 }; double matrix[AVRESAMPLE_MAX_CHANNELS * AVRESAMPLE_MAX_CHANNELS] = { 0 };
...@@ -307,6 +308,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta, ...@@ -307,6 +308,10 @@ int avresample_set_compensation(AVAudioResampleContext *avr, int sample_delta,
goto reinit_fail; goto reinit_fail;
ff_audio_data_free(&fifo_buf); 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 = avr->resample;
c->compensation_distance = compensation_distance; c->compensation_distance = compensation_distance;
......
...@@ -39,4 +39,8 @@ ...@@ -39,4 +39,8 @@
* the public API and may change, break or disappear at any time. * 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 */ #endif /* AVRESAMPLE_VERSION_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment