Quelle hdr_dynamic_metadata.h
Sprache: C
/*
* Copyright ( c ) 2018 Mohammad Izadi < moh . izadi 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_METADATA_H
#define AVUTIL_HDR_DYNAMIC_METADATA_H
#include "frame.h"
#include "rational.h"
/**
* Option for overlapping elliptical pixel selectors in an image .
*/
enum AVHDRPlusOverlapProcessOption {
AV_HDR_PLUS_OVERLAP_PROCESS_WEIGHTED_AVERAGING = 0 ,
AV_HDR_PLUS_OVERLAP_PROCESS_LAYERING = 1 ,
};
/**
* Represents the percentile at a specific percentage in
* a distribution .
*/
typedef struct AVHDRPlusPercentile {
/**
* The percentage value corresponding to a specific percentile linearized
* RGB value in the processing window in the scene . The value shall be in
* the range of 0 to100 , inclusive .
*/
uint8_t percentage;
/**
* The linearized maxRGB value at a specific percentile in the processing
* window in the scene . The value shall be in the range of 0 to 1 , inclusive
* and in multiples of 0 . 00001 .
*/
AVRational percentile;
} AVHDRPlusPercentile;
/**
* Color transform parameters at a processing window in a dynamic metadata for
* SMPTE 2094 - 40 .
*/
typedef struct AVHDRPlusColorTransformParams {
/**
* The relative x coordinate of the top left pixel of the processing
* window . The value shall be in the range of 0 and 1 , inclusive and
* in multiples of 1 / ( width of Picture - 1 ) . The value 1 corresponds
* to the absolute coordinate of width of Picture - 1 . The value for
* first processing window shall be 0 .
*/
AVRational window_upper_left_corner_x;
/**
* The relative y coordinate of the top left pixel of the processing
* window . The value shall be in the range of 0 and 1 , inclusive and
* in multiples of 1 / ( height of Picture - 1 ) . The value 1 corresponds
* to the absolute coordinate of height of Picture - 1 . The value for
* first processing window shall be 0 .
*/
AVRational window_upper_left_corner_y;
/**
* The relative x coordinate of the bottom right pixel of the processing
* window . The value shall be in the range of 0 and 1 , inclusive and
* in multiples of 1 / ( width of Picture - 1 ) . The value 1 corresponds
* to the absolute coordinate of width of Picture - 1 . The value for
* first processing window shall be 1 .
*/
AVRational window_lower_right_corner_x;
/**
* The relative y coordinate of the bottom right pixel of the processing
* window . The value shall be in the range of 0 and 1 , inclusive and
* in multiples of 1 / ( height of Picture - 1 ) . The value 1 corresponds
* to the absolute coordinate of height of Picture - 1 . The value for
* first processing window shall be 1 .
*/
AVRational window_lower_right_corner_y;
/**
* The x coordinate of the center position of the concentric internal and
* external ellipses of the elliptical pixel selector in the processing
* window . The value shall be in the range of 0 to ( width of Picture - 1 ) ,
* inclusive and in multiples of 1 pixel .
*/
uint16_t center_of_ellipse_x;
/**
* The y coordinate of the center position of the concentric internal and
* external ellipses of the elliptical pixel selector in the processing
* window . The value shall be in the range of 0 to ( height of Picture - 1 ) ,
* inclusive and in multiples of 1 pixel .
*/
uint16_t center_of_ellipse_y;
/**
* The clockwise rotation angle in degree of arc with respect to the
* positive direction of the x - axis of the concentric internal and external
* ellipses of the elliptical pixel selector in the processing window . The
* value shall be in the range of 0 to 180 , inclusive and in multiples of 1 .
*/
uint8_t rotation_angle;
/**
* The semi - major axis value of the internal ellipse of the elliptical pixel
* selector in amount of pixels in the processing window . The value shall be
* in the range of 1 to 65535 , inclusive and in multiples of 1 pixel .
*/
uint16_t semimajor_axis_internal_ellipse;
/**
* The semi - major axis value of the external ellipse of the elliptical pixel
* selector in amount of pixels in the processing window . The value
* shall not be less than semimajor_axis_internal_ellipse of the current
* processing window . The value shall be in the range of 1 to 65535 ,
* inclusive and in multiples of 1 pixel .
*/
uint16_t semimajor_axis_external_ellipse;
/**
* The semi - minor axis value of the external ellipse of the elliptical pixel
* selector in amount of pixels in the processing window . The value shall be
* in the range of 1 to 65535 , inclusive and in multiples of 1 pixel .
*/
uint16_t semiminor_axis_external_ellipse;
/**
* Overlap process option indicates one of the two methods of combining
* rendered pixels in the processing window in an image with at least one
* elliptical pixel selector . For overlapping elliptical pixel selectors
* in an image , overlap_process_option shall have the same value .
*/
enum AVHDRPlusOverlapProcessOption overlap_process_option;
/**
* The maximum of the color components of linearized RGB values in the
* processing window in the scene . The values should be in the range of 0 to
* 1 , inclusive and in multiples of 0 . 00001 . maxscl [ 0 ] , maxscl [ 1 ] , and
* maxscl [ 2 ] are corresponding to R , G , B color components respectively .
*/
AVRational maxscl[3 ];
/**
* The average of linearized maxRGB values in the processing window in the
* scene . The value should be in the range of 0 to 1 , inclusive and in
* multiples of 0 . 00001 .
*/
AVRational average_maxrgb;
/**
* The number of linearized maxRGB values at given percentiles in the
* processing window in the scene . The maximum value shall be 15 .
*/
uint8_t num_distribution_maxrgb_percentiles;
/**
* The linearized maxRGB values at given percentiles in the
* processing window in the scene .
*/
AVHDRPlusPercentile distribution_maxrgb[15 ];
/**
* The fraction of selected pixels in the image that contains the brightest
* pixel in the scene . The value shall be in the range of 0 to 1 , inclusive
* and in multiples of 0 . 001 .
*/
AVRational fraction_bright_pixels;
/**
* This flag indicates that the metadata for the tone mapping function in
* the processing window is present ( for value of 1 ) .
*/
uint8_t tone_mapping_flag;
/**
* The x coordinate of the separation point between the linear part and the
* curved part of the tone mapping function . The value shall be in the range
* of 0 to 1 , excluding 0 and in multiples of 1 / 4095 .
*/
AVRational knee_point_x;
/**
* The y coordinate of the separation point between the linear part and the
* curved part of the tone mapping function . The value shall be in the range
* of 0 to 1 , excluding 0 and in multiples of 1 / 4095 .
*/
AVRational knee_point_y;
/**
* The number of the intermediate anchor parameters of the tone mapping
* function in the processing window . The maximum value shall be 15 .
*/
uint8_t num_bezier_curve_anchors;
/**
* The intermediate anchor parameters of the tone mapping function in the
* processing window in the scene . The values should be in the range of 0
* to 1 , inclusive and in multiples of 1 / 1023 .
*/
AVRational bezier_curve_anchors[15 ];
/**
* This flag shall be equal to 0 in bitstreams conforming to this version of
* this Specification . Other values are reserved for future use .
*/
uint8_t color_saturation_mapping_flag;
/**
* The color saturation gain in the processing window in the scene . The
* value shall be in the range of 0 to 63 / 8 , inclusive and in multiples of
* 1 / 8 . The default value shall be 1 .
*/
AVRational color_saturation_weight;
} AVHDRPlusColorTransformParams;
/**
* This struct represents dynamic metadata for color volume transform -
* application 4 of SMPTE 2094 - 40 : 2016 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_plus_alloc ( ) and its size is not a part of
* the public ABI .
*/
typedef struct AVDynamicHDRPlus {
/**
* Country code by Rec . ITU - T T . 35 Annex A . The value shall be 0 xB5 .
*/
uint8_t itu_t_t35_country_code;
/**
* Application version in the application defining document in ST - 2094
* suite . The value shall be set to 0 .
*/
uint8_t application_version;
/**
* The number of processing windows . The value shall be in the range
* of 1 to 3 , inclusive .
*/
uint8_t num_windows;
/**
* The color transform parameters for every processing window .
*/
AVHDRPlusColorTransformParams params[3 ];
/**
* The nominal maximum display luminance of the targeted system display ,
* in units of 0 . 0001 candelas per square metre . The value shall be in
* the range of 0 to 10000 , inclusive .
*/
AVRational targeted_system_display_maximum_luminance;
/**
* This flag shall be equal to 0 in bit streams conforming to this version
* of this Specification . The value 1 is reserved for future use .
*/
uint8_t targeted_system_display_actual_peak_luminance_flag;
/**
* The number of rows in the targeted system_display_actual_peak_luminance
* array . The value shall be in the range of 2 to 25 , inclusive .
*/
uint8_t num_rows_targeted_system_display_actual_peak_luminance;
/**
* The number of columns in the
* targeted_system_display_actual_peak_luminance array . The value shall be
* in the range of 2 to 25 , inclusive .
*/
uint8_t num_cols_targeted_system_display_actual_peak_luminance;
/**
* The normalized actual peak luminance of the targeted system display . The
* values should be in the range of 0 to 1 , inclusive and in multiples of
* 1 / 15 .
*/
AVRational targeted_system_display_actual_peak_luminance[25 ][25 ];
/**
* This flag shall be equal to 0 in bitstreams conforming to this version of
* this Specification . The value 1 is reserved for future use .
*/
uint8_t mastering_display_actual_peak_luminance_flag;
/**
* The number of rows in the mastering_display_actual_peak_luminance array .
* The value shall be in the range of 2 to 25 , inclusive .
*/
uint8_t num_rows_mastering_display_actual_peak_luminance;
/**
* The number of columns in the mastering_display_actual_peak_luminance
* array . The value shall be in the range of 2 to 25 , inclusive .
*/
uint8_t num_cols_mastering_display_actual_peak_luminance;
/**
* The normalized actual peak luminance of the mastering display used for
* mastering the image essence . The values should be in the range of 0 to 1 ,
* inclusive and in multiples of 1 / 15 .
*/
AVRational mastering_display_actual_peak_luminance[25 ][25 ];
} AVDynamicHDRPlus;
/**
* Allocate an AVDynamicHDRPlus structure and set its fields to
* default values . The resulting struct can be freed using av_freep ( ) .
*
* @ return An AVDynamicHDRPlus filled with default values or NULL
* on failure .
*/
AVDynamicHDRPlus *av_dynamic_hdr_plus_alloc(size_t *size);
/**
* Allocate a complete AVDynamicHDRPlus and add it to the frame .
* @ param frame The frame which side data is added to .
*
* @ return The AVDynamicHDRPlus structure to be filled by caller or NULL
* on failure .
*/
AVDynamicHDRPlus *av_dynamic_hdr_plus_create_side_data(AVFrame *frame);
/**
* Parse the user data registered ITU - T T . 35 to AVbuffer ( AVDynamicHDRPlus ) .
* The T . 35 buffer must begin with the application mode , skipping the
* country code , terminal provider codes , and application identifier .
* @ param s A pointer containing the decoded AVDynamicHDRPlus structure .
* @ param data The byte array containing the raw ITU - T T . 35 data .
* @ param size Size of the data array in bytes .
*
* @ return > = 0 on success . Otherwise , returns the appropriate AVERROR .
*/
int av_dynamic_hdr_plus_from_t35(AVDynamicHDRPlus *s, const uint8_t *data,
size_t size);
#define AV_HDR_PLUS_MAX_PAYLOAD_SIZE 907
/**
* Serialize dynamic HDR10 + metadata to a user data registered ITU - T T . 35 buffer ,
* excluding the first 48 bytes of the header , and beginning with the application mode .
* @ param s A pointer containing the decoded AVDynamicHDRPlus structure .
* @ param [ in , out ] data A pointer to pointer to a byte buffer to be filled with the
* serialized metadata .
* If * data is NULL , a buffer be will be allocated and a pointer to
* it stored in its place . The caller assumes ownership of the buffer .
* May be NULL , in which case the function will only store the
* required buffer size in * size .
* @ param [ in , out ] size A pointer to a size to be set to the returned buffer ' s size .
* If * data is not NULL , * size must contain the size of the input
* buffer . May be NULL only if * data is NULL .
*
* @ return > = 0 on success . Otherwise , returns the appropriate AVERROR .
*/
int av_dynamic_hdr_plus_to_t35(const AVDynamicHDRPlus *s, uint8_t **data, size_t *size);
#endif /* AVUTIL_HDR_DYNAMIC_METADATA_H */
Messung V0.5 in Prozent C=94 H=96 G=94
¤ Dauer der Verarbeitung: 0.14 Sekunden
¤
*© Formatika GbR, Deutschland
2026-08-25
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=141584
#Domains=752002