diff --git a/doc/muxers.texi b/doc/muxers.texi index 27eb9a0f694582a14ceecee467a125c8d5172fcf..c8a056fa4dec56b7c2c87a7019293028025fcdd9 100644 --- a/doc/muxers.texi +++ b/doc/muxers.texi @@ -884,6 +884,9 @@ the new default-base-is-moof flag instead. This flag is new from 14496-12:2012. This may make the fragments easier to parse in certain circumstances (avoiding basing track fragment location calculations on the implicit end of the previous track fragment). +@item -write_tmcd +Specify @code{on} to force writing a timecode track, @code{off} to disable it +and @code{auto} to write a timecode track only for mov and mp4 output (default). @end table @subsection Example diff --git a/libavformat/movenc.c b/libavformat/movenc.c index 0382309b51308cab67445e17bc127694173d0082..449d0b537c4c1bbe0b41303c2c03790ef44f7eef 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -90,6 +90,7 @@ static const AVOption options[] = { { "encryption_key", "The media encryption key (hex)", offsetof(MOVMuxContext, encryption_key), AV_OPT_TYPE_BINARY, .flags = AV_OPT_FLAG_ENCODING_PARAM }, { "encryption_kid", "The media encryption key identifier (hex)", offsetof(MOVMuxContext, encryption_kid), AV_OPT_TYPE_BINARY, .flags = AV_OPT_FLAG_ENCODING_PARAM }, { "use_stream_ids_as_track_ids", "use stream ids as track ids", offsetof(MOVMuxContext, use_stream_ids_as_track_ids), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM}, + { "write_tmcd", "force or disable writing tmcd", offsetof(MOVMuxContext, write_tmcd), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, AV_OPT_FLAG_ENCODING_PARAM}, { NULL }, }; @@ -2312,7 +2313,7 @@ static int mov_write_minf_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext } else if (track->tag == MKTAG('r','t','p',' ')) { mov_write_hmhd_tag(pb); } else if (track->tag == MKTAG('t','m','c','d')) { - if (track->mode == MODE_MP4) + if (track->mode != MODE_MOV) mov_write_nmhd_tag(pb); else mov_write_gmhd_tag(pb, track); @@ -5539,7 +5540,8 @@ static int mov_write_header(AVFormatContext *s) } } - if (mov->mode == MODE_MOV || mov->mode == MODE_MP4) { + if ( mov->write_tmcd == -1 && (mov->mode == MODE_MOV || mov->mode == MODE_MP4) + || mov->write_tmcd == 1) { tmcd_track = mov->nb_streams; /* +1 tmcd track for each video stream with a timecode */ diff --git a/libavformat/movenc.h b/libavformat/movenc.h index ea76e39f236faf56f122ad765a2b13747786c9b6..1f7a9d7abda8e00208214ad4d9045c91c70b0666 100644 --- a/libavformat/movenc.h +++ b/libavformat/movenc.h @@ -219,6 +219,7 @@ typedef struct MOVMuxContext { int use_stream_ids_as_track_ids; int track_ids_ok; + int write_tmcd; } MOVMuxContext; #define FF_MOV_FLAG_RTP_HINT (1 << 0)