[FFmpeg-devel] [PATCH 4/4] avcodec/libx265: encode dovi RPUs
Niklas Haas
ffmpeg at haasn.xyz
Tue Mar 19 21:16:42 EET 2024
From: Niklas Haas <git at haasn.dev>
libx265 supports these natively, we just need to forward them to the
x265picture.
---
libavcodec/libx265.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libavcodec/libx265.c b/libavcodec/libx265.c
index 92183b9ca26..92b25844ef6 100644
--- a/libavcodec/libx265.c
+++ b/libavcodec/libx265.c
@@ -560,6 +560,7 @@ static av_cold int libx265_encode_set_roi(libx265Context *ctx, const AVFrame *fr
static void free_picture(libx265Context *ctx, x265_picture *pic)
{
x265_sei *sei = &pic->userSEI;
+ av_free(pic->rpu.payload);
for (int i = 0; i < sei->numPayloads; i++)
av_free(sei->payloads[i].payload);
@@ -594,6 +595,7 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
sei->numPayloads = 0;
if (pic) {
+ AVFrameSideData *sd;
ReorderedData *rd;
int rd_idx;
@@ -694,6 +696,15 @@ static int libx265_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
sei->numPayloads++;
}
}
+
+ if ((sd = av_frame_get_side_data(pic, AV_FRAME_DATA_DOVI_RPU_BUFFER))) {
+ x265pic.rpu.payload = av_memdup(sd->data, sd->size);
+ if (!x265pic.rpu.payload) {
+ free_picture(ctx, &x265pic);
+ return AVERROR(ENOMEM);
+ }
+ x265pic.rpu.payloadSize = sd->size;
+ }
}
ret = ctx->api->encoder_encode(ctx->encoder, &nal, &nnal,
--
2.44.0
More information about the ffmpeg-devel
mailing list