[FFmpeg-cvslog] avconv: make the -passlogfile option per-stream.

Anton Khirnov git at videolan.org
Fri Aug 31 13:08:35 CEST 2012


ffmpeg | branch: master | Anton Khirnov <anton at khirnov.net> | Sun Aug 19 09:15:48 2012 +0200| [bbcedade008b5471c71122944cf4dee1951138ec] | committer: Anton Khirnov

avconv: make the -passlogfile option per-stream.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=bbcedade008b5471c71122944cf4dee1951138ec
---

 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 d175c12..4fcce0e 100644
--- a/Changelog
+++ b/Changelog
@@ -43,7 +43,7 @@ version <next>:
 - 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 592e9a8..0114f4f 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 7a51ccb..2d6f60b 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 28bd926..1859af8 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 58b530c..ecf7192 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
 
- at item -passlogfile @var{prefix} (@emph{global})
+ at 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



More information about the ffmpeg-cvslog mailing list