|
|
|
/*
|
|
|
|
* Copyright (c) 2021 Limin Wang <lance.lmwang at gmail.com>
|
|
|
|
*
|
|
|
|
* 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
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H
|
|
|
|
#define AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H
|
|
|
|
|
|
|
|
#include "frame.h"
|
|
|
|
#include "rational.h"
|
|
|
|
|
|
|
|
/**
|
|
|
|
* HDR Vivid three spline params.
|
|
|
|
*/
|
|
|
|
typedef struct AVHDRVivid3SplineParams {
|
|
|
|
/**
|
|
|
|
* The mode of three Spline. the value shall be in the range
|
|
|
|
* of 0 to 3, inclusive.
|
|
|
|
*/
|
|
|
|
int th_mode;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive
|
|
|
|
* and in multiples of 1.0/255.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
AVRational th_enable_mb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_enable of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 1.0, inclusive.
|
|
|
|
* and in multiples of 1.0/4095.
|
|
|
|
*/
|
|
|
|
AVRational th_enable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_Delta1 of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
|
|
|
* and in multiples of 0.25/1023.
|
|
|
|
*/
|
|
|
|
AVRational th_delta1;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_Delta2 of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
|
|
|
* and in multiples of 0.25/1023.
|
|
|
|
*/
|
|
|
|
AVRational th_delta2;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_enable_Strength of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 1.0, inclusive,
|
|
|
|
* and in multiples of 1.0/255.
|
|
|
|
*/
|
|
|
|
AVRational enable_strength;
|
|
|
|
} AVHDRVivid3SplineParams;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Color tone mapping parameters at a processing window in a dynamic metadata for
|
|
|
|
* CUVA 005.1:2021.
|
|
|
|
*/
|
|
|
|
typedef struct AVHDRVividColorToneMappingParams {
|
|
|
|
/**
|
|
|
|
* The nominal maximum display luminance of the targeted system display,
|
|
|
|
* in multiples of 1.0/4095 candelas per square metre. The value shall be in
|
|
|
|
* the range of 0.0 to 1.0, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational targeted_system_display_maximum_luminance;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag indicates that transfer the base paramter(for value of 1)
|
|
|
|
*/
|
|
|
|
int base_enable_flag;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_m_p in the base parameter,
|
|
|
|
* in multiples of 1.0/16383. The value shall be in
|
|
|
|
* the range of 0.0 to 1.0, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_m_p;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_m_m in the base parameter,
|
|
|
|
* in multiples of 1.0/10. The value shall be in
|
|
|
|
* the range of 0.0 to 6.3, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_m_m;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_m_a in the base parameter,
|
|
|
|
* in multiples of 1.0/1023. The value shall be in
|
|
|
|
* the range of 0.0 to 1.0 inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_m_a;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_m_b in the base parameter,
|
|
|
|
* in multiples of 1/1023. The value shall be in
|
|
|
|
* the range of 0.0 to 1.0, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_m_b;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_m_n in the base parameter,
|
|
|
|
* in multiples of 1.0/10. The value shall be in
|
|
|
|
* the range of 0.0 to 6.3, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_m_n;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* indicates k1_0 in the base parameter,
|
|
|
|
* base_param_k1 <= 1: k1_0 = base_param_k1
|
|
|
|
* base_param_k1 > 1: reserved
|
|
|
|
*/
|
|
|
|
int base_param_k1;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* indicates k2_0 in the base parameter,
|
|
|
|
* base_param_k2 <= 1: k2_0 = base_param_k2
|
|
|
|
* base_param_k2 > 1: reserved
|
|
|
|
*/
|
|
|
|
int base_param_k2;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* indicates k3_0 in the base parameter,
|
|
|
|
* base_param_k3 == 1: k3_0 = base_param_k3
|
|
|
|
* base_param_k3 == 2: k3_0 = maximum_maxrgb
|
|
|
|
* base_param_k3 > 2: reserved
|
|
|
|
*/
|
|
|
|
int base_param_k3;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag indicates that delta mode of base paramter(for value of 1)
|
|
|
|
*/
|
|
|
|
int base_param_Delta_enable_mode;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* base_param_Delta in the base parameter,
|
|
|
|
* in multiples of 1.0/127. The value shall be in
|
|
|
|
* the range of 0.0 to 1.0, inclusive.
|
|
|
|
*/
|
|
|
|
AVRational base_param_Delta;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* indicates 3Spline_enable_flag in the base parameter,
|
|
|
|
* This flag indicates that transfer three Spline of base paramter(for value of 1)
|
|
|
|
*/
|
|
|
|
int three_Spline_enable_flag;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of three Spline. The value shall be in the range
|
|
|
|
* of 1 to 2, inclusive.
|
|
|
|
*/
|
|
|
|
int three_Spline_num;
|
|
|
|
|
|
|
|
#if FF_API_HDR_VIVID_THREE_SPLINE
|
|
|
|
/**
|
|
|
|
* The mode of three Spline. the value shall be in the range
|
|
|
|
* of 0 to 3, inclusive.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
int three_Spline_TH_mode;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* three_Spline_TH_enable_MB is in the range of 0.0 to 1.0, inclusive
|
|
|
|
* and in multiples of 1.0/255.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
AVRational three_Spline_TH_enable_MB;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_enable of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 1.0, inclusive.
|
|
|
|
* and in multiples of 1.0/4095.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
AVRational three_Spline_TH_enable;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_Delta1 of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
|
|
|
* and in multiples of 0.25/1023.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
AVRational three_Spline_TH_Delta1;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_TH_Delta2 of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 0.25, inclusive,
|
|
|
|
* and in multiples of 0.25/1023.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
AVRational three_Spline_TH_Delta2;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 3Spline_enable_Strength of three Spline.
|
|
|
|
* The value shall be in the range of 0.0 to 1.0, inclusive,
|
|
|
|
* and in multiples of 1.0/255.
|
|
|
|
* @deprecated Use three_spline instead
|
|
|
|
*/
|
|
|
|
attribute_deprecated
|
|
|
|
AVRational three_Spline_enable_Strength;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
AVHDRVivid3SplineParams three_spline[2];
|
|
|
|
} AVHDRVividColorToneMappingParams;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Color transform parameters at a processing window in a dynamic metadata for
|
|
|
|
* CUVA 005.1:2021.
|
|
|
|
*/
|
|
|
|
typedef struct AVHDRVividColorTransformParams {
|
|
|
|
/**
|
|
|
|
* Indicates the minimum brightness of the displayed content.
|
|
|
|
* The values should be in the range of 0.0 to 1.0,
|
|
|
|
* inclusive and in multiples of 1/4095.
|
|
|
|
*/
|
|
|
|
AVRational minimum_maxrgb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates the average brightness of the displayed content.
|
|
|
|
* The values should be in the range of 0.0 to 1.0,
|
|
|
|
* inclusive and in multiples of 1/4095.
|
|
|
|
*/
|
|
|
|
AVRational average_maxrgb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates the variance brightness of the displayed content.
|
|
|
|
* The values should be in the range of 0.0 to 1.0,
|
|
|
|
* inclusive and in multiples of 1/4095.
|
|
|
|
*/
|
|
|
|
AVRational variance_maxrgb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates the maximum brightness of the displayed content.
|
|
|
|
* The values should be in the range of 0.0 to 1.0, inclusive
|
|
|
|
* and in multiples of 1/4095.
|
|
|
|
*/
|
|
|
|
AVRational maximum_maxrgb;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag indicates that the metadata for the tone mapping function in
|
|
|
|
* the processing window is present (for value of 1).
|
|
|
|
*/
|
|
|
|
int tone_mapping_mode_flag;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of tone mapping param. The value shall be in the range
|
|
|
|
* of 1 to 2, inclusive.
|
|
|
|
*/
|
|
|
|
int tone_mapping_param_num;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The color tone mapping parameters.
|
|
|
|
*/
|
|
|
|
AVHDRVividColorToneMappingParams tm_params[2];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This flag indicates that the metadata for the color saturation mapping in
|
|
|
|
* the processing window is present (for value of 1).
|
|
|
|
*/
|
|
|
|
int color_saturation_mapping_flag;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of color saturation param. The value shall be in the range
|
|
|
|
* of 0 to 7, inclusive.
|
|
|
|
*/
|
|
|
|
int color_saturation_num;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Indicates the color correction strength parameter.
|
|
|
|
* The values should be in the range of 0.0 to 2.0, inclusive
|
|
|
|
* and in multiples of 1/128.
|
|
|
|
*/
|
|
|
|
AVRational color_saturation_gain[8];
|
|
|
|
} AVHDRVividColorTransformParams;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This struct represents dynamic metadata for color volume transform -
|
|
|
|
* CUVA 005.1:2021 standard
|
|
|
|
*
|
|
|
|
* To be used as payload of a AVFrameSideData or AVPacketSideData with the
|
|
|
|
* appropriate type.
|
|
|
|
*
|
|
|
|
* @note The struct should be allocated with
|
|
|
|
* av_dynamic_hdr_vivid_alloc() and its size is not a part of
|
|
|
|
* the public ABI.
|
|
|
|
*/
|
|
|
|
typedef struct AVDynamicHDRVivid {
|
|
|
|
/**
|
|
|
|
* The system start code. The value shall be set to 0x01.
|
|
|
|
*/
|
|
|
|
uint8_t system_start_code;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The number of processing windows. The value shall be set to 0x01
|
|
|
|
* if the system_start_code is 0x01.
|
|
|
|
*/
|
|
|
|
uint8_t num_windows;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The color transform parameters for every processing window.
|
|
|
|
*/
|
|
|
|
AVHDRVividColorTransformParams params[3];
|
|
|
|
} AVDynamicHDRVivid;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allocate an AVDynamicHDRVivid structure and set its fields to
|
|
|
|
* default values. The resulting struct can be freed using av_freep().
|
|
|
|
*
|
|
|
|
* @return An AVDynamicHDRVivid filled with default values or NULL
|
|
|
|
* on failure.
|
|
|
|
*/
|
|
|
|
AVDynamicHDRVivid *av_dynamic_hdr_vivid_alloc(size_t *size);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Allocate a complete AVDynamicHDRVivid and add it to the frame.
|
|
|
|
* @param frame The frame which side data is added to.
|
|
|
|
*
|
|
|
|
* @return The AVDynamicHDRVivid structure to be filled by caller or NULL
|
|
|
|
* on failure.
|
|
|
|
*/
|
|
|
|
AVDynamicHDRVivid *av_dynamic_hdr_vivid_create_side_data(AVFrame *frame);
|
|
|
|
|
|
|
|
#endif /* AVUTIL_HDR_DYNAMIC_VIVID_METADATA_H */
|