]> granicus.if.org Git - handbrake/commitdiff
libhb: fix setting Libav codec private options
authorjstebbins <jstebbins.hb@gmail.com>
Fri, 12 Aug 2011 22:00:51 +0000 (22:00 +0000)
committerjstebbins <jstebbins.hb@gmail.com>
Fri, 12 Aug 2011 22:00:51 +0000 (22:00 +0000)
and logging of Libav advanced options.
Thanks to Rodeo for spotting

git-svn-id: svn://svn.handbrake.fr/HandBrake/trunk@4170 b64f7644-9d1e-0410-96f1-a4d463321fa5

libhb/encavcodec.c
libhb/encavcodecaudio.c
libhb/hb.c
libhb/hbffmpeg.h
libhb/work.c

index c613fa7175e39beb0989806f3c5d39951b58c424..965752aa9681f06f3fd1231fcaaca93dc55dbbba 100644 (file)
@@ -196,13 +196,15 @@ int encavcodecInit( hb_work_object_t * w, hb_job_t * job )
                 }
 
                 /* Here's where the strings are passed to avutil for parsing. */
-                ret = av_set_string3( context, name, value, 1, NULL );
+                ret = hb_av_set_string( context, codec, name, value );
 
                 /* Let avutil sanity check the options for us*/
                 if( ret == AVERROR_OPTION_NOT_FOUND )
                     hb_log( "avcodec options: Unknown option %s", name );
+
                 if( ret == AVERROR(EINVAL) )
-                    hb_log( "avcodec options: Bad argument %s=%s", name, value ? value : "(null)" );
+                    hb_log( "avcodec options: Bad argument %s=%s", 
+                            name, value ? value : "(null)" );
             }
         }
         free(opts_start);
index ebf2fd8f20c17c15071138cc20cb2ae52496ff2f..92d2e36d6f0610aca2be84c8e8f739542b303bd5 100644 (file)
@@ -58,12 +58,17 @@ static int encavcodecaInit( hb_work_object_t * w, hb_job_t * job )
     }
     context = avcodec_alloc_context3(codec);
 
-    int ret = av_set_string3( context, "stereo_mode", "ms_off", 1, NULL );
-    /* Let avutil sanity check the options for us*/
-    if( ret == AVERROR(ENOENT) )
-        hb_log( "avcodec options: Unknown option %s", "stereo_mode" );
-    if( ret == AVERROR(EINVAL) )
-        hb_log( "avcodec options: Bad argument %s=%s", "stereo_mode", "ms_off" ? "ms_off" : "(null)" );
+    if ( w->codec_param == CODEC_ID_AAC )
+    {
+        int ret = hb_av_set_string( context, codec, "stereo_mode", "ms_off" );
+        /* Let avutil sanity check the options for us*/
+        if( ret == AVERROR_OPTION_NOT_FOUND )
+            hb_log( "avcodec options: Unknown option %s", "stereo_mode" );
+
+        if( ret == AVERROR(EINVAL) )
+            hb_log( "avcodec options: Bad argument %s=%s", 
+                    "stereo_mode", "ms_off" ? "ms_off" : "(null)" );
+    }
 
     context->channel_layout = AV_CH_LAYOUT_STEREO;
     switch( audio->config.out.mixdown )
index d3d1d56683c823bc9b47636e3537bd23ec913fff..f9bbcdc8331c4b247724c2206fcb977dd3f00b50 100644 (file)
@@ -127,6 +127,20 @@ int hb_avcodec_close(AVCodecContext *avctx)
     return ret;
 }
 
+int hb_av_set_string( AVCodecContext *c, AVCodec *codec, const char *name, const char *val )
+{
+    void * priv_context = NULL;
+
+    if ( c && codec && codec->priv_class && c->priv_data )
+        priv_context = c->priv_data;
+
+    int ret = av_set_string3( c, name, val, 1, NULL );
+    if ( ret == AVERROR_OPTION_NOT_FOUND && priv_context )
+        ret = av_set_string3( priv_context, name, val, 1, NULL );
+
+    return ret;
+}
+
 static int handle_jpeg(enum PixelFormat *format)
 {
     switch (*format) {
index 21108211ece1cd81d789bb7c332c3294e4b15a63..495e90e674d0c1421054737c8a0f50fef18c1e1e 100644 (file)
@@ -18,3 +18,4 @@ hb_sws_get_context(int srcW, int srcH, enum PixelFormat srcFormat,
                    int dstW, int dstH, enum PixelFormat dstFormat,
                    int flags);
 void hb_ff_set_sample_fmt(AVCodecContext *context, AVCodec *codec);
+int hb_av_set_string( AVCodecContext *c, AVCodec *codec, const char *name, const char *val );
index 9ab11fec9b9f43e46250efac23ec05c5df2c169f..035d9c6640741cc51dd1c645bb8fdaa45356dde3 100644 (file)
@@ -291,8 +291,6 @@ void hb_display_job_info( hb_job_t * job )
 
             case HB_VCODEC_X264:
                 hb_log( "   + encoder: x264" );
-                if( job->advanced_opts != NULL && *job->advanced_opts != '\0' )
-                    hb_log( "     + options: %s", job->advanced_opts);
                 break;
 
             case HB_VCODEC_THEORA:
@@ -300,6 +298,13 @@ void hb_display_job_info( hb_job_t * job )
                 break;
         }
 
+        if ( job->advanced_opts && *job->advanced_opts &&
+             ( ( job->vcodec & HB_VCODEC_FFMPEG_MASK ) ||
+               job->vcodec == HB_VCODEC_X264 ) )
+        {
+            hb_log( "     + options: %s", job->advanced_opts);
+        }
+
         if( job->vquality >= 0 )
         {
             hb_log( "     + quality: %.2f %s", job->vquality, job->vcodec == HB_VCODEC_X264 ? "(RF)" : "(QP)" );