1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef CODEC_OMX_EXT_H
17094332d3Sopenharmony_ci#define CODEC_OMX_EXT_H
18094332d3Sopenharmony_ci#include <OMX_IVCommon.h>
19094332d3Sopenharmony_ci#include <OMX_Video.h>
20094332d3Sopenharmony_ci#include <stdbool.h>
21094332d3Sopenharmony_ci#ifdef __cplusplus
22094332d3Sopenharmony_ci#if __cplusplus
23094332d3Sopenharmony_ciextern "C" {
24094332d3Sopenharmony_ci#endif
25094332d3Sopenharmony_ci#endif /* __cplusplus */
26094332d3Sopenharmony_ci
27094332d3Sopenharmony_ci#define PROCESS_NAME_LEN 50
28094332d3Sopenharmony_ci
29094332d3Sopenharmony_ci/**
30094332d3Sopenharmony_ci * @brief Enumerates the extended AVC profile.
31094332d3Sopenharmony_ci */
32094332d3Sopenharmony_cienum CodecAVCProfileExt {
33094332d3Sopenharmony_ci    OMX_VIDEO_AVC_LEVEL52  = 0x10000,  /**< Level 5.2 */
34094332d3Sopenharmony_ci    OMX_VIDEO_AVC_LEVEL6   = 0x20000,  /**< Level 6 */
35094332d3Sopenharmony_ci    OMX_VIDEO_AVC_LEVEL61  = 0x40000,  /**< Level 6.1 */
36094332d3Sopenharmony_ci    OMX_VIDEO_AVC_LEVEL62  = 0x80000,  /**< Level 6.2 */
37094332d3Sopenharmony_ci};
38094332d3Sopenharmony_ci
39094332d3Sopenharmony_ci/**
40094332d3Sopenharmony_ci * @brief Enumerates the extended codec codingtyps.
41094332d3Sopenharmony_ci */
42094332d3Sopenharmony_cienum CodecVideoExType {
43094332d3Sopenharmony_ci    CODEC_OMX_VIDEO_CodingVP9  = 10, /** VP9 Index in Codec HDI */
44094332d3Sopenharmony_ci    CODEC_OMX_VIDEO_CodingHEVC = 11, /** HEVC Index in Codec HDI */
45094332d3Sopenharmony_ci    CODEC_OMX_VIDEO_CodingVVC = 12, /** VVC Index in Codec HDI */
46094332d3Sopenharmony_ci};
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_ci/**
49094332d3Sopenharmony_ci * @brief Enumerates the extended HEVC profile.
50094332d3Sopenharmony_ci */
51094332d3Sopenharmony_cienum CodecHevcProfile {
52094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_INVALID = 0x0,
53094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAIN = 0x1,
54094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAIN10 = 0x2,
55094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAIN_STILL = 0x3,
56094332d3Sopenharmony_ci    // main_10 profile with HDR SEI support.
57094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAIN10_HDR10 = 0x1000,
58094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAIN10_HDR10_PLUS = 0x2000,
59094332d3Sopenharmony_ci    CODEC_HEVC_PROFILE_MAX = 0x7FFFFFFF
60094332d3Sopenharmony_ci};
61094332d3Sopenharmony_ci
62094332d3Sopenharmony_ci/**
63094332d3Sopenharmony_ci * @brief Enumerates the extended HEVC level.
64094332d3Sopenharmony_ci */
65094332d3Sopenharmony_cienum CodecHevcLevel {
66094332d3Sopenharmony_ci    CODEC_HEVC_LEVEL_INVALID = 0x0,
67094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL1 = 0x1,
68094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL1 = 0x2,
69094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL2 = 0x4,
70094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL2 = 0x8,
71094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL21 = 0x10,
72094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL21 = 0x20,
73094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL3 = 0x40,
74094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL3 = 0x80,
75094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL31 = 0x100,
76094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL31 = 0x200,
77094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL4 = 0x400,
78094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL4 = 0x800,
79094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL41 = 0x1000,
80094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL41 = 0x2000,
81094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL5 = 0x4000,
82094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL5 = 0x8000,
83094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL51 = 0x10000,
84094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL51 = 0x20000,
85094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL52 = 0x40000,
86094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL52 = 0x80000,
87094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL6 = 0x100000,
88094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL6 = 0x200000,
89094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL61 = 0x400000,
90094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL61 = 0x800000,
91094332d3Sopenharmony_ci    CODEC_HEVC_MAIN_TIER_LEVEL62 = 0x1000000,
92094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_LEVEL62 = 0x2000000,
93094332d3Sopenharmony_ci    CODEC_HEVC_HIGH_TIER_MAX = 0x7FFFFFFF
94094332d3Sopenharmony_ci};
95094332d3Sopenharmony_ci
96094332d3Sopenharmony_ci/**
97094332d3Sopenharmony_ci * @brief Enumerates the extended codec color format.
98094332d3Sopenharmony_ci */
99094332d3Sopenharmony_cienum CodecColorFormatExt {
100094332d3Sopenharmony_ci    CODEC_COLOR_FORMAT_RGBA8888 = OMX_COLOR_FormatVendorStartUnused + 100,
101094332d3Sopenharmony_ci};
102094332d3Sopenharmony_ci
103094332d3Sopenharmony_ci/**
104094332d3Sopenharmony_ci * @brief Enumerates the buffer types.
105094332d3Sopenharmony_ci */
106094332d3Sopenharmony_cienum CodecBufferType {
107094332d3Sopenharmony_ci    /** Invalid buffer type. */
108094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_INVALID = 0,
109094332d3Sopenharmony_ci    /** Virtual address type. */
110094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_VIRTUAL_ADDR = 0x1,
111094332d3Sopenharmony_ci    /** Shared memory. */
112094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_AVSHARE_MEM_FD = 0x2,
113094332d3Sopenharmony_ci    /** Handle. */
114094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_HANDLE = 0x4,
115094332d3Sopenharmony_ci    /** Dynamic handle. */
116094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_DYNAMIC_HANDLE = 0x8,
117094332d3Sopenharmony_ci    /** DMA memory. */
118094332d3Sopenharmony_ci    CODEC_BUFFER_TYPE_DMA_MEM_FD = 0x10,
119094332d3Sopenharmony_ci};
120094332d3Sopenharmony_ci
121094332d3Sopenharmony_ci/**
122094332d3Sopenharmony_ci * @brief Defines the <b>SupportBuffer</b>.
123094332d3Sopenharmony_ci */
124094332d3Sopenharmony_cistruct SupportBufferType {
125094332d3Sopenharmony_ci    uint32_t size;                 /** Size of the structure */
126094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version; /** Component version */
127094332d3Sopenharmony_ci    uint32_t portIndex;            /** Port index */
128094332d3Sopenharmony_ci    uint32_t bufferTypes;          /** Supported buffer types */
129094332d3Sopenharmony_ci};
130094332d3Sopenharmony_ci
131094332d3Sopenharmony_ci/**
132094332d3Sopenharmony_ci * @brief Define the <b>UseBuffer</b>.
133094332d3Sopenharmony_ci */
134094332d3Sopenharmony_cistruct UseBufferType {
135094332d3Sopenharmony_ci    uint32_t size;                 /** Size of the structure */
136094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version; /** Component version */
137094332d3Sopenharmony_ci    uint32_t portIndex;            /** Port index */
138094332d3Sopenharmony_ci    uint32_t bufferType;           /** Buffer type */
139094332d3Sopenharmony_ci};
140094332d3Sopenharmony_ci
141094332d3Sopenharmony_ci/**
142094332d3Sopenharmony_ci * @brief Defines the <b>BufferHandleUsage</b>.
143094332d3Sopenharmony_ci */
144094332d3Sopenharmony_cistruct GetBufferHandleUsageParams {
145094332d3Sopenharmony_ci    uint32_t size;                 /** Size of the structure */
146094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version; /** Component version */
147094332d3Sopenharmony_ci    uint32_t portIndex;            /** Port index */
148094332d3Sopenharmony_ci    uint64_t usage;                /** Usage */
149094332d3Sopenharmony_ci};
150094332d3Sopenharmony_ci
151094332d3Sopenharmony_ci/**
152094332d3Sopenharmony_ci * @brief Defines the <b>CodecVideoPortFormatParam</b>.
153094332d3Sopenharmony_ci */
154094332d3Sopenharmony_cistruct CodecVideoPortFormatParam {
155094332d3Sopenharmony_ci    uint32_t size;                                         /** Size of the structure */
156094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;                         /** Component version */
157094332d3Sopenharmony_ci    uint32_t portIndex;                                    /** Port index */
158094332d3Sopenharmony_ci    uint32_t codecColorIndex;                              /** Color format index */
159094332d3Sopenharmony_ci    uint32_t codecColorFormat;                             /** Color format defined in Display */
160094332d3Sopenharmony_ci    uint32_t codecCompressFormat;                          /** See  */
161094332d3Sopenharmony_ci    uint32_t framerate;                                    /** Q16 format */
162094332d3Sopenharmony_ci};
163094332d3Sopenharmony_ci
164094332d3Sopenharmony_ci/**
165094332d3Sopenharmony_ci * @brief Defines the <b>ControlRateConstantQuality</b>.
166094332d3Sopenharmony_ci */
167094332d3Sopenharmony_cistruct ControlRateConstantQuality {
168094332d3Sopenharmony_ci    uint32_t size;                                         /** Size of the structure */
169094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;                         /** Component version */
170094332d3Sopenharmony_ci    uint32_t portIndex;                                    /** Port index */
171094332d3Sopenharmony_ci    uint32_t qualityValue;                                 /** Control rate constant quality */
172094332d3Sopenharmony_ci};
173094332d3Sopenharmony_ci
174094332d3Sopenharmony_ci/**
175094332d3Sopenharmony_ci * @brief Defines the <b>PassthroughParam</b>.
176094332d3Sopenharmony_ci */
177094332d3Sopenharmony_cistruct PassthroughParam {
178094332d3Sopenharmony_ci    int32_t key;   /**< Parameter type index */
179094332d3Sopenharmony_ci    void *val;     /**< Pointer to the parameter value */
180094332d3Sopenharmony_ci    int size;      /**< Parameter value size */
181094332d3Sopenharmony_ci};
182094332d3Sopenharmony_ci
183094332d3Sopenharmony_ci/**
184094332d3Sopenharmony_ci * @brief Defines the <b>WorkingFrequencyParam</b>.
185094332d3Sopenharmony_ci */
186094332d3Sopenharmony_cistruct WorkingFrequencyParam {
187094332d3Sopenharmony_ci    uint32_t size;                    /** Size of the structure */
188094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;    /** Component version */
189094332d3Sopenharmony_ci    uint32_t level;                   /** Working Frequency level */
190094332d3Sopenharmony_ci};
191094332d3Sopenharmony_ci
192094332d3Sopenharmony_ci /**
193094332d3Sopenharmony_ci * @brief Defines the <b>ProcessNameParam</b>.
194094332d3Sopenharmony_ci */
195094332d3Sopenharmony_cistruct ProcessNameParam {
196094332d3Sopenharmony_ci    uint32_t size;                         /** Size of the structure */
197094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;         /** Component version */
198094332d3Sopenharmony_ci    char processName[PROCESS_NAME_LEN];    /** Process name array */
199094332d3Sopenharmony_ci};
200094332d3Sopenharmony_ci
201094332d3Sopenharmony_ci/**
202094332d3Sopenharmony_ci * @brief Defines the <b>AudioCodecParam</b>.
203094332d3Sopenharmony_ci */
204094332d3Sopenharmony_cistruct AudioCodecParam {
205094332d3Sopenharmony_ci    uint32_t size;                 /** Size of the structure */
206094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version; /** Component version */
207094332d3Sopenharmony_ci    uint32_t sampleRate;           /** Sample Rate */
208094332d3Sopenharmony_ci    uint32_t sampleFormat;         /** Sample Format */
209094332d3Sopenharmony_ci    uint32_t channels;             /** Channels */
210094332d3Sopenharmony_ci    uint32_t bitRate;              /** Bit Rate */
211094332d3Sopenharmony_ci    uint32_t reserved;             /** reserved word */
212094332d3Sopenharmony_ci};
213094332d3Sopenharmony_ci
214094332d3Sopenharmony_ci/**
215094332d3Sopenharmony_ci * @brief Enumerates the extended codec indexes.
216094332d3Sopenharmony_ci */
217094332d3Sopenharmony_cienum OmxIndexCodecExType {
218094332d3Sopenharmony_ci    /** Extended BufferType index */
219094332d3Sopenharmony_ci    OMX_IndexExtBufferTypeStartUnused = OMX_IndexKhronosExtensions + 0x00a00000,
220094332d3Sopenharmony_ci    /** SupportBuffer */
221094332d3Sopenharmony_ci    OMX_IndexParamSupportBufferType,
222094332d3Sopenharmony_ci    /** UseBuffer */
223094332d3Sopenharmony_ci    OMX_IndexParamUseBufferType,
224094332d3Sopenharmony_ci    /** GetBufferHandleUsage */
225094332d3Sopenharmony_ci    OMX_IndexParamGetBufferHandleUsage,
226094332d3Sopenharmony_ci    /** CodecVideoPortFormatParam */
227094332d3Sopenharmony_ci    OMX_IndexCodecVideoPortFormat,
228094332d3Sopenharmony_ci    /** ControlRateConstantQuality */
229094332d3Sopenharmony_ci    OMX_IndexParamControlRateConstantQuality,
230094332d3Sopenharmony_ci    /** PassthroughParam */
231094332d3Sopenharmony_ci    OMX_IndexParamPassthrough,
232094332d3Sopenharmony_ci    /** OMX_IndexParamVideoHevc */
233094332d3Sopenharmony_ci    OMX_IndexParamVideoHevc,
234094332d3Sopenharmony_ci    /** range/primary/transfer/matrix */
235094332d3Sopenharmony_ci    OMX_IndexColorAspects,
236094332d3Sopenharmony_ci    /** WorkingFrequencyParam */
237094332d3Sopenharmony_ci    OMX_IndexParamWorkingFrequency,
238094332d3Sopenharmony_ci    /** ProcessNameParam */
239094332d3Sopenharmony_ci    OMX_IndexParamProcessName,
240094332d3Sopenharmony_ci    /** AudioCodecParam */
241094332d3Sopenharmony_ci    OMX_IndexParamAudioCodec,
242094332d3Sopenharmony_ci    /** CodecParamOverlayBuffer */
243094332d3Sopenharmony_ci    OMX_IndexParamOverlayBuffer,
244094332d3Sopenharmony_ci    /** CodecLTRParam/CodecLTRPerFrameParam */
245094332d3Sopenharmony_ci    OMX_IndexParamLTR,
246094332d3Sopenharmony_ci    /** CodecQPRangeParam */
247094332d3Sopenharmony_ci    OMX_IndexParamQPRange,
248094332d3Sopenharmony_ci    /** OMX_CONFIG_BOOLEANTYPE */
249094332d3Sopenharmony_ci    OMX_IndexParamLowLatency,
250094332d3Sopenharmony_ci    /** WirelessLowDelay */
251094332d3Sopenharmony_ci    OMX_IndexParamWirelessLowDelay,
252094332d3Sopenharmony_ci    /** OMX_S32 */
253094332d3Sopenharmony_ci    OMX_IndexParamEncOutQp,
254094332d3Sopenharmony_ci    /** double */
255094332d3Sopenharmony_ci    OMX_IndexParamEncOutMse,
256094332d3Sopenharmony_ci    /** CodecEncOutLTRParam */
257094332d3Sopenharmony_ci    OMX_IndexParamEncOutLTR,
258094332d3Sopenharmony_ci    /** CodecTemperalLayerParam */
259094332d3Sopenharmony_ci    OMX_IndexParamTemperalLayer,
260094332d3Sopenharmony_ci    /** OMX_CONFIG_BOOLEANTYPE */
261094332d3Sopenharmony_ci    OMX_IndexParamEncParamsFeedback,
262094332d3Sopenharmony_ci    /** OMX_S32 */
263094332d3Sopenharmony_ci    OMX_IndexParamEncOutFrameLayer,
264094332d3Sopenharmony_ci    /** OMX_S32 */
265094332d3Sopenharmony_ci    OMX_IndexParamQPStsart,
266094332d3Sopenharmony_ci    /** OMX_BOOL */
267094332d3Sopenharmony_ci    OMX_IndexParamSkipFrame,
268094332d3Sopenharmony_ci    /** OMX_S32 */
269094332d3Sopenharmony_ci    OMX_IndexParamEncOutRealBitrate,
270094332d3Sopenharmony_ci    /** CodecEncOutMadParam */
271094332d3Sopenharmony_ci    OMX_IndexParamEncOutMad,
272094332d3Sopenharmony_ci    /** OMX_S32 */
273094332d3Sopenharmony_ci    OMX_IndexParamEncOutIRatio,
274094332d3Sopenharmony_ci    /** OMX_S32 */
275094332d3Sopenharmony_ci    OMX_IndexParamEncOutFrameQp,
276094332d3Sopenharmony_ci    /** OMX_CONFIG_BOOLEANTYPE */
277094332d3Sopenharmony_ci    OMX_IndexParamSupportPackInput,
278094332d3Sopenharmony_ci    /** OMX_CONFIG_BOOLEANTYPE */
279094332d3Sopenharmony_ci    OMX_IndexParamIsMvUpload,
280094332d3Sopenharmony_ci};
281094332d3Sopenharmony_ci
282094332d3Sopenharmony_ci/**
283094332d3Sopenharmony_ci * @brief Enumerates the Other Control Rate Type.
284094332d3Sopenharmony_ci */
285094332d3Sopenharmony_citypedef enum OmxVideoControlRateVendorExtType {
286094332d3Sopenharmony_ci    /** constant bit rate mode with Rlambda */
287094332d3Sopenharmony_ci    OMX_Video_ControlRateConstantWithRlambda = OMX_Video_ControlRateVendorStartUnused + 0x1,
288094332d3Sopenharmony_ci} OmxVideoControlRateVendorExtType;
289094332d3Sopenharmony_ci
290094332d3Sopenharmony_ci/**
291094332d3Sopenharmony_ci * @brief Enumerates the Other extended codec indexes.
292094332d3Sopenharmony_ci */
293094332d3Sopenharmony_cienum OmxIndexCodecOtherExtType {
294094332d3Sopenharmony_ci    /** Extended Config AutoFramerate Conversion */
295094332d3Sopenharmony_ci    OMX_IndexCodecExtConfigAutoFramerateConversion = OMX_IndexOtherStartUnused + 0x1,
296094332d3Sopenharmony_ci    /** Extended Config Priority */
297094332d3Sopenharmony_ci    OMX_IndexCodecExtConfigPriority,
298094332d3Sopenharmony_ci    /** Extended Config OperatingRate index */
299094332d3Sopenharmony_ci    OMX_IndexCodecExtConfigOperatingRate,
300094332d3Sopenharmony_ci};
301094332d3Sopenharmony_ci
302094332d3Sopenharmony_cienum OmxIndexCodecVendorExtType {
303094332d3Sopenharmony_ci    /** Extended Channel Attributes index */
304094332d3Sopenharmony_ci    OMX_IndexCodecExtChannelAttributes = OMX_IndexVendorStartUnused + 0x1,
305094332d3Sopenharmony_ci    /** CodecEnableNativeBufferParams */
306094332d3Sopenharmony_ci    OMX_IndexCodecExtEnableNativeBuffer,
307094332d3Sopenharmony_ci};
308094332d3Sopenharmony_ci
309094332d3Sopenharmony_ci/**
310094332d3Sopenharmony_ci * @brief Structure for controlling HEVC video encoding
311094332d3Sopenharmony_ci */
312094332d3Sopenharmony_cistruct CodecVideoParamHevc {
313094332d3Sopenharmony_ci    uint32_t size;                        /** Size of the structure */
314094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;        /** Component version */
315094332d3Sopenharmony_ci    uint32_t portIndex;                   /** Port index */
316094332d3Sopenharmony_ci    enum CodecHevcProfile profile;        /** Hevc profile. For details,  see {@link CodecHevcProfile}. */
317094332d3Sopenharmony_ci    enum CodecHevcLevel level;            /** Hevc level. For details,  see {@link CodecHevcLevel}. */
318094332d3Sopenharmony_ci    uint32_t keyFrameInterval;            /** Distance between consecutive I-frames (including one of the I frams).
319094332d3Sopenharmony_ci                                              0 means interval is unspecified and can be freely chosen by the codec.
320094332d3Sopenharmony_ci                                              1 means a stream of only I frams. other  means the real value. */
321094332d3Sopenharmony_ci};
322094332d3Sopenharmony_ci
323094332d3Sopenharmony_ci/**
324094332d3Sopenharmony_ci * @brief Defines the <b>CodecEnableNativeBufferParams</b>.
325094332d3Sopenharmony_ci */
326094332d3Sopenharmony_cistruct CodecEnableNativeBufferParams {
327094332d3Sopenharmony_ci    uint32_t size;                  /** Size of the structure */
328094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;  /** Component version */
329094332d3Sopenharmony_ci    uint32_t portIndex;             /** Port index */
330094332d3Sopenharmony_ci    bool enable;                    /** Enable NativeBuffer */
331094332d3Sopenharmony_ci};
332094332d3Sopenharmony_ci
333094332d3Sopenharmony_cistruct ColorAspects {
334094332d3Sopenharmony_ci    bool range;
335094332d3Sopenharmony_ci    uint8_t primaries;
336094332d3Sopenharmony_ci    uint8_t transfer;
337094332d3Sopenharmony_ci    uint8_t matrixCoeffs;
338094332d3Sopenharmony_ci};
339094332d3Sopenharmony_ci
340094332d3Sopenharmony_ci/**
341094332d3Sopenharmony_ci * @brief Structure for controlling color space
342094332d3Sopenharmony_ci*/
343094332d3Sopenharmony_cistruct CodecVideoColorspace {
344094332d3Sopenharmony_ci    uint32_t size;                        /** Size of the structure */
345094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;        /** Component version */
346094332d3Sopenharmony_ci    uint32_t portIndex;                   /** Port index */
347094332d3Sopenharmony_ci    uint32_t requestingDataSpace;
348094332d3Sopenharmony_ci    uint32_t dataSpaceChanged;
349094332d3Sopenharmony_ci    uint32_t pixeFormat;
350094332d3Sopenharmony_ci    uint32_t dataSpace;
351094332d3Sopenharmony_ci    struct ColorAspects aspects;
352094332d3Sopenharmony_ci};
353094332d3Sopenharmony_ci
354094332d3Sopenharmony_ci/**
355094332d3Sopenharmony_ci * @brief Structure for pAppPrivate data of OMX_BUFFERHEADERTYPE
356094332d3Sopenharmony_ci*/
357094332d3Sopenharmony_cistruct OMXBufferAppPrivateData {
358094332d3Sopenharmony_ci    int32_t fd;                          /** dma fd or secure dma fd allocated by vender */
359094332d3Sopenharmony_ci    uint32_t sizeOfParam;
360094332d3Sopenharmony_ci    void *param;
361094332d3Sopenharmony_ci};
362094332d3Sopenharmony_ci
363094332d3Sopenharmony_cistruct CodecLTRParam {
364094332d3Sopenharmony_ci    uint32_t size;                               /** Size of the structure */
365094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;               /** Component version */
366094332d3Sopenharmony_ci    uint32_t ltrFrameListLen;
367094332d3Sopenharmony_ci};
368094332d3Sopenharmony_ci
369094332d3Sopenharmony_cistruct CodecLTRPerFrameParam {
370094332d3Sopenharmony_ci    bool markAsLTR;
371094332d3Sopenharmony_ci    bool useLTR;
372094332d3Sopenharmony_ci    uint32_t useLTRPoc;
373094332d3Sopenharmony_ci};
374094332d3Sopenharmony_ci
375094332d3Sopenharmony_cistruct CodecEncOutLTRParam {
376094332d3Sopenharmony_ci    bool isLTR;
377094332d3Sopenharmony_ci    uint32_t poc;
378094332d3Sopenharmony_ci};
379094332d3Sopenharmony_ci
380094332d3Sopenharmony_cistruct CodecQPRangeParam {
381094332d3Sopenharmony_ci    uint32_t size;                               /** Size of the structure */
382094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;               /** Component version */
383094332d3Sopenharmony_ci    uint32_t minQp;
384094332d3Sopenharmony_ci    uint32_t maxQp;
385094332d3Sopenharmony_ci};
386094332d3Sopenharmony_ci
387094332d3Sopenharmony_cistruct CodecTemperalLayerParam {
388094332d3Sopenharmony_ci    uint32_t size;                               /** Size of the structure */
389094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;               /** Component version */
390094332d3Sopenharmony_ci    uint32_t layerCnt;
391094332d3Sopenharmony_ci};
392094332d3Sopenharmony_ci
393094332d3Sopenharmony_cistruct CodecParamOverlayBuffer {
394094332d3Sopenharmony_ci    uint32_t size;                               /** Size of the structure */
395094332d3Sopenharmony_ci    union OMX_VERSIONTYPE version;               /** Component version */
396094332d3Sopenharmony_ci    bool enable;
397094332d3Sopenharmony_ci    uint32_t dstX;
398094332d3Sopenharmony_ci    uint32_t dstY;
399094332d3Sopenharmony_ci    uint32_t dstW;
400094332d3Sopenharmony_ci    uint32_t dstH;
401094332d3Sopenharmony_ci    void* bufferHandle;
402094332d3Sopenharmony_ci};
403094332d3Sopenharmony_ci
404094332d3Sopenharmony_cistruct CodecEncOutMadParam {
405094332d3Sopenharmony_ci    int32_t frameMadi;
406094332d3Sopenharmony_ci    int32_t frameMadp;
407094332d3Sopenharmony_ci    int32_t sumMadi;
408094332d3Sopenharmony_ci};
409094332d3Sopenharmony_ci
410094332d3Sopenharmony_ci#ifdef __cplusplus
411094332d3Sopenharmony_ci#if __cplusplus
412094332d3Sopenharmony_ci}
413094332d3Sopenharmony_ci#endif
414094332d3Sopenharmony_ci#endif /* __cplusplus */
415094332d3Sopenharmony_ci
416094332d3Sopenharmony_ci#endif  // CODEC_OMX_EXT_H