avformat/movenc: clear subsample information on fragment flush

Don't keep around information from a previous traf atom.

Fixes issue #20492.

Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
James Almer
2025-09-16 21:45:00 -03:00
parent fa72f9a292
commit 6d8732f397
3 changed files with 15 additions and 0 deletions

View File

@@ -6592,6 +6592,9 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
mov_write_moof_tag(s->pb, mov, moof_tracks, mdat_size);
mov->fragments++;
if (track->cenc.aes_ctr)
ff_mov_cenc_flush(&track->cenc);
avio_wb32(s->pb, mdat_size + 8);
ffio_wfourcc(s->pb, "mdat");
mdat_start = avio_tell(s->pb);

View File

@@ -629,6 +629,12 @@ int ff_mov_cenc_init(MOVMuxCencContext* ctx, uint8_t* encryption_key,
return 0;
}
void ff_mov_cenc_flush(MOVMuxCencContext* ctx)
{
ctx->auxiliary_info_entries = 0;
ctx->auxiliary_info_size = 0;
}
void ff_mov_cenc_free(MOVMuxCencContext* ctx)
{
av_aes_ctr_free(ctx->aes_ctr);

View File

@@ -91,6 +91,12 @@ int ff_mov_cenc_avc_write_nal_units(AVFormatContext *s, MOVMuxCencContext* ctx,
int ff_mov_cenc_av1_write_obus(AVFormatContext *s, MOVMuxCencContext* ctx,
AVIOContext *pb, const AVPacket *pkt);
/**
* Clear subsample data. To be called for fragmented output.
*/
void ff_mov_cenc_flush(MOVMuxCencContext* ctx);
/**
* Write the cenc atoms that should reside inside stbl
*/