/* * Copyright (c) 2020 Vacing Fang <[email protected]> * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * FFmpeg is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with FFmpeg; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /** * @file * DOVI configuration */ #ifndef AVUTIL_DOVI_META_H #define AVUTIL_DOVI_META_H #include <stdint.h> #include <stddef.h> #include "rational.h" #include "csp.h" /* * DOVI configuration * ref: dolby-vision-bitstreams-within-the-iso-base-media-file-format-v2.1.2 dolby-vision-bitstreams-in-mpeg-2-transport-stream-multiplex-v1.2 * @code * uint8_t dv_version_major, the major version number that the stream complies with * uint8_t dv_version_minor, the minor version number that the stream complies with * uint8_t dv_profile, the Dolby Vision profile * uint8_t dv_level, the Dolby Vision level * uint8_t rpu_present_flag * uint8_t el_present_flag * uint8_t bl_present_flag * uint8_t dv_bl_signal_compatibility_id * @endcode * * @note The struct must be allocated with av_dovi_alloc() and * its size is not a part of the public ABI. */ AVDOVIDecoderConfigurationRecord; /** * Allocate a AVDOVIDecoderConfigurationRecord structure and initialize its * fields to default values. * * @return the newly allocated struct or NULL on failure */ AVDOVIDecoderConfigurationRecord *av_dovi_alloc(size_t *size); /** * Dolby Vision RPU data header. * * @note sizeof(AVDOVIRpuDataHeader) is not part of the public ABI. */ AVDOVIRpuDataHeader; enum AVDOVIMappingMethod { … }; /** * Coefficients of a piece-wise function. The pieces of the function span the * value ranges between two adjacent pivot values. */ #define AV_DOVI_MAX_PIECES … AVDOVIReshapingCurve; enum AVDOVINLQMethod { … }; /** * Coefficients of the non-linear inverse quantization. For the interpretation * of these, see ETSI GS CCM 001. */ AVDOVINLQParams; /** * Dolby Vision RPU data mapping parameters. * * @note sizeof(AVDOVIDataMapping) is not part of the public ABI. */ AVDOVIDataMapping; /** * Dolby Vision RPU colorspace metadata parameters. * * @note sizeof(AVDOVIColorMetadata) is not part of the public ABI. */ AVDOVIColorMetadata; AVDOVIDmLevel1; AVDOVIDmLevel2; AVDOVIDmLevel3; AVDOVIDmLevel4; AVDOVIDmLevel5; AVDOVIDmLevel6; AVDOVIDmLevel8; AVDOVIDmLevel9; AVDOVIDmLevel10; AVDOVIDmLevel11; AVDOVIDmLevel254; AVDOVIDmLevel255; /** * Dolby Vision metadata extension block. * * @note sizeof(AVDOVIDmData) is not part of the public API. */ AVDOVIDmData; /** * 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. */ AVDOVIMetadata; static av_always_inline AVDOVIRpuDataHeader * av_dovi_get_header(const AVDOVIMetadata *data) { … } static av_always_inline AVDOVIDataMapping * av_dovi_get_mapping(const AVDOVIMetadata *data) { … } static av_always_inline AVDOVIColorMetadata * av_dovi_get_color(const AVDOVIMetadata *data) { … } static av_always_inline AVDOVIDmData * av_dovi_get_ext(const AVDOVIMetadata *data, int index) { … } /** * Find an extension block with a given level, or NULL. In the case of * multiple extension blocks, only the first is returned. */ AVDOVIDmData *av_dovi_find_level(const AVDOVIMetadata *data, uint8_t level); /** * 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 * * @return the newly allocated struct or NULL on failure */ AVDOVIMetadata *av_dovi_metadata_alloc(size_t *size); #endif /* AVUTIL_DOVI_META_H */