[FFmpeg-devel] [PATCH v5 1/6] lavu/frame: Add Dolby Vision metadata side data type
Anton Khirnov
anton at khirnov.net
Mon Dec 20 12:02:36 EET 2021
Quoting Niklas Haas (2021-12-12 12:55:41)
> From: Niklas Haas <git at haasn.dev>
>
> Signed-off-by: Niklas Haas <git at haasn.dev>
> ---
> doc/APIchanges | 3 +
> libavutil/dovi_meta.c | 12 ++++
> libavutil/dovi_meta.h | 132 ++++++++++++++++++++++++++++++++++++++++++
> libavutil/frame.c | 1 +
> libavutil/frame.h | 9 ++-
> libavutil/version.h | 2 +-
> 6 files changed, 157 insertions(+), 2 deletions(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index 17aa664ca3..0ddde40bdf 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -14,6 +14,9 @@ libavutil: 2021-04-27
>
> API changes, most recent first:
>
> +2021-12-xx - xxxxxxxxxx - lavu 57.12.100 - frame.h
> + Add AV_FRAME_DATA_DOVI_RESHAPING.
Doesn't match the actual name.
> +
> 2021-12-xx - xxxxxxxxxx - lavf 59.10.100 - avformat.h
> Add AVFormatContext io_close2 which returns an int
>
> diff --git a/libavutil/dovi_meta.c b/libavutil/dovi_meta.c
> index 7bd08f6c54..60b4cb2376 100644
> --- a/libavutil/dovi_meta.c
> +++ b/libavutil/dovi_meta.c
> @@ -33,3 +33,15 @@ AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size)
>
> return dovi;
> }
> +
> +AVDOVIMetadata *av_dovi_metadata_alloc(size_t *size)
> +{
> + AVDOVIMetadata *dovi = av_mallocz(sizeof(AVDOVIMetadata));
> + if (!dovi)
> + return NULL;
> +
> + if (size)
> + *size = sizeof(*dovi);
> +
> + return dovi;
> +}
> diff --git a/libavutil/dovi_meta.h b/libavutil/dovi_meta.h
> index 299911d434..20efd41676 100644
> --- a/libavutil/dovi_meta.h
> +++ b/libavutil/dovi_meta.h
> @@ -29,6 +29,7 @@
>
> #include <stdint.h>
> #include <stddef.h>
> +#include "rational.h"
>
> /*
> * DOVI configuration
> @@ -67,4 +68,135 @@ typedef struct AVDOVIDecoderConfigurationRecord {
> */
> AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size);
>
> +/**
> + * Dolby Vision RPU data header.
> + */
> +typedef struct AVDOVIRpuDataHeader {
> + uint8_t rpu_type;
> + uint16_t rpu_format;
> + uint8_t vdr_rpu_profile;
> + uint8_t vdr_rpu_level;
> + int chroma_resampling_explicit_filter_flag;
Why are flags ints, while other things can be uint8_t?
> +
> +/**
> + * Combined struct representing a combination of header, mapping and color
> + * metadata, for attaching to frames as side data.
> + *
> + * @note The struct must be allocated with av_dovi_metadata_alloc() and
> + * its size is not a part of the public ABI.
Maybe mention that the individual structs (header, mapping, color)
CANNOT be extended without a major bump.
> + */
> +
> +typedef struct AVDOVIMetadata {
> + AVDOVIRpuDataHeader header;
> + AVDOVIDataMapping mapping;
> + AVDOVIColorMetadata color;
> +} AVDOVIMetadata;
> +
> +/**
> + * Allocate an AVDOVIMetadata structure and initialize its
> + * fields to default values.
+ * @param size If this parameter is non-NULL, the size in bytes of the
allocated struct will be written here on success
--
Anton Khirnov
More information about the ffmpeg-devel
mailing list