]> git.sesse.net Git - vlc/commitdiff
* modules/codec/x264.c: add interlaced, deadzone-inter/intra and direct-8x8 options
authorDennis van Amerongen <trax@videolan.org>
Mon, 2 Oct 2006 17:52:24 +0000 (17:52 +0000)
committerDennis van Amerongen <trax@videolan.org>
Mon, 2 Oct 2006 17:52:24 +0000 (17:52 +0000)
modules/codec/x264.c

index 7fbbb8b611e548b61984ae81ff3aef1a576f850f..02a00891979ae32733c26c08157cfb839539df07 100644 (file)
@@ -103,6 +103,14 @@ static void Close( vlc_object_t * );
     "Range -6 to 6 for both alpha and beta parameters. -6 means light " \
     "filter, 6 means strong.")
 
+/* In order to play an interlaced output stream encoded by x264, a decoder needs
+   mbaff support. r570 is using the 'mb' part and not 'aff' yet; so it's really
+   'pure-interlaced' mode */
+#if X264_BUILD >= 51 /* r570 */
+#define INTERLACED_TEXT N_("Interlaced mode")
+#define INTERLACED_LONGTEXT N_( "Pure-interlaced mode.")
+#endif
+
 /* Ratecontrol */
 
 #define QP_TEXT N_("Set QP")
@@ -174,6 +182,14 @@ static void Close( vlc_object_t * );
 #define DIRECT_PRED_TEXT N_("Direct MV prediction mode")
 #define DIRECT_PRED_LONGTEXT N_( "Direct MV prediction mode.")
 
+#if X264_BUILD >= 52 /* r573 */
+#define DIRECT_PRED_SIZE_TEXT N_("Direct prediction size")
+#define DIRECT_PRED_SIZE_LONGTEXT N_( "Direct prediction size: "\
+    " -  0: 4x4\n" \
+    " -  1: 8x8\n" \
+    " - -1: smallest possible according to level\n" )
+#endif
+
 #define WEIGHTB_TEXT N_("Weighted prediction for B-frames")
 #define WEIGHTB_LONGTEXT N_( "Weighted prediction for B-frames.")
 
@@ -248,6 +264,16 @@ static void Close( vlc_object_t * );
 #define NR_LONGTEXT N_( "Dct-domain noise reduction. Adaptive pseudo-deadzone. " \
     "10 to 1000 seems to be a useful range." )
 
+#if X264_BUILD >= 52 /* r573 */
+#define DEADZONE_INTER_TEXT N_("Inter luma quantization deadzone")
+#define DEADZONE_INTER_LONGTEXT N_( "Set the size of the inter luma quantization deadzone. " \
+    "Range 0 to 32." )
+
+#define DEADZONE_INTRA_TEXT N_("Intra luma quantization deadzone")
+#define DEADZONE_INTRA_LONGTEXT N_( "Set the size of the intra luma quantization deadzone. " \
+    "Range 0 to 32." )
+#endif
+
 /* Input/Output */
 
 #define ASM_TEXT N_("CPU optimizations")
@@ -343,6 +369,11 @@ vlc_module_begin();
     add_string( SOUT_CFG_PREFIX "filter", "", NULL, FILTER_TEXT,
                  FILTER_LONGTEXT, VLC_FALSE );
 
+#if X264_BUILD >= 51 /* r570 */
+    add_bool( SOUT_CFG_PREFIX "interlaced", 0, NULL, INTERLACED_TEXT, INTERLACED_LONGTEXT,
+              VLC_FALSE );
+#endif
+
 /* Ratecontrol */
 
     add_integer( SOUT_CFG_PREFIX "qp", 26, NULL, QP_TEXT, QP_LONGTEXT,
@@ -418,6 +449,12 @@ vlc_module_begin();
                 DIRECT_PRED_LONGTEXT, VLC_FALSE );
         change_string_list( direct_pred_list, direct_pred_list_text, 0 );
 
+#if X264_BUILD >= 52 /* r573 */
+    add_integer( SOUT_CFG_PREFIX "direct-8x8", 0, NULL, DIRECT_PRED_SIZE_TEXT,
+                 DIRECT_PRED_SIZE_LONGTEXT, VLC_FALSE );
+        change_integer_range( -1, 1 );
+#endif
+
 #if X264_BUILD >= 0x0012 /* r134 */
     add_bool( SOUT_CFG_PREFIX "weightb", 0, NULL, WEIGHTB_TEXT,
               WEIGHTB_LONGTEXT, VLC_FALSE );
