avplay: properly close/reopen AVAudioResampleContext on channel layout change
authorJustin Ruggles <justin.ruggles@gmail.com>
Thu, 3 May 2012 22:57:02 +0000 (18:57 -0400)
committerJustin Ruggles <justin.ruggles@gmail.com>
Mon, 7 May 2012 16:42:32 +0000 (12:42 -0400)
fixes Bug#280

avplay.c

index e18b2e4..9bd83f3 100644 (file)
--- a/avplay.c
+++ b/avplay.c
@@ -2060,15 +2060,17 @@ static int audio_decode_frame(VideoState *is, double *pts_ptr)
                                dec->channel_layout != is->resample_channel_layout;
 
             if ((!is->avr && audio_resample) || resample_changed) {
+                int ret;
                 if (is->avr)
                     avresample_close(is->avr);
                 else if (audio_resample) {
-                    int ret;
                     is->avr = avresample_alloc_context();
                     if (!is->avr) {
                         fprintf(stderr, "error allocating AVAudioResampleContext\n");
                         break;
                     }
+                }
+                if (audio_resample) {
                     av_opt_set_int(is->avr, "in_channel_layout",  dec->channel_layout,    0);
                     av_opt_set_int(is->avr, "in_sample_fmt",      dec->sample_fmt,        0);
                     av_opt_set_int(is->avr, "in_sample_rate",     dec->sample_rate,       0);