summaryrefslogtreecommitdiff
path: root/libavformat/mov.c
diff options
context:
space:
mode:
authorYusuke Nakamura <muken.the.vfrmaniac@gmail.com>2014-07-01 14:17:56 +0900
committerMartin Storsjö <martin@martin.st>2014-07-01 14:36:06 +0300
commit20f95f21f9b9595608ba668a6eca78f2d508be67 (patch)
treead1636052808bfce2143b5c4a7625891291b3002 /libavformat/mov.c
parent79793f833784121d574454af4871866576c0749d (diff)
mov: Support default-base-is-moof.
default-base-is-moof shall be set to track fragments compatible with DASH Media Segments. So, this is a fundamental support for ISOBMFF ver. DASH. This is meaningful only when base-data-offset-present is absent and two or more track fragments are present in a movie fragment. Signed-off-by: Martin Storsjö <martin@martin.st>
Diffstat (limited to 'libavformat/mov.c')
-rw-r--r--libavformat/mov.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 48326235bf..4a2d26543c 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -725,7 +725,7 @@ static int mov_read_moov(MOVContext *c, AVIOContext *pb, MOVAtom atom)
static int mov_read_moof(MOVContext *c, AVIOContext *pb, MOVAtom atom)
{
- c->fragment.moof_offset = avio_tell(pb) - 8;
+ c->fragment.moof_offset = c->fragment.implicit_offset = avio_tell(pb) - 8;
av_dlog(c->fc, "moof offset %"PRIx64"\n", c->fragment.moof_offset);
return mov_read_default(c, pb, atom);
}
@@ -2502,7 +2502,8 @@ static int mov_read_tfhd(MOVContext *c, AVIOContext *pb, MOVAtom atom)
}
frag->base_data_offset = flags & MOV_TFHD_BASE_DATA_OFFSET ?
- avio_rb64(pb) : frag->moof_offset;
+ avio_rb64(pb) : flags & MOV_TFHD_DEFAULT_BASE_IS_MOOF ?
+ frag->moof_offset : frag->implicit_offset;
frag->stsd_id = flags & MOV_TFHD_STSD_ID ? avio_rb32(pb) : trex->stsd_id;
frag->duration = flags & MOV_TFHD_DEFAULT_DURATION ?
@@ -2638,7 +2639,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if (pb->eof_reached)
return AVERROR_EOF;
- frag->moof_offset = offset;
+ frag->implicit_offset = offset;
st->duration = sc->track_end = dts + sc->time_offset;
return 0;
}