vpxenc: add deterministic output option
authorJohn Koleszar <jkoleszar@google.com>
Tue, 26 Oct 2010 20:22:22 +0000 (16:22 -0400)
committerJohn Koleszar <jkoleszar@google.com>
Tue, 26 Oct 2010 20:22:22 +0000 (16:22 -0400)
By baking the version number into the output file, a hash of the file
will vary from commit to commit, even if the output is otherwise bit
exact. Add a -D option to suppress this behavior, for use when
bisecting or other debugging.

Change-Id: I5089a8ce5719920ffaf47620fa9069b81fa15673

vpxenc.c

index a178782..bc69f5d 100644 (file)
--- a/vpxenc.c
+++ b/vpxenc.c
@@ -430,6 +430,8 @@ struct cue_entry
 
 struct EbmlGlobal
 {
+    int debug;
+
     FILE    *stream;
     uint64_t last_pts_ms;
     vpx_rational_t  framerate;
@@ -552,8 +554,10 @@ write_webm_seek_info(EbmlGlobal *ebml)
         Ebml_SerializeUnsigned(ebml, TimecodeScale, 1000000);
         Ebml_SerializeFloat(ebml, Segment_Duration,
                             ebml->last_pts_ms + frame_time);
-        Ebml_SerializeString(ebml, 0x4D80, "vpxenc" VERSION_STRING);
-        Ebml_SerializeString(ebml, 0x5741, "vpxenc" VERSION_STRING);
+        Ebml_SerializeString(ebml, 0x4D80,
+            ebml->debug ? "vpxenc" : "vpxenc" VERSION_STRING);
+        Ebml_SerializeString(ebml, 0x5741,
+            ebml->debug ? "vpxenc" : "vpxenc" VERSION_STRING);
         Ebml_EndSubElement(ebml, &startInfo);
     }
 }
@@ -740,6 +744,8 @@ write_webm_file_footer(EbmlGlobal *glob)
 
 #include "args.h"
 
+static const arg_def_t debugmode = ARG_DEF("D", "debug", 0,
+        "Debug mode (makes output deterministic)");
 static const arg_def_t outputfile = ARG_DEF("o", "output", 1,
         "Output filename");
 static const arg_def_t use_yv12 = ARG_DEF(NULL, "yv12", 0,
@@ -774,6 +780,7 @@ static const arg_def_t use_ivf          = ARG_DEF(NULL, "ivf", 0,
         "Output IVF (default is WebM)");
 static const arg_def_t *main_args[] =
 {
+    &debugmode,
     &outputfile, &codecarg, &passes, &pass_arg, &fpf_name, &limit, &deadline,
     &best_dl, &good_dl, &rt_dl,
     &verbosearg, &psnrarg, &use_ivf, &framerate,
@@ -1052,6 +1059,8 @@ int main(int argc, const char **argv_)
             write_webm = 0;
         else if (arg_match(&arg, &outputfile, argi))
             out_fn = arg.val;
+        else if (arg_match(&arg, &debugmode, argi))
+            ebml.debug = 1;
         else
             argj++;
     }