1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2022 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __RK_HDR_META_COM_H__ 18*437bfbebSnyanmisaka #define __RK_HDR_META_COM_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "rk_type.h" 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka typedef enum HdrCodecType_e { 23*437bfbebSnyanmisaka HDR_CODEC_UNSPECIFIED = -1, 24*437bfbebSnyanmisaka HDR_AVS2 = 0, 25*437bfbebSnyanmisaka HDR_HEVC = 1, 26*437bfbebSnyanmisaka HDR_H264 = 2, 27*437bfbebSnyanmisaka HDR_AV1 = 3, 28*437bfbebSnyanmisaka } HdrCodecType; 29*437bfbebSnyanmisaka 30*437bfbebSnyanmisaka typedef enum HdrFormat_e { 31*437bfbebSnyanmisaka HDR_NONE = 0, 32*437bfbebSnyanmisaka HDR10 = 1, 33*437bfbebSnyanmisaka HLG = 2, 34*437bfbebSnyanmisaka // RESERVED3 = 3, //reserved for more future static hdr format 35*437bfbebSnyanmisaka // RESERVED4 = 4, //reserved for more future static hdr format 36*437bfbebSnyanmisaka HDRVIVID = 5, 37*437bfbebSnyanmisaka // RESERVED6 = 6, //reserved for hdr vivid 38*437bfbebSnyanmisaka // RESERVED7 = 7, //reserved for hdr vivid 39*437bfbebSnyanmisaka HDR10PLUS = 8, 40*437bfbebSnyanmisaka // RESERVED9 = 9, //reserved for hdr10+ 41*437bfbebSnyanmisaka // RESERVED10 = 10,//reserved for hdr10+ 42*437bfbebSnyanmisaka DLBY = 11, 43*437bfbebSnyanmisaka // RESERVED12 = 12, //reserved for other dynamic hdr format 44*437bfbebSnyanmisaka // RESERVED13 = 13, //reserved for other dynamic hdr format 45*437bfbebSnyanmisaka HDR_FORMAT_MAX, 46*437bfbebSnyanmisaka } HdrFormat; 47*437bfbebSnyanmisaka 48*437bfbebSnyanmisaka typedef enum HdrPayloadFormat_e { 49*437bfbebSnyanmisaka STATIC = 0, 50*437bfbebSnyanmisaka DYNAMIC = 1, 51*437bfbebSnyanmisaka HDR_PAYLOAD_FORMAT_MAX, 52*437bfbebSnyanmisaka } HdrPayloadFormat; 53*437bfbebSnyanmisaka 54*437bfbebSnyanmisaka typedef struct HdrStaticMeta_t { 55*437bfbebSnyanmisaka RK_U32 color_space; 56*437bfbebSnyanmisaka RK_U32 color_primaries; 57*437bfbebSnyanmisaka RK_U32 color_trc; 58*437bfbebSnyanmisaka RK_U32 red_x; 59*437bfbebSnyanmisaka RK_U32 red_y; 60*437bfbebSnyanmisaka RK_U32 green_x; 61*437bfbebSnyanmisaka RK_U32 green_y; 62*437bfbebSnyanmisaka RK_U32 blue_x; 63*437bfbebSnyanmisaka RK_U32 blue_y; 64*437bfbebSnyanmisaka RK_U32 white_point_x; 65*437bfbebSnyanmisaka RK_U32 white_point_y; 66*437bfbebSnyanmisaka RK_U32 min_luminance; 67*437bfbebSnyanmisaka RK_U32 max_luminance; 68*437bfbebSnyanmisaka RK_U32 max_cll; 69*437bfbebSnyanmisaka RK_U32 max_fall; 70*437bfbebSnyanmisaka RK_U32 reserved[4]; 71*437bfbebSnyanmisaka } HdrStaticMeta; 72*437bfbebSnyanmisaka 73*437bfbebSnyanmisaka /* 74*437bfbebSnyanmisaka * HDR metadata format from codec 75*437bfbebSnyanmisaka * 76*437bfbebSnyanmisaka * +----------+ 77*437bfbebSnyanmisaka * | header1 | 78*437bfbebSnyanmisaka * +----------+ 79*437bfbebSnyanmisaka * | | 80*437bfbebSnyanmisaka * | payload | 81*437bfbebSnyanmisaka * | | 82*437bfbebSnyanmisaka * +----------+ 83*437bfbebSnyanmisaka * | header2 | 84*437bfbebSnyanmisaka * +----------+ 85*437bfbebSnyanmisaka * | | 86*437bfbebSnyanmisaka * | payload | 87*437bfbebSnyanmisaka * | | 88*437bfbebSnyanmisaka * +----------+ 89*437bfbebSnyanmisaka * | header3 | 90*437bfbebSnyanmisaka * +----------+ 91*437bfbebSnyanmisaka * | | 92*437bfbebSnyanmisaka * | payload | 93*437bfbebSnyanmisaka * | | 94*437bfbebSnyanmisaka * +----------+ 95*437bfbebSnyanmisaka */ 96*437bfbebSnyanmisaka typedef struct RkMetaHdrHeader_t { 97*437bfbebSnyanmisaka /* For transmission */ 98*437bfbebSnyanmisaka RK_U16 magic; /* magic word for checking overwrite error */ 99*437bfbebSnyanmisaka RK_U16 size; /* total header+payload length including header */ 100*437bfbebSnyanmisaka RK_U16 message_total; /* total message count in current transmission */ 101*437bfbebSnyanmisaka RK_U16 message_index; /* current message index in the transmission */ 102*437bfbebSnyanmisaka 103*437bfbebSnyanmisaka /* For payload identification */ 104*437bfbebSnyanmisaka RK_U16 version; /* payload structure version */ 105*437bfbebSnyanmisaka RK_U16 hdr_format; /* HDR protocol: HDR10, HLG, Dlby, HDRVivid ... */ 106*437bfbebSnyanmisaka RK_U16 hdr_payload_type; /* HDR data type: static data, dynamic data ... */ 107*437bfbebSnyanmisaka RK_U16 video_format; /* video format: H.264, H.265, AVS2 ... */ 108*437bfbebSnyanmisaka 109*437bfbebSnyanmisaka /* For extenstion usage */ 110*437bfbebSnyanmisaka RK_U32 reserve[4]; 111*437bfbebSnyanmisaka 112*437bfbebSnyanmisaka /* payload data aligned to 32bits */ 113*437bfbebSnyanmisaka RK_U32 payload[]; 114*437bfbebSnyanmisaka } RkMetaHdrHeader; 115*437bfbebSnyanmisaka 116*437bfbebSnyanmisaka #ifdef __cplusplus 117*437bfbebSnyanmisaka extern "C" { 118*437bfbebSnyanmisaka #endif /* __cplusplus */ 119*437bfbebSnyanmisaka 120*437bfbebSnyanmisaka void fill_hdr_meta_to_frame(MppFrame frame, MppCodingType in_type); 121*437bfbebSnyanmisaka 122*437bfbebSnyanmisaka #ifdef __cplusplus 123*437bfbebSnyanmisaka } 124*437bfbebSnyanmisaka #endif 125*437bfbebSnyanmisaka 126*437bfbebSnyanmisaka #endif 127