286 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			8.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * 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"
 | |
| 
 | |
| /**
 | |
|  * 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;
 | |
| 
 | |
|     /**
 | |
|      * The mode of three Spline. the value shall be in the range
 | |
|      * of 0 to 3, inclusive.
 | |
|      */
 | |
|     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.
 | |
|      *
 | |
|      */
 | |
|     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.
 | |
|      */
 | |
|     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.
 | |
|      */
 | |
|     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.
 | |
|      */
 | |
|     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.
 | |
|      */
 | |
|     AVRational three_Spline_enable_Strength;
 | |
| } 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 */
 |