aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/movenc.c
diff options
context:
space:
mode:
authorJames Almer <jamrial@gmail.com>2025-03-19 20:59:49 -0300
committerJames Almer <jamrial@gmail.com>2025-03-25 20:59:18 -0300
commit08e334e462c6337478c164da84cd7be718d285b9 (patch)
tree3b9e54c12d860a070b4de59c7458b52374fe379e /libavformat/movenc.c
parent5631704d83aba75c2c8b836515dd608115aa194a (diff)
downloadffmpeg-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.c13
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;
}