|
|
|
@@ -1326,6 +1326,10 @@ static int update_frag_index(MOVContext *c, int64_t offset) |
|
|
|
return -1; |
|
|
|
|
|
|
|
for (i = 0; i < c->fc->nb_streams; i++) { |
|
|
|
// Avoid building frag index if streams lack track id. |
|
|
|
if (c->fc->streams[i]->id < 0) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
frag_stream_info[i].id = c->fc->streams[i]->id; |
|
|
|
frag_stream_info[i].sidx_pts = AV_NOPTS_VALUE; |
|
|
|
frag_stream_info[i].tfdt_dts = AV_NOPTS_VALUE; |
|
|
|
@@ -4154,7 +4158,7 @@ static int mov_read_trak(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
|
|
|
|
st = avformat_new_stream(c->fc, NULL); |
|
|
|
if (!st) return AVERROR(ENOMEM); |
|
|
|
st->id = c->fc->nb_streams; |
|
|
|
st->id = -1; |
|
|
|
sc = av_mallocz(sizeof(MOVStreamContext)); |
|
|
|
if (!sc) return AVERROR(ENOMEM); |
|
|
|
|
|
|
|
@@ -4438,6 +4442,11 @@ static int mov_read_tkhd(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
st = c->fc->streams[c->fc->nb_streams-1]; |
|
|
|
sc = st->priv_data; |
|
|
|
|
|
|
|
// Each stream (trak) should have exactly 1 tkhd. This catches bad files and |
|
|
|
// avoids corrupting AVStreams mapped to an earlier tkhd. |
|
|
|
if (st->id != -1) |
|
|
|
return AVERROR_INVALIDDATA; |
|
|
|
|
|
|
|
version = avio_r8(pb); |
|
|
|
flags = avio_rb24(pb); |
|
|
|
st->disposition |= (flags & MOV_TKHD_FLAG_ENABLED) ? AV_DISPOSITION_DEFAULT : 0; |
|
|
|
@@ -4704,6 +4713,7 @@ static int mov_read_trun(MOVContext *c, AVIOContext *pb, MOVAtom atom) |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
av_assert0(index_entry_pos <= st->nb_index_entries); |
|
|
|
|
|
|
|
avio_r8(pb); /* version */ |
|
|
|
flags = avio_rb24(pb); |
|
|
|
|