[FFmpeg-devel] [PATCH v5 00/14] encoder AVCodecContext configuration side data
Jan Ekström
jeebjp at gmail.com
Sun Nov 26 21:58:19 EET 2023
Differences to v3:
1. rebased on top of current master
2. moved the addition of multiple side data entries from a generic
av_frame_side_data_set_extend to avcodec as per request from James.
4. adopted various things noted by reviews
Comparison URL (mostly configure and wrappers, avutil/frame.c):
https://github.com/jeeb/ffmpeg/compare/avcodec_cll_mdcv_side_data_v4..avcodec_cll_mdcv_side_data_v5
This patch set I've now been working for a while since I felt like it was weird
we couldn't pass through information such as static HDR metadata to encoders
from decoded input. This initial version adds the necessary framework, as well
as adds static HDR metadata support for libsvtav1, libx264 as well as libx265
wrappers.
An alternative to this would be to make encoders only properly initialize when
they receive the first AVFrame, but that seems to be a bigger, nastier change
than introducing an AVFrameSideDataSet in avctx as everything seems to
presume that extradata etc are available after opening the encoder.
Note: Any opinions on whether FFCodec or AVCodec should have
handled_side_data list, so that if format specific generic logic is
added, it could be checked whether the codec itself handles this side
data? This could also be utilized to list handled side data from f.ex.
`ffmpeg -h encoder=libsvtav1`.
Jan
Jan Ekström (14):
avutil/frame: add AVFrameSideDataSet for passing sets of side data
avutil/frame: split side data list wiping out to non-AVFrame function
avutil/frame: add helper for uninitializing side data sets
avutil/frame: split side_data_from_buf to base and AVFrame func
avutil/frame: split side data removal out to non-AVFrame function
avutil/frame: add helper for adding side data to set
avutil/frame: add helper for adding existing side data to set
avutil/frame: add helper for getting side data from set
avcodec: add side data set to AVCodecContext
avcodec: add helper for configuring AVCodecContext's side data set
ffmpeg: pass first video AVFrame's side data to encoder
avcodec/libsvtav1: add support for writing out CLL and MDCV
avcodec/libx264: add support for writing out CLL and MDCV
avcodec/libx265: add support for writing out CLL and MDCV
configure | 2 +
fftools/ffmpeg_enc.c | 13 +++
libavcodec/avcodec.c | 28 ++++++
libavcodec/avcodec.h | 27 +++++
libavcodec/libsvtav1.c | 67 +++++++++++++
libavcodec/libx264.c | 78 ++++++++++++++
libavcodec/libx265.c | 87 ++++++++++++++++
libavcodec/options.c | 1 +
libavutil/Makefile | 1 +
libavutil/frame.c | 173 ++++++++++++++++++++++++++------
libavutil/frame.h | 64 ++++++++++++
libavutil/tests/side_data_set.c | 97 ++++++++++++++++++
tests/fate/enc_external.mak | 15 +++
tests/fate/libavutil.mak | 4 +
tests/ref/fate/libsvtav1-hdr10 | 14 +++
tests/ref/fate/libx264-hdr10 | 15 +++
tests/ref/fate/libx265-hdr10 | 16 +++
tests/ref/fate/side_data_set | 14 +++
18 files changed, 686 insertions(+), 30 deletions(-)
create mode 100644 libavutil/tests/side_data_set.c
create mode 100644 tests/ref/fate/libsvtav1-hdr10
create mode 100644 tests/ref/fate/libx264-hdr10
create mode 100644 tests/ref/fate/libx265-hdr10
create mode 100644 tests/ref/fate/side_data_set
--
2.43.0
More information about the ffmpeg-devel
mailing list