summaryrefslogtreecommitdiff
path: root/libavresample
diff options
context:
space:
mode:
Diffstat (limited to 'libavresample')
-rw-r--r--libavresample/avresample.h9
-rw-r--r--libavresample/resample.c9
-rw-r--r--libavresample/version.h4
3 files changed, 15 insertions, 7 deletions
diff --git a/libavresample/avresample.h b/libavresample/avresample.h
index a73d6865ac..4841d262c0 100644
--- a/libavresample/avresample.h
+++ b/libavresample/avresample.h
@@ -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
diff --git a/libavresample/resample.c b/libavresample/resample.c
index 15eaa50e23..dc121fe56d 100644
--- a/libavresample/resample.c
+++ b/libavresample/resample.c
@@ -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;
diff --git a/libavresample/version.h b/libavresample/version.h
index 53ba802d85..834c942d93 100644
--- a/libavresample/version.h
+++ b/libavresample/version.h
@@ -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 */