2014-10-30 0:09 GMT+09:00 Martin Storsjö <[email protected]>: > Similarly to the omit_tfhd_offset flag added in e7bf085b, this > avoids writing absolute byte positions to the file, making them > more easily streamable. > > This is a new feature from 14496-12:2012, so application support > isn't necessarily too widespread yet (support for it in libav was > added in 20f95f21f in July 2014). > --- > doc/muxers.texi | 7 +++++++ > libavformat/movenc.c | 14 +++++++++++--- > libavformat/movenc.h | 1 + > libavformat/version.h | 2 +- > 4 files changed, 20 insertions(+), 4 deletions(-) > > diff --git a/doc/muxers.texi b/doc/muxers.texi > index e00a162..ee3edb9 100644 > --- a/doc/muxers.texi > +++ b/doc/muxers.texi > @@ -340,6 +340,13 @@ cause failures when the file is reprocessed with > certain tagging programs. > @item -movflags omit_tfhd_offset > Don't write any absolute base_data_offset in tfhd atoms. This avoids > tying fragments to absolute byte positions in the file/streams. > +@item -movflags default_base_moof > +Similarly to the omit_tfhd_offset, this flag avoids writing the > +absolute base_data_offset field in tfhd atoms, but does so by using > +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). > @end table > > Smooth Streaming content can be pushed in real time to a publishing > diff --git a/libavformat/movenc.c b/libavformat/movenc.c > index 1470ebf..4196cbb 100644 > --- a/libavformat/movenc.c > +++ b/libavformat/movenc.c > @@ -58,6 +58,7 @@ static const AVOption options[] = { > { "faststart", "Run a second pass to put the index (moov atom) at the > beginning of the file", 0, AV_OPT_TYPE_CONST, {.i64 = > FF_MOV_FLAG_FASTSTART}, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, > "movflags" }, > { "omit_tfhd_offset", "Omit the base data offset in tfhd atoms", 0, > AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_OMIT_TFHD_OFFSET}, INT_MIN, INT_MAX, > AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, > { "disable_chpl", "Disable Nero chapter atom", 0, AV_OPT_TYPE_CONST, > {.i64 = FF_MOV_FLAG_DISABLE_CHPL}, INT_MIN, INT_MAX, > AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, > + { "default_base_moof", "Set the default-base-is-moof flag in tfhd > atoms", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MOV_FLAG_DEFAULT_BASE_MOOF}, > INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM, "movflags" }, > FF_RTP_FLAG_OPTS(MOVMuxContext, rtp_flags), > { "skip_iods", "Skip writing iods atom.", offsetof(MOVMuxContext, > iods_skip), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, AV_OPT_FLAG_ENCODING_PARAM}, > { "iods_audio_profile", "iods audio profile atom.", > offsetof(MOVMuxContext, iods_audio_profile), AV_OPT_TYPE_INT, {.i64 = -1}, > -1, 255, AV_OPT_FLAG_ENCODING_PARAM}, > @@ -2386,6 +2387,10 @@ static int mov_write_tfhd_tag(AVIOContext *pb, > MOVMuxContext *mov, > } > if (mov->flags & FF_MOV_FLAG_OMIT_TFHD_OFFSET) > flags &= ~MOV_TFHD_BASE_DATA_OFFSET; > + if (mov->flags & FF_MOV_FLAG_DEFAULT_BASE_MOOF) { > + flags &= ~MOV_TFHD_BASE_DATA_OFFSET; > + flags |= MOV_TFHD_DEFAULT_BASE_IS_MOOF; > + } > > /* Don't set a default sample size, the silverlight player refuses > * to play files with that set. Don't set a default sample duration, > @@ -2457,7 +2462,7 @@ static int mov_write_trun_tag(AVIOContext *pb, > MOVMuxContext *mov, > > avio_wb32(pb, track->entry); /* sample count */ > if (mov->flags & FF_MOV_FLAG_OMIT_TFHD_OFFSET && > - !(mov->flags & FF_MOV_FLAG_SEPARATE_MOOF) && > + !(mov->flags & (FF_MOV_FLAG_SEPARATE_MOOF | > FF_MOV_FLAG_DEFAULT_BASE_MOOF)) && > !mov->first_trun) > avio_wb32(pb, 0); /* Later tracks follow immediately after the > previous one */ > else > @@ -2717,6 +2722,8 @@ static int mov_write_ftyp_tag(AVIOContext *pb, > AVFormatContext *s) > minor = has_h264 ? 0x20000 : 0x10000; > } else if (mov->mode == MODE_PSP) > ffio_wfourcc(pb, "MSNV"); > + else if (mov->mode == MODE_MP4 && mov->flags & > FF_MOV_FLAG_DEFAULT_BASE_MOOF) > + ffio_wfourcc(pb, "iso5"); // Required when using > default-base-is-moof > else if (mov->mode == MODE_MP4) > ffio_wfourcc(pb, "isom"); > else if (mov->mode == MODE_IPOD) > @@ -2734,8 +2741,9 @@ static int mov_write_ftyp_tag(AVIOContext *pb, > AVFormatContext *s) > ffio_wfourcc(pb, "qt "); > else if (mov->mode == MODE_ISM) { > ffio_wfourcc(pb, "piff"); > - ffio_wfourcc(pb, "iso2"); > - } else { > + if (!(mov->flags & FF_MOV_FLAG_DEFAULT_BASE_MOOF)) > + ffio_wfourcc(pb, "iso2"); > + } else if (!(mov->flags & FF_MOV_FLAG_DEFAULT_BASE_MOOF)) { > ffio_wfourcc(pb, "isom"); > ffio_wfourcc(pb, "iso2"); > if (has_h264) > diff --git a/libavformat/movenc.h b/libavformat/movenc.h > index a463a8d..56e2647 100644 > --- a/libavformat/movenc.h > +++ b/libavformat/movenc.h > @@ -178,6 +178,7 @@ typedef struct MOVMuxContext { > #define FF_MOV_FLAG_FASTSTART 128 > #define FF_MOV_FLAG_OMIT_TFHD_OFFSET 256 > #define FF_MOV_FLAG_DISABLE_CHPL 512 > +#define FF_MOV_FLAG_DEFAULT_BASE_MOOF 1024 > > int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt); > > diff --git a/libavformat/version.h b/libavformat/version.h > index 8e08311..dfb6089 100644 > --- a/libavformat/version.h > +++ b/libavformat/version.h > @@ -31,7 +31,7 @@ > > #define LIBAVFORMAT_VERSION_MAJOR 56 > #define LIBAVFORMAT_VERSION_MINOR 6 > -#define LIBAVFORMAT_VERSION_MICRO 1 > +#define LIBAVFORMAT_VERSION_MICRO 2 > > #define LIBAVFORMAT_VERSION_INT AV_VERSION_INT(LIBAVFORMAT_VERSION_MAJOR, > \ > LIBAVFORMAT_VERSION_MINOR, > \ > -- > 1.9.3 (Apple Git-50) > > _______________________________________________ > libav-devel mailing list > [email protected] > https://lists.libav.org/mailman/listinfo/libav-devel >
OK with me except for "brand" option :P _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
