|
|
|
@ -1727,6 +1727,7 @@ static void mov_build_index(MOVContext *mov, AVStream *st) |
|
|
|
|
unsigned int stps_index = 0; |
|
|
|
|
unsigned int i, j; |
|
|
|
|
uint64_t stream_size = 0; |
|
|
|
|
AVIndexEntry *mem; |
|
|
|
|
|
|
|
|
|
/* adjust first dts according to edit list */ |
|
|
|
|
if (sc->time_offset && mov->time_scale > 0) { |
|
|
|
@ -1755,12 +1756,13 @@ static void mov_build_index(MOVContext *mov, AVStream *st) |
|
|
|
|
|
|
|
|
|
if (!sc->sample_count) |
|
|
|
|
return; |
|
|
|
|
if (sc->sample_count >= UINT_MAX / sizeof(*st->index_entries)) |
|
|
|
|
if (sc->sample_count >= UINT_MAX / sizeof(*st->index_entries) - st->nb_index_entries) |
|
|
|
|
return; |
|
|
|
|
st->index_entries = av_malloc(sc->sample_count*sizeof(*st->index_entries)); |
|
|
|
|
if (!st->index_entries) |
|
|
|
|
mem = av_realloc(st->index_entries, (st->nb_index_entries + sc->sample_count) * sizeof(*st->index_entries)); |
|
|
|
|
if (!mem) |
|
|
|
|
return; |
|
|
|
|
st->index_entries_allocated_size = sc->sample_count*sizeof(*st->index_entries); |
|
|
|
|
st->index_entries = mem; |
|
|
|
|
st->index_entries_allocated_size = (st->nb_index_entries + sc->sample_count) * sizeof(*st->index_entries); |
|
|
|
|
|
|
|
|
|
for (i = 0; i < sc->chunk_count; i++) { |
|
|
|
|
current_offset = sc->chunk_offsets[i]; |
|
|
|
@ -1844,12 +1846,13 @@ static void mov_build_index(MOVContext *mov, AVStream *st) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
av_dlog(mov->fc, "chunk count %d\n", total); |
|
|
|
|
if (total >= UINT_MAX / sizeof(*st->index_entries)) |
|
|
|
|
if (total >= UINT_MAX / sizeof(*st->index_entries) - st->nb_index_entries) |
|
|
|
|
return; |
|
|
|
|
st->index_entries = av_malloc(total*sizeof(*st->index_entries)); |
|
|
|
|
if (!st->index_entries) |
|
|
|
|
mem = av_realloc(st->index_entries, (st->nb_index_entries + total) * sizeof(*st->index_entries)); |
|
|
|
|
if (!mem) |
|
|
|
|
return; |
|
|
|
|
st->index_entries_allocated_size = total*sizeof(*st->index_entries); |
|
|
|
|
st->index_entries = mem; |
|
|
|
|
st->index_entries_allocated_size = (st->nb_index_entries + total) * sizeof(*st->index_entries); |
|
|
|
|
|
|
|
|
|
// populate index
|
|
|
|
|
for (i = 0; i < sc->chunk_count; i++) { |
|
|
|
|