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

Reply via email to