[x264-devel] Add full-recon API option

Jason Garrett-Glaser git at videolan.org
Wed Mar 7 03:20:17 CET 2012


x264 | branch: master | Jason Garrett-Glaser <jason at x264.com> | Fri Feb 24 13:16:52 2012 -0800| [6a27a481d4c3508ce778a61a139a4734bb8126f7] | committer: Jason Garrett-Glaser

Add full-recon API option
Fully reconstruct frames even without dump-yuv.

> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=6a27a481d4c3508ce778a61a139a4734bb8126f7
---

 encoder/encoder.c |    8 ++++++--
 x264.h            |    8 ++++++--
 2 files changed, 12 insertions(+), 4 deletions(-)

diff --git a/encoder/encoder.c b/encoder/encoder.c
index a2023e9..2a55b76 100644
--- a/encoder/encoder.c
+++ b/encoder/encoder.c
@@ -921,6 +921,9 @@ static int x264_validate_parameters( x264_t *h, int b_open )
         h->param.i_nal_hrd = X264_NAL_HRD_VBR;
     }
 
+    if( h->param.psz_dump_yuv )
+        h->param.b_full_recon = 1;
+
     /* ensure the booleans are 0 or 1 so they can be used in math */
 #define BOOLIFY(x) h->param.x = !!h->param.x
     BOOLIFY( b_cabac );
@@ -941,6 +944,7 @@ static int x264_validate_parameters( x264_t *h, int b_open )
     BOOLIFY( b_fake_interlaced );
     BOOLIFY( b_open_gop );
     BOOLIFY( b_bluray_compat );
+    BOOLIFY( b_full_recon );
     BOOLIFY( analyse.b_transform_8x8 );
     BOOLIFY( analyse.b_weighted_bipred );
     BOOLIFY( analyse.b_chroma_me );
@@ -1839,7 +1843,7 @@ static void x264_fdec_filter_row( x264_t *h, int mb_y, int b_inloop )
      * above each MB, as bS=4 doesn't happen for the top of interlaced mbpairs. */
     int minpix_y = min_y*16 - 4 * !b_start;
     int maxpix_y = mb_y*16 - 4 * !b_end;
-    b_deblock &= b_hpel || h->param.psz_dump_yuv;
+    b_deblock &= b_hpel || h->param.b_full_recon;
     if( h->param.b_sliced_threads && b_start && min_y && !b_inloop )
     {
         b_deblock = 0;         /* We already deblocked on the inloop pass. */
@@ -2144,7 +2148,7 @@ static int x264_slice_write( x264_t *h )
     int orig_last_mb = h->sh.i_last_mb;
     uint8_t *last_emu_check;
     x264_bs_bak_t bs_bak[2];
-    b_deblock &= b_hpel || h->param.psz_dump_yuv;
+    b_deblock &= b_hpel || h->param.b_full_recon;
     bs_realign( &h->out.bs );
 
     /* Slice */
diff --git a/x264.h b/x264.h
index 2a34d01..efc61bc 100644
--- a/x264.h
+++ b/x264.h
@@ -41,7 +41,7 @@
 
 #include "x264_config.h"
 
-#define X264_BUILD 121
+#define X264_BUILD 122
 
 /* x264_t:
  *      opaque handler for encoder */
@@ -323,6 +323,7 @@ typedef struct x264_param_t
     void        *p_log_private;
     int         i_log_level;
     int         b_visualize;
+    int         b_full_recon;   /* fully reconstruct frames, even when not necessary for encoding.  Implied by psz_dump_yuv */
     char        *psz_dump_yuv;  /* filename for reconstructed frames */
 
     /* Encoder analyser parameters */
@@ -727,7 +728,10 @@ typedef struct
            of H.264 itself; in this case, the caller must force an IDR frame
            if it needs the changed parameter to apply immediately. */
     x264_param_t *param;
-    /* In: raw data */
+    /* In: raw image data */
+    /* Out: reconstructed image data.  x264 may skip part of the reconstruction process,
+            e.g. deblocking, in frames where it isn't necessary.  To force complete
+            reconstruction, at a small speed cost, set b_full_recon. */
     x264_image_t img;
     /* In: optional information to modify encoder decisions for this frame
      * Out: information about the encoded frame */



More information about the x264-devel mailing list