mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2024-12-27 18:02:11 +00:00
movenc: Add a flag for using default-base-is-moof in tfhd atoms
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). Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
600d5ee6b1
commit
cf589faa5b
@ -340,6 +340,13 @@ cause failures when the file is reprocessed with certain tagging programs.
|
||||
@item -movflags omit_tfhd_offset
|
||||
Do not 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
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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, \
|
||||
|
Loading…
Reference in New Issue
Block a user