summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2014-07-01 16:31:54 +0200
committerMichael Niedermayer <michaelni@gmx.at>2014-07-01 16:31:57 +0200
commitfb318def5d3a65efcc6c1f54dabbc06c4959dbcc (patch)
tree7e45caeac327d50d1013a2a9761cffb9ad821412 /libavformat
parent8d0c7031a846fe27c2a44831e743ee722174fdc0 (diff)
parent20f95f21f9b9595608ba668a6eca78f2d508be67 (diff)
Merge commit '20f95f21f9b9595608ba668a6eca78f2d508be67'
* commit '20f95f21f9b9595608ba668a6eca78f2d508be67': mov: Support default-base-is-moof. Merged-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/isom.h2
-rw-r--r--libavformat/mov.c7
2 files changed, 6 insertions, 3 deletions
diff --git a/libavformat/isom.h b/libavformat/isom.h
index 253451ef38..414b87cc9d 100644
--- a/libavformat/isom.h
+++ b/libavformat/isom.h
@@ -73,6 +73,7 @@ typedef struct MOVFragment {
unsigned track_id;
uint64_t base_data_offset;
uint64_t moof_offset;
+ uint64_t implicit_offset;
unsigned stsd_id;
unsigned duration;
unsigned size;
@@ -190,6 +191,7 @@ void ff_mp4_parse_es_descr(AVIOContext *pb, int *es_id);
#define MOV_TFHD_DEFAULT_SIZE 0x10
#define MOV_TFHD_DEFAULT_FLAGS 0x20
#define MOV_TFHD_DURATION_IS_EMPTY 0x010000
+#define MOV_TFHD_DEFAULT_BASE_IS_MOOF 0x020000
#define MOV_TRUN_DATA_OFFSET 0x01
#define MOV_TRUN_FIRST_SAMPLE_FLAGS 0x04
diff --git a/libavformat/mov.c b/libavformat/mov.c
index ff45394ae8..03ed6d4220 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -779,7 +779,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);
}
@@ -2730,7 +2730,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 ?
@@ -2872,7 +2873,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;
}