mirror of
https://mirror.skon.top/https://github.com/FFmpeg/FFmpeg
synced 2026-04-20 21:00:41 +08:00
libavformat/movenc: Uses dynamic buffers for fragmented chunks
This commit is contained in:
@@ -6391,7 +6391,7 @@ static int mov_flush_fragment_interleaving(AVFormatContext *s, MOVTrack *track)
|
||||
|
||||
offset = avio_tell(mov->mdat_buf);
|
||||
avio_write(mov->mdat_buf, buf, buf_size);
|
||||
ffio_free_dyn_buf(&track->mdat_buf);
|
||||
ffio_reset_dyn_buf(track->mdat_buf);
|
||||
|
||||
for (i = track->entries_flushed; i < track->entry; i++)
|
||||
track->cluster[i].pos += offset;
|
||||
@@ -6596,7 +6596,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
||||
avio_wb32(s->pb, buf_size + 8);
|
||||
ffio_wfourcc(s->pb, "mdat");
|
||||
avio_write(s->pb, buf, buf_size);
|
||||
ffio_free_dyn_buf(&mov->mdat_buf);
|
||||
ffio_reset_dyn_buf(mov->mdat_buf);
|
||||
|
||||
if (mov->flags & FF_MOV_FLAG_GLOBAL_SIDX)
|
||||
mov->reserved_header_pos = avio_tell(s->pb);
|
||||
@@ -6683,17 +6683,16 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
|
||||
if (!mov->frag_interleave) {
|
||||
if (!track->mdat_buf)
|
||||
continue;
|
||||
buf_size = avio_close_dyn_buf(track->mdat_buf, &buf);
|
||||
track->mdat_buf = NULL;
|
||||
buf_size = avio_get_dyn_buf(track->mdat_buf, &buf);
|
||||
avio_write(s->pb, buf, buf_size);
|
||||
ffio_reset_dyn_buf(track->mdat_buf);
|
||||
} else {
|
||||
if (!mov->mdat_buf)
|
||||
continue;
|
||||
buf_size = avio_close_dyn_buf(mov->mdat_buf, &buf);
|
||||
mov->mdat_buf = NULL;
|
||||
buf_size = avio_get_dyn_buf(mov->mdat_buf, &buf);
|
||||
avio_write(s->pb, buf, buf_size);
|
||||
ffio_reset_dyn_buf(mov->mdat_buf);
|
||||
}
|
||||
|
||||
avio_write(s->pb, buf, buf_size);
|
||||
av_free(buf);
|
||||
}
|
||||
|
||||
mov->mdat_size = 0;
|
||||
|
||||
Reference in New Issue
Block a user