diff options
author | James Almer <jamrial@gmail.com> | 2025-03-19 20:59:49 -0300 |
---|---|---|
committer | James Almer <jamrial@gmail.com> | 2025-03-25 20:59:18 -0300 |
commit | 08e334e462c6337478c164da84cd7be718d285b9 (patch) | |
tree | 3b9e54c12d860a070b4de59c7458b52374fe379e /libavformat/movenc.c | |
parent | 5631704d83aba75c2c8b836515dd608115aa194a (diff) | |
download | ffmpeg-08e334e462c6337478c164da84cd7be718d285b9.tar.gz |
avformat/movenccenc: add support for CENC AV1 encryption
Signed-off-by: James Almer <jamrial@gmail.com>
Diffstat (limited to 'libavformat/movenc.c')
-rw-r--r-- | libavformat/movenc.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/libavformat/movenc.c b/libavformat/movenc.c index af013e1fc6..2cbc8bdc22 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -6767,7 +6767,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) } else { size = ff_vvc_annexb2mp4(pb, pkt->data, pkt->size, 0, NULL); } - } else if (par->codec_id == AV_CODEC_ID_AV1) { + } else if (par->codec_id == AV_CODEC_ID_AV1 && !trk->cenc.aes_ctr) { if (trk->hint_track >= 0 && trk->hint_track < mov->nb_tracks) { ret = ff_av1_filter_obus_buf(pkt->data, &reformatted_data, &size, &offset); @@ -6815,6 +6815,13 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) ret = ff_mov_cenc_avc_write_nal_units(s, &trk->cenc, nal_size_length, pb, pkt->data, size); } else if(par->codec_id == AV_CODEC_ID_VVC) { ret = AVERROR_PATCHWELCOME; + } else if(par->codec_id == AV_CODEC_ID_AV1) { + av_assert0(size == pkt->size); + ret = ff_mov_cenc_av1_write_obus(s, &trk->cenc, pb, pkt); + if (ret > 0) { + size = ret; + ret = 0; + } } else { ret = ff_mov_cenc_write_packet(&trk->cenc, pb, pkt->data, size); } @@ -8135,8 +8142,8 @@ static int mov_init(AVFormatContext *s) if (mov->encryption_scheme == MOV_ENC_CENC_AES_CTR) { ret = ff_mov_cenc_init(&track->cenc, mov->encryption_key, (track->par->codec_id == AV_CODEC_ID_H264 || track->par->codec_id == AV_CODEC_ID_HEVC || - track->par->codec_id == AV_CODEC_ID_VVC), - s->flags & AVFMT_FLAG_BITEXACT); + track->par->codec_id == AV_CODEC_ID_VVC || track->par->codec_id == AV_CODEC_ID_AV1), + track->par->codec_id, s->flags & AVFMT_FLAG_BITEXACT); if (ret) return ret; } |