mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-17 20:17:55 +02:00
movenc: Keep track of the allocated size for the cluster array
When writing fragmented mp4, the cluster array is reset when a fragment is written. Instead of starting off reallocating the array only based on the number of current elements in it, keep track of how many elements there were allocated earlier. This avoids reallocating this array needlessly when writing fragmented mp4 files. Bug-Id: 525 Signed-off-by: Martin Storsjö <martin@martin.st>
This commit is contained in:
parent
fc962d4e7a
commit
3b4feac1ec
@ -2869,10 +2869,12 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
|
||||
memcpy(trk->vos_data, pkt->data, size);
|
||||
}
|
||||
|
||||
if (!(trk->entry % MOV_INDEX_CLUSTER_SIZE)) {
|
||||
trk->cluster = av_realloc(trk->cluster, (trk->entry + MOV_INDEX_CLUSTER_SIZE) * sizeof(*trk->cluster));
|
||||
if (!trk->cluster)
|
||||
return -1;
|
||||
if (trk->entry >= trk->cluster_capacity) {
|
||||
unsigned new_capacity = trk->entry + MOV_INDEX_CLUSTER_SIZE;
|
||||
if (av_reallocp_array(&trk->cluster, new_capacity,
|
||||
sizeof(*trk->cluster)))
|
||||
return AVERROR(ENOMEM);
|
||||
trk->cluster_capacity = new_capacity;
|
||||
}
|
||||
|
||||
trk->cluster[trk->entry].pos = avio_tell(pb) - size;
|
||||
|
@ -93,6 +93,7 @@ typedef struct MOVTrack {
|
||||
int vos_len;
|
||||
uint8_t *vos_data;
|
||||
MOVIentry *cluster;
|
||||
unsigned cluster_capacity;
|
||||
int audio_vbr;
|
||||
int height; ///< active picture (w/o VBI) height for D-10/IMX
|
||||
uint32_t tref_tag;
|
||||
|
Loading…
x
Reference in New Issue
Block a user