[FFmpeg-cvslog] avconv: only set the "channels" option when it exists for the specified input format

Justin Ruggles git at videolan.org
Wed Apr 18 00:41:39 CEST 2012


ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Mon Apr 16 12:51:24 2012 -0400| [b1041f80489b3fe428ef586e6d631fda40bef80e] | committer: Justin Ruggles

avconv: only set the "channels" option when it exists for the specified input format

This allows the user to specify an input channel layout without avconv aborting because the
"channels" option was not found.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b1041f80489b3fe428ef586e6d631fda40bef80e
---

 avconv.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/avconv.c b/avconv.c
index 347f804..48b4c6b 100644
--- a/avconv.c
+++ b/avconv.c
@@ -3627,8 +3627,16 @@ static int opt_input_file(OptionsContext *o, const char *opt, const char *filena
         av_dict_set(&format_opts, "sample_rate", buf, 0);
     }
     if (o->nb_audio_channels) {
-        snprintf(buf, sizeof(buf), "%d", o->audio_channels[o->nb_audio_channels - 1].u.i);
-        av_dict_set(&format_opts, "channels", buf, 0);
+        /* because we set audio_channels based on both the "ac" and
+         * "channel_layout" options, we need to check that the specified
+         * demuxer actually has the "channels" option before setting it */
+        if (file_iformat && file_iformat->priv_class &&
+            av_opt_find(&file_iformat->priv_class, "channels", NULL, 0,
+                        AV_OPT_SEARCH_FAKE_OBJ)) {
+            snprintf(buf, sizeof(buf), "%d",
+                     o->audio_channels[o->nb_audio_channels - 1].u.i);
+            av_dict_set(&format_opts, "channels", buf, 0);
+        }
     }
     if (o->nb_frame_rates) {
         av_dict_set(&format_opts, "framerate", o->frame_rates[o->nb_frame_rates - 1].u.str, 0);



More information about the ffmpeg-cvslog mailing list