[FFmpeg-devel] [PATCH 4/5] concatdec: add option for adding segment start time and duration metadata

Marton Balint cus at passwd.hu
Tue Nov 10 00:25:29 CET 2015


Signed-off-by: Marton Balint <cus at passwd.hu>
---
 doc/demuxers.texi       |  8 ++++++++
 libavformat/concatdec.c | 10 ++++++++++
 2 files changed, 18 insertions(+)

diff --git a/doc/demuxers.texi b/doc/demuxers.texi
index 34bfc9b..349b531 100644
--- a/doc/demuxers.texi
+++ b/doc/demuxers.texi
@@ -204,6 +204,14 @@ Currently, the only conversion is adding the h264_mp4toannexb bitstream
 filter to H.264 streams in MP4 format. This is necessary in particular if
 there are resolution changes.
 
+ at item segment_time_metadata
+If set to 1, every packet will contain the @var{lavf.concat.start_time} and the
+ at var{lavf.concat.duration} packet metadata values which are the start_time and
+the duration of the respective file segments in the concatenated output
+expressed in microseconds. The duration metadata is only set if it is known
+based on the concat file.
+The default is 0.
+
 @end table
 
 @section flv
diff --git a/libavformat/concatdec.c b/libavformat/concatdec.c
index 1693941..297947c 100644
--- a/libavformat/concatdec.c
+++ b/libavformat/concatdec.c
@@ -62,6 +62,7 @@ typedef struct {
     int eof;
     ConcatMatchMode stream_match_mode;
     unsigned auto_convert;
+    int segment_time_metadata;
 } ConcatContext;
 
 static int concat_probe(AVProbeData *probe)
@@ -318,6 +319,13 @@ static int open_file(AVFormatContext *avf, unsigned fileno)
     file->file_inpoint = (file->inpoint == AV_NOPTS_VALUE) ? file->file_start_time : file->inpoint;
     if (file->duration == AV_NOPTS_VALUE && file->outpoint != AV_NOPTS_VALUE)
         file->duration = file->outpoint - file->file_inpoint;
+
+    if (cat->segment_time_metadata) {
+        av_dict_set_int(&file->metadata, "lavf.concatdec.start_time", file->start_time, 0);
+        if (file->duration != AV_NOPTS_VALUE)
+            av_dict_set_int(&file->metadata, "lavf.concatdec.duration", file->duration, 0);
+    }
+
     if ((ret = match_streams(avf)) < 0)
         return ret;
     if (file->inpoint != AV_NOPTS_VALUE) {
@@ -701,6 +709,8 @@ static const AVOption options[] = {
       OFFSET(safe), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, DEC },
     { "auto_convert", "automatically convert bitstream format",
       OFFSET(auto_convert), AV_OPT_TYPE_INT, {.i64 = 1}, 0, 1, DEC },
+    { "segment_time_metadata", "output file segment start time and duration as packet metadata",
+      OFFSET(segment_time_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, DEC },
     { NULL }
 };
 
-- 
2.6.2



More information about the ffmpeg-devel mailing list