aboutsummaryrefslogtreecommitdiff
path: root/src/pcm_convert.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pcm_convert.c')
-rw-r--r--src/pcm_convert.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/src/pcm_convert.c b/src/pcm_convert.c
index 267e32c8..dffa9312 100644
--- a/src/pcm_convert.c
+++ b/src/pcm_convert.c
@@ -54,10 +54,25 @@ AVFrame *pcm_convert(struct pcm_convert_state *state,
const AVFrame *src)
{
AVFrame *dst;
- int ret;
+ int ret, need_reinit = 0;
+
+#define CHECK_PARAM(name, val) \
+do { \
+ int64_t val; \
+ av_opt_get_int(state->avr, name, 0, &val); \
+ if (val != src->val) \
+ need_reinit = 1; \
+} while (0)
+ if (state->avr) {
+ CHECK_PARAM("in_sample_rate", sample_rate);
+ CHECK_PARAM("in_sample_fmt", format);
+ CHECK_PARAM("in_channel_layout", channel_layout);
+ }
- if (!state->avr) {
+ if (need_reinit || !state->avr) {
char in_layout[128], out_layout[128];
+
+ avresample_free(&state->avr);
state->avr = avresample_alloc_context();
if (!state->avr)
return NULL;