From 75afcee962c660b6fcd82e0eb8b1762aadee584f Mon Sep 17 00:00:00 2001 From: John Koleszar Date: Tue, 26 Oct 2010 16:22:22 -0400 Subject: [PATCH] vpxenc: add deterministic output option 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 | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/vpxenc.c b/vpxenc.c index a178782..bc69f5d 100644 --- 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++; } -- 2.7.4