1/*
2 * Copyright (c) 2023 Huawei Device Co., Ltd.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at
6 *
7 *     http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16package ohos.hdi.codec.v2_0;
17
18import ohos.hdi.codec.v2_0.CodecTypes;
19
20/**
21 * @brief Enumerates the extended codec codingtyps.
22 */
23enum CodecVideoExType {
24    CODEC_VIDEO_CodingVP9  = 10, /** VP9 Index in Codec HDI */
25    CODEC_VIDEO_CodingHEVC = 11, /** HEVC Index in Codec HDI */
26};
27
28/**
29 * @brief Enumerates the extended HEVC profile.
30 */
31enum CodecHevcProfile {
32    CODEC_HEVC_PROFILE_INVALID = 0x0,
33    CODEC_HEVC_PROFILE_MAIN = 0x1,
34    CODEC_HEVC_PROFILE_MAIN10 = 0x2,
35    CODEC_HEVC_PROFILE_MAIN_STILL = 0x3,
36    // main_10 profile with HDR SEI support.
37    CODEC_HEVC_PROFILE_MAIN10_HDR10 = 0x1000,
38    CODEC_HEVC_PROFILE_MAIN10_HDR10_PLUS = 0x2000,
39    CODEC_HEVC_PROFILE_MAX = 0x7FFFFFFF
40};
41
42/**
43 * @brief Enumerates the extended HEVC level.
44 */
45enum CodecHevcLevel {
46    CODEC_HEVC_LEVEL_INVALID = 0x0,
47    CODEC_HEVC_MAIN_TIER_LEVEL1 = 0x1,
48    CODEC_HEVC_HIGH_TIER_LEVEL1 = 0x2,
49    CODEC_HEVC_MAIN_TIER_LEVEL2 = 0x4,
50    CODEC_HEVC_HIGH_TIER_LEVEL2 = 0x8,
51    CODEC_HEVC_MAIN_TIER_LEVEL21 = 0x10,
52    CODEC_HEVC_HIGH_TIER_LEVEL21 = 0x20,
53    CODEC_HEVC_MAIN_TIER_LEVEL3 = 0x40,
54    CODEC_HEVC_HIGH_TIER_LEVEL3 = 0x80,
55    CODEC_HEVC_MAIN_TIER_LEVEL31 = 0x100,
56    CODEC_HEVC_HIGH_TIER_LEVEL31 = 0x200,
57    CODEC_HEVC_MAIN_TIER_LEVEL4 = 0x400,
58    CODEC_HEVC_HIGH_TIER_LEVEL4 = 0x800,
59    CODEC_HEVC_MAIN_TIER_LEVEL41 = 0x1000,
60    CODEC_HEVC_HIGH_TIER_LEVEL41 = 0x2000,
61    CODEC_HEVC_MAIN_TIER_LEVEL5 = 0x4000,
62    CODEC_HEVC_HIGH_TIER_LEVEL5 = 0x8000,
63    CODEC_HEVC_MAIN_TIER_LEVEL51 = 0x10000,
64    CODEC_HEVC_HIGH_TIER_LEVEL51 = 0x20000,
65    CODEC_HEVC_MAIN_TIER_LEVEL52 = 0x40000,
66    CODEC_HEVC_HIGH_TIER_LEVEL52 = 0x80000,
67    CODEC_HEVC_MAIN_TIER_LEVEL6 = 0x100000,
68    CODEC_HEVC_HIGH_TIER_LEVEL6 = 0x200000,
69    CODEC_HEVC_MAIN_TIER_LEVEL61 = 0x400000,
70    CODEC_HEVC_HIGH_TIER_LEVEL61 = 0x800000,
71    CODEC_HEVC_MAIN_TIER_LEVEL62 = 0x1000000,
72    CODEC_HEVC_HIGH_TIER_LEVEL62 = 0x2000000,
73    CODEC_HEVC_HIGH_TIER_MAX = 0x7FFFFFFF
74};
75
76/**
77 * @brief Enumerates the buffer types.
78 */
79enum CodecBufferType {
80    /** Invalid buffer type. */
81    CODEC_BUFFER_TYPE_INVALID = 0,
82    /** Virtual address type. */
83    CODEC_BUFFER_TYPE_VIRTUAL_ADDR = 0x1,
84    /** Shared memory. */
85    CODEC_BUFFER_TYPE_AVSHARE_MEM_FD = 0x2,
86    /** Handle. */
87    CODEC_BUFFER_TYPE_HANDLE = 0x4,
88    /** Dynamic handle. */
89    CODEC_BUFFER_TYPE_DYNAMIC_HANDLE = 0x8,
90    /** DMA memory. */
91    CODEC_BUFFER_TYPE_DMA_MEM_FD = 0x10,
92};
93
94/**
95 * @brief Defines the <b>SupportBuffer</b>.
96 */
97struct SupportBufferType {
98    unsigned int  size;              /** Size of the structure */
99    union CodecVersionType  version; /** Component version */
100    unsigned int portIndex;          /** Port index */
101    unsigned int bufferTypes;        /** Supported buffer types */
102};
103
104/**
105 * @brief Define the <b>UseBuffer</b>.
106 */
107struct UseBufferType {
108    unsigned int size;              /** Size of the structure */
109    union CodecVersionType version; /** Component version */
110    unsigned int portIndex;         /** Port index */
111    unsigned int bufferType;        /** Buffer type */
112};
113
114/**
115 * @brief Defines the <b>BufferHandleUsage</b>.
116 */
117struct GetBufferHandleUsageParams {
118    unsigned int size;              /** Size of the structure */
119    union CodecVersionType version; /** Component version */
120    unsigned int portIndex;         /** Port index */
121    unsigned long usage;            /** Usage */
122};
123
124/**
125 * @brief Defines the <b>CodecVideoPortFormatParam</b>.
126 */
127struct CodecVideoPortFormatParam {
128    unsigned int size;                /** Size of the structure */
129    union CodecVersionType version;   /** Component version */
130    unsigned int portIndex;           /** Port index */
131    unsigned int codecColorIndex;     /** Color format index */
132    unsigned int codecColorFormat;    /** Color format defined in Display */
133    unsigned int codecCompressFormat; /** See  */
134    unsigned int framerate;           /** Q16 format */
135};
136
137/**
138 * @brief Defines the <b>ControlRateConstantQuality</b>.
139 */
140struct ControlRateConstantQuality {
141    unsigned int size;              /** Size of the structure */
142    union CodecVersionType version; /** Component version */
143    unsigned int portIndex;         /** Port index */
144    unsigned int qualityValue;      /** Control rate constant quality */
145};
146
147/**
148 * @brief Defines the <b>WorkingFrequencyParam</b>.
149 */
150struct WorkingFrequencyParam {
151    unsigned int size;              /** Size of the structure */
152    union CodecVersionType version; /** Component version */
153    unsigned int level;             /** Working frequency level */
154};
155
156/**
157 * @brief Defines the <b>WorkingFrequencyParam</b>.
158 */
159struct ProcessNameParam {
160    unsigned int size;              /** Size of the structure */
161    union CodecVersionType version; /** Component version */
162    String processName;             /** Process Name */
163};
164
165/**
166 * @brief Enumerates the extended codec indexes.
167 */
168enum CodecIndexExType {
169    /** Extended BufferType index, value = Codec_IndexExtBufferTypeStartUnused + 0x00a00000 */
170    Codec_IndexExtBufferTypeStartUnused = 0x6F000000 + 0x00a00000,
171    /** SupportBuffer */
172    Codec_IndexParamSupportBufferType,
173    /** UseBuffer */
174    Codec_IndexParamUseBufferType,
175    /** GetBufferHandleUsage */
176    Codec_IndexParamGetBufferHandleUsage,
177    /** CodecVideoPortFormatParam */
178    Codec_IndexCodecVideoPortFormat,
179    /** ControlRateConstantQuality */
180    Codec_IndexParamControlRateConstantQuality,
181    /** Codec_IndexParamVideoHevc */
182    Codec_IndexParamVideoHevc = 0x6F000000 + 0x00a00007,
183    /** range/primary/transfer/matrix */
184    Codec_IndexColorAspects,
185    /** WorkingFrequencyParam */
186    Codec_IndexParamWorkingFrequency,
187    /** ProcessNameParam */
188    Codec_IndexParamProcessName,
189};
190
191/**
192 * @brief Structure for controlling HEVC video encoding
193 */
194struct CodecVideoParamHevc {
195    unsigned int size;              /** Size of the structure */
196    union CodecVersionType version; /** Component version */
197    unsigned int portIndex;         /** Port index */
198    enum CodecHevcProfile profile;  /** Hevc profile. For details,  see {@link CodecHevcProfile}. */
199    enum CodecHevcLevel level;      /** Hevc level. For details,  see {@link CodecHevcLevel}. */
200    unsigned int keyFrameInterval;  /** Distance between consecutive I-frames (including one of the I frams).
201                                        0 means interval is unspecified and can be freely chosen by the codec.
202                                        1 means a stream of only I frams. other  means the real value. */
203};
204
205enum RangeType {
206    RANGE_UNSPECIFIED,
207    RANGE_FULL,
208    RANGE_LIMITED,
209    RANGE_MAX = 0xff,
210};
211
212enum Primaries {
213    PRIMARIES_UNSPECIFIED,
214    PRIMARIES_BT709,       //Rec. ITU-R BT.709-6
215    PRIMARIES_BT470_6M,    //Rec. ITU-R BT.470-6 System M
216    PRIMARIES_BT601_625,   //Rec. ITU-R BT.601-7 625 or Rec. ITU-R BT.470-6 System B,G
217    PRIMARIES_BT601_525,   //Rec. ITU-R BT.601-7 525 or SMPTE ST 170 or SMPTE ST 240
218    PRIMARIES_GENERICFILM, //Generic Film
219    PRIMARIES_BT2020,      //Rec. ITU-R BT.2020-2 or Rec. ITU-R BT.2100-2
220    PRIMARIES_MAX = 0xff,
221};
222
223enum Transfer {
224    TRANSFER_UNSPECIFIED,
225    TRANSFER_LINEAR,          //Linear transfer characteristics
226    TRANSFER_SRGB,            //IEC 61966-2-1 sRGB
227    TRANSFER_SMPTE170,        //SMPTE ST 170 or Rec. ITU-R BT.709-6 or BT.601-7 or BT.2020-2
228    TRANSFER_GAMMA22,         //Rec. ITU-R BT.470-6 System M
229    TRANSFER_GAMMA28,         //Rec. ITU-R BT.470-6 System B,G
230    TRANSFER_PQ,              //Rec. ITU-R BT.2100-2 perceptual quantization (PQ) system
231    TRANSFER_HLG,             //Rec. ITU-R BT.2100-2 hybrid log gamma (HLG) system
232    TRANSFER_SMPTE240 = 0x40, //SMPTE ST 240
233    TRANSFER_XVYCC,           //IEC 61966-2-4
234    TRANSFER_BT1361,          //Rec. ITU-R BT.1361-0 extended colour gamut system
235    TRANSFER_ST428,           //SMPTE ST 428-1
236    TRANSFER_MAX = 0xff,
237};
238
239enum MatrixCoeffs {
240    MATRIX_UNSPECIFED,
241    MATRIX_BT709,          //Rec. ITU-R BT.709-6
242    MATRIX_FCC,            //United States Federal Communications Commission
243    MATRIX_BT601,          //Rec. ITU-R BT.601-7 or Rec. ITU-R BT.470-6 System B,G
244    MATRIX_SMPTE240,       //SMPTE ST 240
245    MATRIX_BT2020,         //Rec. ITU-R BT.2100-2 (non-constant luminance)
246    MATRIX_BT2020CONSTANT, //Rec. ITU-R BT.2100-2 (constant luminance)
247    MATRIX_MAX = 0xff,
248};
249
250struct ColorAspects {
251    enum RangeType range;
252    enum Primaries primaries;
253    enum Transfer transfer;
254    enum MatrixCoeffs matrixCoeffs;
255};
256
257/**
258 * @brief Structure for controlling color space
259 */
260struct CodecVideoColorspace {
261    unsigned int size;                /** Size of the structure */
262    union CodecVersionType version;   /** Component version */
263    unsigned int portIndex;           /** Port index */
264    unsigned int requestingDataSpace;
265    unsigned int dataSpaceChanged;
266    unsigned int pixeFormat;
267    unsigned int dataSpace;
268    struct ColorAspects aspects;
269};