xref: /rockchip-linux_mpp/inc/rk_hdr_meta_com.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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