@@ -485,6 +522,16 @@ vlc_module_begin();
         change_integer_range( 0, 1000 );
 #endif
 
+#if X264_BUILD >= 52 /* r573 */
+    add_integer( SOUT_CFG_PREFIX "deadzone-inter", 21, NULL, DEADZONE_INTER_TEXT,
+                 DEADZONE_INTRA_LONGTEXT, VLC_FALSE );
+        change_integer_range( 0, 32 );
+
+    add_integer( SOUT_CFG_PREFIX "deadzone-intra", 11, NULL, DEADZONE_INTRA_TEXT,
+                 DEADZONE_INTRA_LONGTEXT, VLC_FALSE );
+        change_integer_range( 0, 32 );
+#endif
+
 /* Input/Output */
 
     add_bool( SOUT_CFG_PREFIX "asm", 1, NULL, ASM_TEXT,
@@ -516,13 +563,13 @@ vlc_module_end();
 static const char *ppsz_sout_options[] = {
     "8x8dct", "analyse", "asm", "bframes", "bime", "bpyramid", "b-adapt",
     "b-bias", "b-rdo", "cabac", "chroma-me", "chroma-qp-offset", "cplxblur",
-    "crf", "dct-decimate", "direct", "filter", "fast-pskip", "frameref",
-    "ipratio", "keyint", "keyint-min", "loopfilter", "me", "merange",
-    "min-keyint", "mixed-refs", "nf", "nr", "pbratio", "psnr", "qblur",
-    "qp", "qcomp", "qpstep", "qpmax", "qpmin", "qp-max", "qp-min", "quiet",
-    "ratetol", "ref", "scenecut", "ssim", "subme", "subpel", "tolerance",
-    "trellis", "verbose", "vbv-bufsize", "vbv-init", "vbv-maxrate",
-    "weightb", NULL
+    "crf", "dct-decimate", "deadzone-inter", "deadzone-intra", "direct",
+    "direct-8x8", "filter", "fast-pskip", "frameref", "interlaced", "ipratio",
+    "keyint", "keyint-min", "loopfilter", "me", "merange", "min-keyint",
+    "mixed-refs", "nf", "nr", "pbratio", "psnr", "qblur", "qp", "qcomp",
+    "qpstep", "qpmax", "qpmin", "qp-max", "qp-min", "quiet", "ratetol",
+    "ref", "scenecut", "ssim", "subme", "subpel", "tolerance", "trellis", "verbose",
+    "vbv-bufsize", "vbv-init", "vbv-maxrate", "weightb", NULL
 };
 
 static block_t *Encode( encoder_t *, picture_t * );
@@ -668,6 +715,11 @@ static int  Open ( vlc_object_t *p_this )
         free( val.psz_string );
     }
 
+#if X264_BUILD >= 51 /* r570 */
+    var_Get( p_enc, SOUT_CFG_PREFIX "interlaced", &val );
+    p_sys->param.b_interlaced = val.b_bool;
+#endif
+
     var_Get( p_enc, SOUT_CFG_PREFIX "ipratio", &val );
     p_sys->param.rc.f_ip_factor = val.f_float;
 
@@ -851,6 +903,20 @@ static int  Open ( vlc_object_t *p_this )
     p_sys->param.analyse.b_dct_decimate = val.b_bool;
 #endif
 
+#if X264_BUILD >= 52
+    var_Get( p_enc, SOUT_CFG_PREFIX "deadzone-inter", &val );
+    if( val.i_int >= 0 && val.i_int <= 32 )
+        p_sys->param.analyse.i_luma_deadzone[0] = val.i_int;
+
+    var_Get( p_enc, SOUT_CFG_PREFIX "deadzone-intra", &val );
+    if( val.i_int >= 0 && val.i_int <= 32 )
+        p_sys->param.analyse.i_luma_deadzone[1] = val.i_int;   
+
+    var_Get( p_enc, SOUT_CFG_PREFIX "direct-8x8", &val );
+    if( val.i_int >= -1 && val.i_int <= 1 )
+        p_sys->param.analyse.i_direct_8x8_inference = val.i_int; 
+#endif
+
     var_Get( p_enc, SOUT_CFG_PREFIX "asm", &val );
     if( !val.b_bool ) p_sys->param.cpu = 0;