[vlc-devel] [RFC] avcodec: Set lowres option according AV decoder

Nicolas Bertrand nicoinattendu at gmail.com
Tue Apr 30 14:41:12 CEST 2013


---
 What do you think on managing discrepancy in libav/ffmpeg
 for lowres parameter that way?

 modules/codec/avcodec/avcodec.c |   16 +++++++++++++++-
 modules/codec/avcodec/avcodec.h |    3 +++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/modules/codec/avcodec/avcodec.c b/modules/codec/avcodec/avcodec.c
index b126d7a..e62b2c6 100644
--- a/modules/codec/avcodec/avcodec.c
+++ b/modules/codec/avcodec/avcodec.c
@@ -133,6 +133,8 @@ vlc_module_begin ()
         true )
 #endif
 
+    add_integer("avcodec-lowres", 0, LOWRES_TEXT, LOWRES_LONG_TEXT, true);
+
     add_obsolete_integer( "ffmpeg-debug" ) /* removed since 2.1.0 */
     add_integer( "avcodec-debug", 0, DEBUG_TEXT, DEBUG_LONGTEXT,
                  true )
@@ -301,6 +303,10 @@ static int OpenDecoder( vlc_object_t *p_this )
     p_context->debug = var_InheritInteger( p_dec, "avcodec-debug" );
     p_context->opaque = (void *)p_this;
 
+    /* set lowres option for ffmpeg */
+    if(LIBAVUTIL_VERSION_MICRO >= 100)
+        p_context->lowres  = var_InheritInteger( p_dec, "avcodec-lowres" );
+
     /* set CPU capabilities */
 #if LIBAVUTIL_VERSION_CHECK(51, 25, 0, 42, 100)
     av_set_cpu_flags_mask( INT_MAX & ~GetVlcDspMask() );
@@ -419,8 +425,16 @@ int ffmpeg_OpenCodec( decoder_t *p_dec )
                                                       p_sys->p_context->sample_rate;
     }
     int ret;
+    AVDictionary *options = NULL;
+    if ( LIBAVUTIL_VERSION_MICRO < 100 ) {
+        /* set lowres option for libav */
+        int lowres = var_InheritInteger( p_dec, "avcodec-lowres" );
+        char psz_lowres[3] = "0";
+        sprintf(psz_lowres,"%i",lowres);
+        av_dict_set(&options,"lowres",psz_lowres,0);
+    }
     vlc_avcodec_lock();
-    ret = avcodec_open2( p_sys->p_context, p_sys->p_codec, NULL /* options */ );
+    ret = avcodec_open2( p_sys->p_context, p_sys->p_codec, &options);
     vlc_avcodec_unlock();
     if( ret < 0 )
         return VLC_EGENERIC;
diff --git a/modules/codec/avcodec/avcodec.h b/modules/codec/avcodec/avcodec.h
index 1716733..bf0b4a1 100644
--- a/modules/codec/avcodec/avcodec.h
+++ b/modules/codec/avcodec/avcodec.h
@@ -144,6 +144,9 @@ int ffmpeg_OpenCodec( decoder_t *p_dec );
 #define THREADS_TEXT N_( "Threads" )
 #define THREADS_LONGTEXT N_( "Number of threads used for decoding, 0 meaning auto" )
 
+#define LOWRES_TEXT N_("Video in low resolutions")
+#define LOWRES_LONG_TEXT N_( \
+     "Decode at 1 = 1/2, 2 = 1/4, 3 = 1/8, ...,of original resolution size" )
 /*
  * Encoder options
  */
-- 
1.7.9.5




More information about the vlc-devel mailing list