[FFmpeg-cvslog] FFMPEG: support demuxer specific options.

Michael Niedermayer git at videolan.org
Sat Apr 30 22:08:52 CEST 2011


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Apr 30 21:38:40 2011 +0200| [fa1195227ff010bc22472688587fdcfa620f69de] | committer: Michael Niedermayer

FFMPEG: support demuxer specific options.
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

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

 cmdutils.c |   10 ++++++++++
 ffmpeg.c   |    8 +++++++-
 2 files changed, 17 insertions(+), 1 deletions(-)

diff --git a/cmdutils.c b/cmdutils.c
index 5ad45e1..4363e8a 100644
--- a/cmdutils.c
+++ b/cmdutils.c
@@ -297,6 +297,7 @@ int opt_default(const char *opt, const char *arg){
     int opt_types[]={AV_OPT_FLAG_VIDEO_PARAM, AV_OPT_FLAG_AUDIO_PARAM, 0, AV_OPT_FLAG_SUBTITLE_PARAM, 0};
     AVCodec *p = NULL;
     AVOutputFormat *oformat = NULL;
+    AVInputFormat *iformat = NULL;
 
     while ((p = av_codec_next(p))) {
         AVClass *c = p->priv_class;
@@ -312,6 +313,13 @@ int opt_default(const char *opt, const char *arg){
     }
     if (oformat)
         goto out;
+    while ((iformat = av_iformat_next(iformat))) {
+        const AVClass *c = iformat->priv_class;
+        if (c && av_find_opt(&c, opt, NULL, 0, 0))
+            break;
+    }
+    if (iformat)
+        goto out;
 
     for(type=0; *avcodec_opts && type<AVMEDIA_TYPE_NB && ret>= 0; type++){
         const AVOption *o2 = av_find_opt(avcodec_opts[0], opt, NULL, opt_types[type], opt_types[type]);
@@ -415,6 +423,8 @@ void set_context_opts(void *ctx, void *opts_ctx, int flags, AVCodec *codec)
         AVFormatContext *avctx = ctx;
         if (avctx->oformat && avctx->oformat->priv_class) {
             priv_ctx = avctx->priv_data;
+        } else if (avctx->iformat && avctx->iformat->priv_class) {
+            priv_ctx = avctx->priv_data;
         }
     }
 
diff --git a/ffmpeg.c b/ffmpeg.c
index bde23e0..db9701d 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -3258,10 +3258,16 @@ static void opt_input_file(const char *filename)
     ic->subtitle_codec_id=
         find_codec_or_die(subtitle_codec_name, AVMEDIA_TYPE_SUBTITLE, 0,
                           avcodec_opts[AVMEDIA_TYPE_SUBTITLE]->strict_std_compliance);
-    ic->flags |= AVFMT_FLAG_NONBLOCK;
+    ic->flags |= AVFMT_FLAG_NONBLOCK | AVFMT_FLAG_PRIV_OPT;
 
     /* open the input file with generic libav function */
     err = av_open_input_file(&ic, filename, file_iformat, 0, ap);
+    if(err >= 0){
+        set_context_opts(ic, avformat_opts, AV_OPT_FLAG_DECODING_PARAM, NULL);
+        err = av_demuxer_open(ic, ap);
+        if(err < 0)
+            avformat_free_context(ic);
+    }
     if (err < 0) {
         print_error(filename, err);
         ffmpeg_exit(1);



More information about the ffmpeg-cvslog mailing list