From bbcedade008b5471c71122944cf4dee1951138ec Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Sun, 19 Aug 2012 09:15:48 +0200 Subject: [PATCH] avconv: make the -passlogfile option per-stream. --- Changelog | 2 +- avconv.c | 4 +++- avconv.h | 4 +++- avconv_opt.c | 8 ++++++-- doc/avconv.texi | 2 +- 5 files changed, 14 insertions(+), 6 deletions(-) diff --git a/Changelog b/Changelog index d175c127d7..4fcce0e630 100644 --- a/Changelog +++ b/Changelog @@ -43,7 +43,7 @@ version : - RTMPTE protocol support - Canopus Lossless Codec decoder - avconv -shortest option is now per-output file, - -pass is now per-output stream + -pass and -passlogfile are now per-output stream - Ut Video encoder diff --git a/avconv.c b/avconv.c index 592e9a8aba..0114f4f21f 100644 --- a/avconv.c +++ b/avconv.c @@ -183,6 +183,7 @@ void exit_program(int ret) av_freep(&output_streams[i]->forced_keyframes); av_freep(&output_streams[i]->avfilter); + av_freep(&output_streams[i]->logfile_prefix); av_freep(&output_streams[i]->filtered_frame); av_freep(&output_streams[i]); } @@ -1747,7 +1748,8 @@ static int transcode_init(void) FILE *f; snprintf(logfilename, sizeof(logfilename), "%s-%d.log", - pass_logfilename_prefix ? pass_logfilename_prefix : DEFAULT_PASS_LOGFILENAME_PREFIX, + ost->logfile_prefix ? ost->logfile_prefix : + DEFAULT_PASS_LOGFILENAME_PREFIX, i); if (!strcmp(ost->enc->name, "libx264")) { av_dict_set(&ost->opts, "stats", logfilename, AV_DICT_DONT_OVERWRITE); diff --git a/avconv.h b/avconv.h index 7a51ccbec1..2d6f60b451 100644 --- a/avconv.h +++ b/avconv.h @@ -160,6 +160,8 @@ typedef struct OptionsContext { int nb_filters; SpecifierOpt *pass; int nb_pass; + SpecifierOpt *passlogfiles; + int nb_passlogfiles; } OptionsContext; typedef struct InputFilter { @@ -284,6 +286,7 @@ typedef struct OutputStream { int forced_kf_index; char *forced_keyframes; + char *logfile_prefix; FILE *logfile; OutputFilter *filter; @@ -323,7 +326,6 @@ extern int nb_output_files; extern FilterGraph **filtergraphs; extern int nb_filtergraphs; -extern char *pass_logfilename_prefix; extern char *vstats_filename; extern float audio_drift_threshold; diff --git a/avconv_opt.c b/avconv_opt.c index 28bd926c2f..1859af8cf0 100644 --- a/avconv_opt.c +++ b/avconv_opt.c @@ -54,7 +54,6 @@ }\ } -char *pass_logfilename_prefix = NULL; char *vstats_filename; float audio_drift_threshold = 0.1; @@ -967,6 +966,11 @@ static OutputStream *new_video_stream(OptionsContext *o, AVFormatContext *oc) } } + MATCH_PER_STREAM_OPT(passlogfiles, str, ost->logfile_prefix, oc, st); + if (ost->logfile_prefix && + !(ost->logfile_prefix = av_strdup(ost->logfile_prefix))) + exit_program(1); + MATCH_PER_STREAM_OPT(forced_key_frames, str, ost->forced_keyframes, oc, st); if (ost->forced_keyframes) ost->forced_keyframes = av_strdup(ost->forced_keyframes); @@ -1967,7 +1971,7 @@ const OptionDef options[] = { "use same quantizer as source (implies VBR)" }, { "pass", OPT_VIDEO | HAS_ARG | OPT_SPEC | OPT_INT, { .off = OFFSET(pass) }, "select the pass number (1 or 2)", "n" }, - { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT, { &pass_logfilename_prefix }, + { "passlogfile", OPT_VIDEO | HAS_ARG | OPT_STRING | OPT_EXPERT | OPT_SPEC, { .off = OFFSET(passlogfiles) }, "select two pass log file name prefix", "prefix" }, { "deinterlace", OPT_VIDEO | OPT_EXPERT , { .func_arg = opt_deinterlace }, "this option is deprecated, use the yadif filter instead" }, diff --git a/doc/avconv.texi b/doc/avconv.texi index 58b530c0af..ecf7192817 100644 --- a/doc/avconv.texi +++ b/doc/avconv.texi @@ -492,7 +492,7 @@ avconv -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y NUL avconv -i foo.mov -c:v libxvid -pass 1 -an -f rawvideo -y /dev/null @end example -@item -passlogfile @var{prefix} (@emph{global}) +@item -passlogfile[:@var{stream_specifier}] @var{prefix} (@emph{output,per-stream}) Set two-pass log file name prefix to @var{prefix}, the default file name prefix is ``av2pass''. The complete file name will be @file{PREFIX-N.log}, where N is a number specific to the output