3 * Copyright 2012 Samsung Electronics S.LSI Co. LTD
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 * @file Exynos_OMX_Def.h
20 * @brief Exynos_OMX specific define
21 * @author SeungBeom Kim (sbcrux.kim@samsung.com)
27 #ifndef EXYNOS_OMX_DEF
28 #define EXYNOS_OMX_DEF
30 //#define PERFORMANCE_DEBUG
32 #include "OMX_Types.h"
33 #include "OMX_IVCommon.h"
34 #include "OMX_Video.h"
35 #include "OMX_VideoExt.h"
36 #include "OMX_IndexExt.h"
38 #define VERSIONMAJOR_NUMBER 1
39 #define VERSIONMINOR_NUMBER 1
40 #define REVISION_NUMBER 2
43 #define RESOURCE_VIDEO_DEC 16
44 #define RESOURCE_VIDEO_ENC 16
45 #define RESOURCE_AUDIO_DEC 10
47 #define MAX_OMX_COMPONENT_NUM 40
48 #define MAX_OMX_COMPONENT_ROLE_NUM 10
49 #define MAX_OMX_COMPONENT_NAME_SIZE OMX_MAX_STRINGNAME_SIZE
50 #define MAX_OMX_COMPONENT_ROLE_SIZE OMX_MAX_STRINGNAME_SIZE
51 #define MAX_OMX_COMPONENT_LIBNAME_SIZE OMX_MAX_STRINGNAME_SIZE * 2
52 #define MAX_OMX_MIMETYPE_SIZE OMX_MAX_STRINGNAME_SIZE
54 #define MAX_BUFFER_REF 40
55 #define MAX_TIMESTAMP MAX_BUFFER_REF
56 #define MAX_FLAGS MAX_BUFFER_REF
58 #define MAX_BUFFER_PLANE 3
60 #define INDEX_AFTER_EOS 0xE05
62 #define DEFAULT_TIMESTAMP_VAL (-1010101010)
63 #define RESET_TIMESTAMP_VAL (-1001001001)
65 // The largest metadata buffer size advertised
66 // when metadata buffer mode is used
67 #define MAX_METADATA_BUFFER_SIZE (64)
69 #define PREFIX_COMPONENT_NAME "OMX.Exynos."
70 #define IS_CUSTOM_COMPONENT(name) (((char)(name[((int)sizeof(PREFIX_COMPONENT_NAME))-1]) >= 0x61)? OMX_TRUE:OMX_FALSE)
72 #define IS_64BIT_OS (((sizeof(int) != sizeof(void *))? OMX_TRUE:OMX_FALSE))
73 #define EXYNOS_OMX_INSTALL_PATH "/system/lib/omx/"
74 #define EXYNOS_OMX64_INSTALL_PATH "/system/lib64/omx/"
76 typedef enum _EXYNOS_CODEC_TYPE
81 HW_VIDEO_DEC_SECURE_CODEC
,
82 HW_VIDEO_ENC_SECURE_CODEC
,
87 #define PLANE_MAX_NUM 3
88 typedef enum _PLANE_TYPE
{
89 PLANE_MULTIPLE
= 0x00,
91 PLANE_SINGLE_USER
= 0x12,
94 typedef enum _EXYNOS_OMX_INDEXTYPE
96 #define EXYNOS_INDEX_PARAM_THUMBNAIL "OMX.SEC.index.ThumbnailMode"
97 OMX_IndexVendorThumbnailMode
= 0x7F000001,
99 #define EXYNOS_INDEX_CONFIG_VIDEO_INTRAPERIOD "OMX.SEC.index.VideoIntraPeriod"
100 OMX_IndexConfigVideoIntraPeriod
= 0x7F000002,
102 #ifdef USE_S3D_SUPPORT
103 #define EXYNOS_INDEX_PARAM_GET_S3D "OMX.SEC.index.S3DMode"
104 OMX_IndexVendorS3DMode
= 0x7F000003,
107 #define EXYNOS_INDEX_PARAM_NEED_CONTIG_MEMORY "OMX.SEC.index.NeedContigMemory"
108 OMX_IndexVendorNeedContigMemory
= 0x7F000004,
110 #define EXYNOS_INDEX_CONFIG_GET_BUFFER_FD "OMX.SEC.index.GetBufferFD"
111 OMX_IndexVendorGetBufferFD
= 0x7F000005,
113 #define EXYNOS_INDEX_PARAM_SET_DTS_MODE "OMX.SEC.index.SetDTSMode"
114 OMX_IndexVendorSetDTSMode
= 0x7F000006,
116 #define EXYNOS_INDEX_CONFIG_SET_QOS_RATIO "OMX.SEC.index.SetQosRatio"
117 OMX_IndexVendorSetQosRatio
= 0x7F000007,
119 /* for Android Native Window */
120 #define EXYNOS_INDEX_PARAM_ENABLE_ANB "OMX.google.android.index.enableAndroidNativeBuffers"
121 OMX_IndexParamEnableAndroidBuffers
= 0x7F000011,
123 #define EXYNOS_INDEX_PARAM_GET_ANB "OMX.google.android.index.getAndroidNativeBufferUsage"
124 OMX_IndexParamGetAndroidNativeBuffer
= 0x7F000012,
126 #define EXYNOS_INDEX_PARAM_USE_ANB "OMX.google.android.index.useAndroidNativeBuffer"
127 OMX_IndexParamUseAndroidNativeBuffer
= 0x7F000013,
129 /* for Android Store Metadata Inbuffer */
130 #define EXYNOS_INDEX_PARAM_STORE_METADATA_BUFFER "OMX.google.android.index.storeMetaDataInBuffers"
131 OMX_IndexParamStoreMetaDataBuffer
= 0x7F000014,
133 /* prepend SPS/PPS to I/IDR for H.264 Encoder */
134 #define EXYNOS_INDEX_PARAM_PREPEND_SPSPPS_TO_IDR "OMX.google.android.index.prependSPSPPSToIDRFrames"
135 OMX_IndexParamPrependSPSPPSToIDR
= 0x7F000015,
137 #ifdef USE_KHRONOS_OMX_HEADER
139 #if 0 /* USE_VP8_SUPPORT : these are declared in OMX_IndexExt.h */
140 #define EXYNOS_INDEX_PARAM_VIDEO_VP8_TYPE "OMX.SEC.index.VideoVp8Type"
141 OMX_IndexParamVideoVp8
= 0x7F000016,
143 #define EXYNOS_INDEX_CONFIG_VIDEO_VP8_REFERENCEFRAME "OMX.SEC.index.VideoVp8ReferenceFrame"
144 OMX_IndexConfigVideoVp8ReferenceFrame
= 0x7F000017,
146 #define EXYNOS_INDEX_CONFIG_VIDEO_VP8_REFERENCEFRAMETYPE "OMX.SEC.index.VideoVp8ReferenceFrameType"
147 OMX_IndexConfigVideoVp8ReferenceFrameType
= 0x7F000018,
148 #endif // USE_VP8_SUPPORT
151 #ifdef USE_HEVC_SUPPORT
152 #define EXYNOS_INDEX_PARAM_VIDEO_HEVC_TYPE "OMX.SEC.index.VideoHevcType"
153 OMX_IndexParamVideoHevc
= 0x7F000019,
154 #endif // USE_HEVC_SUPPORT
156 #endif // USE_KHRONOS_OMX_HEADER
159 #define EXYNOS_INDEX_PARAM_ENABLE_THUMBNAIL "OMX.SEC.index.enableThumbnailMode"
160 OMX_IndexParamEnableThumbnailMode
= 0x7F000020,
162 /* Android Native Buffer */
163 #define EXYNOS_INDEX_PARAM_USE_ANB2 "OMX.google.android.index.useAndroidNativeBuffer2"
164 OMX_IndexParamUseAndroidNativeBuffer2
= 0x7F000021,
167 #define EXYNOS_INDEX_PARAM_VIDEO_QPRANGE_TYPE "OMX.SEC.indexParam.VideoQPRange"
168 OMX_IndexParamVideoQPRange
= 0x7F000022,
170 #define EXYNOS_INDEX_CONFIG_VIDEO_QPRANGE_TYPE "OMX.SEC.indexConfig.VideoQPRange"
171 OMX_IndexConfigVideoQPRange
= 0x7F000023,
173 #ifdef USE_KHRONOS_OMX_HEADER
175 #ifdef USE_VP8_SUPPORT
176 #define EXYNOS_INDEX_PARAM_VIDEO_ANDROID_VP8_ENCODER "OMX.SEC.index.VideoAndroidVP8Encoder"
177 OMX_IndexParamVideoAndroidVp8Encoder
= 0x7F000024,
178 #endif // USE_VP8_SUPPORT
180 #define EXYNOS_INDEX_PARAM_SLICE_SEGMENTS "OMX.SEC.index.SliceSegments"
181 OMX_IndexParamSliceSegments
= 0x7F000025,
183 #endif // USE_KHRONOS_OMX_HEADER
186 #define EXYNOS_INDEX_CONFIG_VIDEO_TEMPORALSVC "OMX.SEC.index.TemporalSVC"
187 OMX_IndexConfigVideoTemporalSVC
= 0x7F000026,
189 #define EXYNOS_INDEX_PARAM_VIDEO_AVC_ENABLE_TEMPORALSVC "OMX.SEC.index.AVC.enableTemporalSVC"
190 OMX_IndexParamVideoAVCEnableTemporalSVC
= 0x7F000027,
193 #ifndef USE_KHRONOS_OMX_1_2
194 #define EXYNOS_INDEX_PARAM_VIDEO_VC1_TYPE "OMX.SEC.index.VideoVc1Type"
195 OMX_IndexParamVideoVC1
= 0x7F000028,
198 //#ifdef USE_KHRONOS_OMX_HEADER
200 #ifdef USE_VP9_SUPPORT
201 #define EXYNOS_INDEX_PARAM_VIDEO_VP9_TYPE "OMX.SEC.index.VideoVp9Type"
202 OMX_IndexParamVideoVp9
= 0x7F000029,
204 #define EXYNOS_INDEX_CONFIG_VIDEO_VP9_REFERENCEFRAME "OMX.SEC.index.VideoVp9ReferenceFrame"
205 OMX_IndexConfigVideoVp9ReferenceFrame
= 0x7F000030,
207 #define EXYNOS_INDEX_CONFIG_VIDEO_VP9_REFERENCEFRAMETYPE "OMX.SEC.index.VideoVp9ReferenceFrameType"
208 OMX_IndexConfigVideoVp9ReferenceFrameType
= 0x7F000031,
210 #define EXYNOS_INDEX_PARAM_VIDEO_ANDROID_VP9_ENCODER "OMX.SEC.index.VideoAndroidVP9Encoder"
211 OMX_IndexParamVideoAndroidVp9Encoder
= 0x7F000032,
212 #endif // USE_VP9_SUPPORT
213 //#endif // USE_KHRONOS_OMX_HEADER
216 #define EXYNOS_INDEX_PARAM_ENABLE_BLUR_FILTER "OMX.SEC.indexParam.enableBlurFilter"
217 OMX_IndexParamEnableBlurFilter
= 0x7F000033,
218 #define EXYNOS_INDEX_CONFIG_BLUR_INFO "OMX.SEC.indexConfig.BlurInfo"
219 OMX_IndexConfigBlurInfo
= 0x7F000034,
221 #define EXYNOS_INDEX_PARAM_VIDEO_HEVC_ENABLE_TEMPORALSVC "OMX.SEC.index.Hevc.enableTemporalSVC"
222 OMX_IndexParamVideoHevcEnableTemporalSVC
= 0x7F000035,
224 /* ROI Information */
225 #define EXYNOS_INDEX_CONFIG_VIDEO_ROIINFO "OMX.SEC.index.RoiInfo"
226 OMX_IndexConfigVideoRoiInfo
= 0x7F000036,
227 #define EXYNOS_INDEX_PARAM_VIDEO_ENABLE_ROIINFO "OMX.SEC.index.enableRoiInfo"
228 OMX_IndexParamVideoEnableRoiInfo
= 0x7F000037,
230 /* rotation about encoder's input */
231 #define EXYNOS_INDEX_PARAM_ROATION_INFO "OMX.SEC.indexParam.RotationInfo"
232 OMX_IndexParamRotationInfo
= 0x7F000038,
234 #define EXYNOS_INDEX_CONFIG_OPERATING_RATE "OMX.SEC.index.OperatingRate"
235 #ifdef USE_KHRONOS_OMX_HEADER
236 OMX_IndexConfigOperatingRate
= 0x7F000039,
239 /* for custom component(MSRND) */
240 OMX_IndexExynosStartUnused
= 0x7F050000, /* Reserved region for Exynos Extensions */
242 #define EXYNOS_CUSTOM_INDEX_CONFIG_PTS_MODE "OMX.SEC.CUSTOM.index.PTSMode"
243 OMX_IndexExynosConfigPTSMode
= 0x7F050001, /* to support PTS Video TimeStamp - OMX_BOOL */
244 #define EXYNOS_CUSTOM_INDEX_CONFIG_DISPLAY_DELAY "OMX.SEC.CUSTOM.index.DisplayDelay"
245 OMX_IndexExynosConfigDisplayDelay
= 0x7F050002, /* to support H264 DisplayDelay Setting - OMX_U32 */
246 /* Timestamp reorder */
247 #define EXYNOS_CUSTOM_INDEX_PARAM_REORDER_MODE "OMX.SEC.CUSTOM.index.ReorderMode"
248 OMX_IndexExynosParamReorderMode
= 0x7F050003,
249 #define EXYNOS_CUSTOM_INDEX_PARAM_CORRUPTEDHEADER "OMX.SEC.CUSTOM.index.CorruptedHeader"
250 OMX_IndexExynosParamCorruptedHeader
= 0x7F050004,
253 /* for Skype HD Common */
254 #define OMX_MS_SKYPE_PARAM_DRIVERVER "OMX.microsoft.skype.index.driverversion"
255 OMX_IndexSkypeParamDriverVersion
= 0x7F060001,
256 /* for Skype HD Decode */
257 #define OMX_MS_SKYPE_PARAM_DECODERSETTING "OMX.microsoft.skype.index.decodersetting"
258 OMX_IndexSkypeParamDecoderSetting
= 0x7F060002,
259 #define OMX_MS_SKYPE_PARAM_DECODERCAP "OMX.microsoft.skype.index.decodercapability"
260 OMX_IndexSkypeParamDecoderCapability
= 0x7F060003,
261 /* for Skype HD Encode */
262 #define OMX_MS_SKYPE_PARAM_ENCODERSETTING "OMX.microsoft.skype.index.encodersetting"
263 OMX_IndexSkypeParamEncoderSetting
= 0x7F060004,
264 #define OMX_MS_SKYPE_PARAM_ENCODERCAP "OMX.microsoft.skype.index.encodercapability"
265 OMX_IndexSkypeParamEncoderCapability
= 0x7F060005,
266 #define OMX_MS_SKYPE_CONFIG_MARKLTRFRAME "OMX.microsoft.skype.index.markltrframe"
267 OMX_IndexSkypeConfigMarkLTRFrame
= 0x7F060006,
268 #define OMX_MS_SKYPE_CONFIG_USELTRFRAME "OMX.microsoft.skype.index.useltrframe"
269 OMX_IndexSkypeConfigUseLTRFrame
= 0x7F060007,
270 #define OMX_MS_SKYPE_CONFIG_QP "OMX.microsoft.skype.index.qp"
271 OMX_IndexSkypeConfigQP
= 0x7F060008,
272 #define OMX_MS_SKYPE_CONFIG_TEMPORALLAYERCOUNT "OMX.microsoft.skype.index.temporallayercount"
273 OMX_IndexSkypeConfigTemporalLayerCount
= 0x7F060009,
274 #define OMX_MS_SKYPE_CONFIG_BASELAYERPID "OMX.microsoft.skype.index.basepid"
275 OMX_IndexSkypeConfigBasePid
= 0x7F06000a,
277 OMX_IndexExynosEndUnused
= 0x7F05FFFF,
278 } EXYNOS_OMX_INDEXTYPE
;
280 typedef enum _EXYNOS_OMX_ERRORTYPE
282 OMX_ErrorNoEOF
= (OMX_S32
) 0x90000001,
283 OMX_ErrorInputDataDecodeYet
= (OMX_S32
) 0x90000002,
284 OMX_ErrorInputDataEncodeYet
= (OMX_S32
) 0x90000003,
285 OMX_ErrorCodecInit
= (OMX_S32
) 0x90000004,
286 OMX_ErrorCodecDecode
= (OMX_S32
) 0x90000005,
287 OMX_ErrorCodecEncode
= (OMX_S32
) 0x90000006,
288 OMX_ErrorCodecFlush
= (OMX_S32
) 0x90000007,
289 OMX_ErrorOutputBufferUseYet
= (OMX_S32
) 0x90000008,
290 OMX_ErrorCorruptedFrame
= (OMX_S32
) 0x90000009,
291 OMX_ErrorNeedNextHeaderInfo
= (OMX_S32
) 0x90000010,
292 OMX_ErrorNoneSrcSetupFinish
= (OMX_S32
) 0x90000011,
293 OMX_ErrorCorruptedHeader
= (OMX_S32
) 0x90000012,
294 OMX_ErrorNoneExpiration
= (OMX_S32
) 0x90000013,
295 } EXYNOS_OMX_ERRORTYPE
;
297 typedef enum _EXYNOS_OMX_COMMANDTYPE
299 EXYNOS_OMX_CommandComponentDeInit
= 0x7F000001,
300 EXYNOS_OMX_CommandEmptyBuffer
,
301 EXYNOS_OMX_CommandFillBuffer
,
302 EXYNOS_OMX_CommandFakeBuffer
303 } EXYNOS_OMX_COMMANDTYPE
;
305 typedef enum _EXYNOS_OMX_TRANS_STATETYPE
{
306 EXYNOS_OMX_TransStateInvalid
,
307 EXYNOS_OMX_TransStateLoadedToIdle
,
308 EXYNOS_OMX_TransStateIdleToExecuting
,
309 EXYNOS_OMX_TransStateExecutingToIdle
,
310 EXYNOS_OMX_TransStateIdleToLoaded
,
311 EXYNOS_OMX_TransStateMax
= 0X7FFFFFFF
312 } EXYNOS_OMX_TRANS_STATETYPE
;
314 typedef enum _EXYNOS_OMX_COLOR_FORMATTYPE
{
315 OMX_SEC_COLOR_FormatNV12TPhysicalAddress
= 0x7F000001, /**< Reserved region for introducing Vendor Extensions */
316 OMX_SEC_COLOR_FormatNV12LPhysicalAddress
= 0x7F000002,
317 OMX_SEC_COLOR_FormatNV12LVirtualAddress
= 0x7F000003,
318 #ifdef USE_KHRONOS_OMX_HEADER
319 OMX_SEC_COLOR_FormatNV12Tiled
= 0x7FC00002, /* 0x7FC00002 */
321 OMX_SEC_COLOR_FormatNV21LPhysicalAddress
= 0x7F000010,
322 OMX_SEC_COLOR_FormatNV21Linear
= 0x7F000011,
323 OMX_SEC_COLOR_FormatYVU420Planar
= 0x7F000012,
324 OMX_SEC_COLOR_Format32bitABGR8888
= 0x7F000013, /* unused */
325 OMX_SEC_COLOR_FormatYUV420SemiPlanarInterlace
= 0x7F000014,
326 OMX_SEC_COLOR_Format10bitYUV420SemiPlanar
= 0x7F000015,
328 /* to copy a encoded data for drm component using gsc or fimc */
329 OMX_SEC_COLOR_FormatEncodedData
= OMX_COLOR_FormatYCbYCr
,
330 #ifdef USE_KHRONOS_OMX_HEADER
331 /* for Android SurfaceMediaSource*/
332 OMX_COLOR_FormatAndroidOpaque
= 0x7F000789,
333 OMX_COLOR_Format32BitRGBA8888
= 0x7F00A000,
335 }EXYNOS_OMX_COLOR_FORMATTYPE
;
337 typedef enum _EXYNOS_OMX_SUPPORTFORMAT_TYPE
339 supportFormat_0
= 0x00,
347 } EXYNOS_OMX_SUPPORTFORMAT_TYPE
;
349 typedef enum _EXYNOS_OMX_BUFFERPROCESS_TYPE
351 BUFFER_DEFAULT
= 0x00,
354 BUFFER_METADATA
= 0x04,
355 BUFFER_ANBSHARE
= 0x08,
356 } EXYNOS_OMX_BUFFERPROCESS_TYPE
;
358 #ifdef USE_S3D_SUPPORT
359 typedef enum _EXYNOS_OMX_FPARGMT_TYPE
361 OMX_SEC_FPARGMT_INVALID
= -1,
362 OMX_SEC_FPARGMT_CHECKERBRD_INTERL
= 0x00,
363 OMX_SEC_FPARGMT_COLUMN_INTERL
= 0x01,
364 OMX_SEC_FPARGMT_ROW_INTERL
= 0x02,
365 OMX_SEC_FPARGMT_SIDE_BY_SIDE
= 0x03,
366 OMX_SEC_FPARGMT_TOP_BOTTOM
= 0x04,
367 OMX_SEC_FPARGMT_TEMPORAL_INTERL
= 0x05,
368 OMX_SEC_FPARGMT_NONE
= 0x0A
369 } EXYNOS_OMX_FPARGMT_TYPE
;
372 typedef enum _EXYNOS_OMX_EVENTTYPE
374 OMX_EventVendorStart
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
375 #ifdef USE_S3D_SUPPORT
376 OMX_EventS3DInformation
,
378 } EXYNOS_OMX_EVENTTYPE
;
380 typedef enum _EXYNOS_ANB_TYPE
{
381 NATIVE_GRAPHIC_BUFFER1
,
382 NATIVE_GRAPHIC_BUFFER2
,
385 typedef enum _EXYNOS_OMX_VIDEO_CONTROLRATETYPE
{
386 OMX_Video_ControlRateVendorStart
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
387 OMX_Video_ControlRateConstantVTCall
= 0x7F000001,
388 } EXYNOS_OMX_VIDEO_CONTROLRATETYPE
;
390 typedef struct _EXYNOS_OMX_PRIORITYMGMTTYPE
392 OMX_U32 nGroupPriority
; /* the value 0 represents the highest priority */
393 /* for a group of components */
395 } EXYNOS_OMX_PRIORITYMGMTTYPE
;
397 typedef struct _EXYNOS_OMX_VIDEO_PROFILELEVEL
401 } EXYNOS_OMX_VIDEO_PROFILELEVEL
;
403 typedef struct _EXYNOS_OMX_VIDEO_THUMBNAILMODE
{
405 OMX_VERSIONTYPE nVersion
;
408 } EXYNOS_OMX_VIDEO_THUMBNAILMODE
;
410 typedef struct _EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE
{
412 OMX_VERSIONTYPE nVersion
;
414 OMX_BOOL bNeedContigMem
;
415 } EXYNOS_OMX_VIDEO_PARAM_PORTMEMTYPE
;
417 typedef struct _EXYNOS_OMX_VIDEO_PARAM_DTSMODE
{
419 OMX_VERSIONTYPE nVersion
;
421 } EXYNOS_OMX_VIDEO_PARAM_DTSMODE
;
423 typedef struct _EXYNOS_OMX_VIDEO_PARAM_REORDERMODE
{
425 OMX_VERSIONTYPE nVersion
;
426 OMX_BOOL bReorderMode
;
427 } EXYNOS_OMX_VIDEO_PARAM_REORDERMODE
;
429 typedef struct _EXYNOS_OMX_VIDEO_PARAM_CORRUPTEDHEADER
{
431 OMX_VERSIONTYPE nVersion
;
432 OMX_BOOL bDiscardEvent
;
433 } EXYNOS_OMX_VIDEO_PARAM_CORRUPTEDHEADER
;
435 typedef struct _EXYNOS_OMX_VIDEO_CONFIG_BUFFERINFO
{
437 OMX_VERSIONTYPE nVersion
;
438 OMX_PTR OMX_IN pVirAddr
;
440 } EXYNOS_OMX_VIDEO_CONFIG_BUFFERINFO
;
442 typedef struct _EXYNOS_OMX_VIDEO_CONFIG_QOSINFO
{
444 OMX_VERSIONTYPE nVersion
;
446 } EXYNOS_OMX_VIDEO_CONFIG_QOSINFO
;
448 typedef struct OMX_VIDEO_QPRANGE
{
453 typedef struct OMX_VIDEO_QPRANGETYPE
{
455 OMX_VERSIONTYPE nVersion
;
457 OMX_VIDEO_QPRANGE qpRangeI
;
458 OMX_VIDEO_QPRANGE qpRangeP
;
459 OMX_VIDEO_QPRANGE qpRangeB
; /* H.264, HEVC, MPEG4 */
460 } OMX_VIDEO_QPRANGETYPE
;
463 /* Maximum number of temporal layers */
464 #define OMX_VIDEO_MAX_TEMPORAL_LAYERS 7
465 #define OMX_VIDEO_MAX_TEMPORAL_LAYERS_WITH_LTR 3
466 #define OMX_VIDEO_ANDROID_MAXAVCTEMPORALLAYERS 7
467 #define OMX_VIDEO_ANDROID_MAXHEVCTEMPORALLAYERS 7
469 typedef struct _EXYNOS_OMX_VIDEO_PARAM_ENABLE_TEMPORALSVC
{
471 OMX_VERSIONTYPE nVersion
;
473 OMX_BOOL bEnableTemporalSVC
;
474 } EXYNOS_OMX_VIDEO_PARAM_ENABLE_TEMPORALSVC
;
476 typedef struct _EXYNOS_OMX_VIDEO_CONFIG_TEMPORALSVC
{
478 OMX_VERSIONTYPE nVersion
;
480 OMX_U32 nKeyFrameInterval
;
481 OMX_U32 nTemporalLayerCount
;
482 OMX_U32 nTemporalLayerBitrateRatio
[OMX_VIDEO_MAX_TEMPORAL_LAYERS
];
483 OMX_U32 nMinQuantizer
;
484 OMX_U32 nMaxQuantizer
;
485 } EXYNOS_OMX_VIDEO_CONFIG_TEMPORALSVC
;
487 typedef enum _EXYNOS_OMX_BLUR_MODE
489 BLUR_MODE_NONE
= 0x00,
490 BLUR_MODE_DOWNUP
= 0x01,
491 BLUR_MODE_COEFFICIENT
= 0x02,
492 } EXYNOS_OMX_BLUR_MODE
;
494 typedef enum _EXYNOS_OMX_BLUR_RESOL
496 BLUR_RESOL_240
= 426 * 240, /* 426 x 240 */
497 BLUR_RESOL_480
= 854 * 480, /* 854 x 480 */
498 BLUR_RESOL_720
= 1280 * 720, /* 1280 x 720 */
499 BLUR_RESOL_1080
= 1920 * 1080, /* 1920 x 1080 */
500 } EXYNOS_OMX_BLUR_RESOL
;
502 typedef struct _EXYNOS_OMX_VIDEO_PARAM_ENABLE_BLURFILTER
{
504 OMX_VERSIONTYPE nVersion
;
506 OMX_BOOL bUseBlurFilter
;
507 } EXYNOS_OMX_VIDEO_PARAM_ENABLE_BLURFILTER
;
509 typedef struct _EXYNOS_OMX_VIDEO_CONFIG_BLURINFO
{
511 OMX_VERSIONTYPE nVersion
;
513 EXYNOS_OMX_BLUR_MODE eBlurMode
;
514 EXYNOS_OMX_BLUR_RESOL eTargetResol
;
515 } EXYNOS_OMX_VIDEO_CONFIG_BLURINFO
;
516 /* ROI Information */
518 typedef struct _EXYNOS_OMX_VIDEO_CONFIG_ROIINFO
{
520 OMX_VERSIONTYPE nVersion
;
522 OMX_S32 nUpperQpOffset
;
523 OMX_S32 nLowerQpOffset
;
524 OMX_BOOL bUseRoiInfo
;
525 OMX_S32 nRoiMBInfoSize
;
527 } EXYNOS_OMX_VIDEO_CONFIG_ROIINFO
;
529 typedef struct _EXYNOS_OMX_VIDEO_PARAM_ENABLE_ROIINFO
{
531 OMX_VERSIONTYPE nVersion
;
533 OMX_BOOL bEnableRoiInfo
;
534 } EXYNOS_OMX_VIDEO_PARAM_ENABLE_ROIINFO
;
537 typedef enum _EXYNOS_OMX_ROTATION_TYPE
543 } EXYNOS_OMX_ROTATION_TYPE
;
545 typedef struct _EXYNOS_OMX_VIDEO_PARAM_ROTATION_INFO
{
547 OMX_VERSIONTYPE nVersion
;
549 EXYNOS_OMX_ROTATION_TYPE eRotationType
;
550 } EXYNOS_OMX_VIDEO_PARAM_ROTATION_INFO
;
553 typedef enum EXYNOS_OMX_VIDEO_AVCPROFILETYPE
{
554 OMX_VIDEO_AVCProfileConstrainedBaseline
= 0x7F000001,
555 OMX_VIDEO_AVCProfileConstrainedHigh
= 0x7F000002,
556 } EXYNOS_OMX_VIDEO_AVCPROFILETYPE
;
558 #ifdef USE_KHRONOS_OMX_HEADER
559 typedef enum EXYNOS_OMX_VIDEO_AVCLEVELTYPE
{
560 OMX_VIDEO_AVCLevel52
= 0x10000, /**< Level 5.2 */
561 } EXYNOS_OMX_VIDEO_AVCLEVELTYPE
;
564 /* for Ext-Codec support */
565 typedef enum EXYNOS_OMX_VIDEO_CODINGTYPE
{
566 #ifdef USE_KHRONOS_OMX_HEADER
567 OMX_VIDEO_CodingHEVC
= 0x7F000002, /**< ITU H.265/HEVC */
568 OMX_VIDEO_CodingVP9
= 0x7F000003, /**< Google VP9 */
570 OMX_VIDEO_VendorCodingMAX
= 0x7FFFFFFF,
571 } EXYNOS_OMX_VIDEO_CODINGTYPE
;
573 typedef enum _EXYNOS_OMX_HIERARCHICAL_CODING_TYPE
575 EXYNOS_OMX_Hierarchical_P
= 0x00,
576 EXYNOS_OMX_Hierarchical_B
,
577 } EXYNOS_OMX_HIERARCHICAL_CODING_TYPE
;
579 #ifdef USE_KHRONOS_OMX_HEADER
581 #if defined(USE_VP8_SUPPORT) || defined(USE_VP9_SUPPORT)
582 /** VP8 temporal layer patterns */
583 typedef enum OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE
{
584 OMX_VIDEO_VPXTemporalLayerPatternNone
= 0,
585 OMX_VIDEO_VPXTemporalLayerPatternWebRTC
= 1,
586 OMX_VIDEO_VPXTemporalLayerPatternMax
= 0x7FFFFFFF
587 } OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE
;
591 #ifdef USE_VP8_SUPPORT
592 /** Maximum number of VP8 temporal layers */
593 #define OMX_VIDEO_ANDROID_MAXVP8TEMPORALLAYERS 3
596 * Android specific VP8 encoder params
599 * nSize : Size of the structure in bytes
600 * nVersion : OMX specification version information
601 * nPortIndex : Port that this structure applies to
602 * nKeyFrameInterval : Key frame interval in frames
603 * eTemporalPattern : Type of temporal layer pattern
604 * nTemporalLayerCount : Number of temporal coding layers
605 * nTemporalLayerBitrateRatio : Bitrate ratio allocation between temporal
606 * streams in percentage
607 * nMinQuantizer : Minimum (best quality) quantizer
608 * nMaxQuantizer : Maximum (worst quality) quantizer
610 typedef struct OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE
{
612 OMX_VERSIONTYPE nVersion
;
614 OMX_U32 nKeyFrameInterval
;
615 OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE eTemporalPattern
;
616 OMX_U32 nTemporalLayerCount
;
617 OMX_U32 nTemporalLayerBitrateRatio
[OMX_VIDEO_ANDROID_MAXVP8TEMPORALLAYERS
];
618 OMX_U32 nMinQuantizer
;
619 OMX_U32 nMaxQuantizer
;
620 } OMX_VIDEO_PARAM_ANDROID_VP8ENCODERTYPE
;
621 #endif // USE_VP8_SUPPORT
624 #ifdef USE_HEVC_SUPPORT
625 /** HEVC Profile enum type */
626 typedef enum OMX_VIDEO_HEVCPROFILETYPE
{
627 OMX_VIDEO_HEVCProfileUnknown
= 0x0,
628 OMX_VIDEO_HEVCProfileMain
= 0x01, /**< Main profile */
629 OMX_VIDEO_HEVCProfileMain10
= 0x02, /**< Main 10 profile */
630 OMX_VIDEO_HEVCProfileMainStillPicture
= 0x04, /**< Main Still Picture */
631 OMX_VIDEO_HEVCProfileKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
632 OMX_VIDEO_HEVCProfileVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
633 OMX_VIDEO_HEVCProfileMax
= 0x7FFFFFFF
634 } OMX_VIDEO_HEVCPROFILETYPE
;
636 /** HEVC Level enum type */
637 typedef enum OMX_VIDEO_HEVCLEVELTYPE
{
638 OMX_VIDEO_HEVCLevelUnknown
= 0x00000000,
639 OMX_VIDEO_HEVCMainTierLevel1
= 0x00000001, /**< Level 1 */
640 OMX_VIDEO_HEVCHighTierLevel1
= 0x00000002,
641 OMX_VIDEO_HEVCMainTierLevel2
= 0x00000004, /**< Level 2 */
642 OMX_VIDEO_HEVCHighTierLevel2
= 0x00000008,
643 OMX_VIDEO_HEVCMainTierLevel21
= 0x00000010, /**< Level 2.1 */
644 OMX_VIDEO_HEVCHighTierLevel21
= 0x00000020,
645 OMX_VIDEO_HEVCMainTierLevel3
= 0x00000040, /**< Level 3 */
646 OMX_VIDEO_HEVCHighTierLevel3
= 0x00000080,
647 OMX_VIDEO_HEVCMainTierLevel31
= 0x00000100, /**< Level 3.1 */
648 OMX_VIDEO_HEVCHighTierLevel31
= 0x00000200,
649 OMX_VIDEO_HEVCMainTierLevel4
= 0x00000400, /**< Level 4 */
650 OMX_VIDEO_HEVCHighTierLevel4
= 0x00000800,
651 OMX_VIDEO_HEVCMainTierLevel41
= 0x00001000, /**< Level 4.1 */
652 OMX_VIDEO_HEVCHighTierLevel41
= 0x00002000,
653 OMX_VIDEO_HEVCMainTierLevel5
= 0x00004000, /**< Level 5 */
654 OMX_VIDEO_HEVCHighTierLevel5
= 0x00008000,
655 OMX_VIDEO_HEVCMainTierLevel51
= 0x00010000, /**< Level 5.1 */
656 OMX_VIDEO_HEVCHighTierLevel51
= 0x00020000,
657 OMX_VIDEO_HEVCMainTierLevel52
= 0x00040000, /**< Level 5.2 */
658 OMX_VIDEO_HEVCHighTierLevel52
= 0x00080000,
659 OMX_VIDEO_HEVCMainTierLevel6
= 0x00100000, /**< Level 6 */
660 OMX_VIDEO_HEVCHighTierLevel6
= 0x00200000,
661 OMX_VIDEO_HEVCMainTierLevel61
= 0x00400000, /**< Level 6.1 */
662 OMX_VIDEO_HEVCHighTierLevel61
= 0x00800000,
663 OMX_VIDEO_HEVCMainTierLevel62
= 0x01000000, /**< Level 6.2 */
664 OMX_VIDEO_HEVCHighTierLevel62
= 0x02000000,
665 OMX_VIDEO_HEVCLevelKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
666 OMX_VIDEO_HEVCLevelVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
667 OMX_VIDEO_HEVCHighMAX
= 0x7FFFFFFF
668 } OMX_VIDEO_HEVCLEVELTYPE
;
670 /** Structure for controlling HEVC video encoding and decoding */
671 typedef struct OMX_VIDEO_PARAM_HEVCTYPE
{
673 OMX_VERSIONTYPE nVersion
;
675 OMX_VIDEO_HEVCPROFILETYPE eProfile
;
676 OMX_VIDEO_HEVCLEVELTYPE eLevel
;
677 } OMX_VIDEO_PARAM_HEVCTYPE
;
679 #endif // USE_HEVC_SUPPORT
681 /** Structure to define if dependent slice segments should be used */
682 typedef struct OMX_VIDEO_SLICESEGMENTSTYPE
{
684 OMX_VERSIONTYPE nVersion
;
686 OMX_BOOL bDepedentSegments
;
687 OMX_BOOL bEnableLoopFilterAcrossSlices
;
688 } OMX_VIDEO_SLICESEGMENTSTYPE
;
690 #endif // USE_KHRONOS_OMX_HEADER
692 //#ifdef USE_KHRONOS_OMX_HEADER
694 #ifdef USE_VP9_SUPPORT
696 typedef enum OMX_VIDEO_VP9PROFILETYPE
{
697 OMX_VIDEO_VP9ProfileMain
= 0x00000001,
698 OMX_VIDEO_VP9ProfileUnknown
= 0x6EFFFFFF,
699 OMX_VIDEO_VP9ProfileKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
700 OMX_VIDEO_VP9ProfileVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
701 OMX_VIDEO_VP9ProfileMax
= 0x7FFFFFFF
702 } OMX_VIDEO_VP9PROFILETYPE
;
705 typedef enum OMX_VIDEO_VP9LEVELTYPE
{
706 OMX_VIDEO_VP9Level_Version0
= 0x00000001,
707 OMX_VIDEO_VP9LevelUnknown
= 0x6EFFFFFF,
708 OMX_VIDEO_VP9LevelKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
709 OMX_VIDEO_VP9LevelVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
710 OMX_VIDEO_VP9LevelMax
= 0x7FFFFFFF
711 } OMX_VIDEO_VP9LEVELTYPE
;
714 typedef struct OMX_VIDEO_PARAM_VP9TYPE
{
716 OMX_VERSIONTYPE nVersion
;
718 OMX_VIDEO_VP9PROFILETYPE eProfile
;
719 OMX_VIDEO_VP9LEVELTYPE eLevel
;
720 OMX_BOOL bErrorResilientMode
;
721 } OMX_VIDEO_PARAM_VP9TYPE
;
723 /* VP9 reference frames */
724 typedef struct OMX_VIDEO_VP9REFERENCEFRAMETYPE
{
726 OMX_VERSIONTYPE nVersion
;
728 OMX_BOOL nPreviousFrameRefresh
;
729 OMX_BOOL bGoldenFrameRefresh
;
730 OMX_BOOL bAlternateFrameRefresh
;
731 OMX_BOOL bUsePreviousFrame
;
732 OMX_BOOL bUseGoldenFrame
;
733 OMX_BOOL bUseAlternateFrame
;
734 } OMX_VIDEO_VP9REFERENCEFRAMETYPE
;
736 /* VP9 reference frame type */
737 typedef struct OMX_VIDEO_VP9REFERENCEFRAMEINFOTYPE
{
739 OMX_VERSIONTYPE nVersion
;
741 OMX_BOOL bIsIntraFrame
;
742 OMX_BOOL bIsGoldenOrAlternateFrame
;
743 } OMX_VIDEO_VP9REFERENCEFRAMEINFOTYPE
;
745 /** Maximum number of VP9 temporal layers */
746 #define OMX_VIDEO_ANDROID_MAXVP9TEMPORALLAYERS 3
749 * Android specific VP9 encoder params
752 * nSize : Size of the structure in bytes
753 * nVersion : OMX specification version information
754 * nPortIndex : Port that this structure applies to
755 * nKeyFrameInterval : Key frame interval in frames
756 * eTemporalPattern : Type of temporal layer pattern
757 * nTemporalLayerCount : Number of temporal coding layers
758 * nTemporalLayerBitrateRatio : Bitrate ratio allocation between temporal
759 * streams in percentage
760 * nMinQuantizer : Minimum (best quality) quantizer
761 * nMaxQuantizer : Maximum (worst quality) quantizer
763 typedef struct OMX_VIDEO_PARAM_ANDROID_VP9ENCODERTYPE
{
765 OMX_VERSIONTYPE nVersion
;
767 OMX_U32 nKeyFrameInterval
;
768 OMX_VIDEO_ANDROID_VPXTEMPORALLAYERPATTERNTYPE eTemporalPattern
;
769 OMX_U32 nTemporalLayerCount
;
770 OMX_U32 nTemporalLayerBitrateRatio
[OMX_VIDEO_ANDROID_MAXVP9TEMPORALLAYERS
];
771 OMX_U32 nMinQuantizer
;
772 OMX_U32 nMaxQuantizer
;
773 } OMX_VIDEO_PARAM_ANDROID_VP9ENCODERTYPE
;
774 #endif // USE_VP9_SUPPORT
775 //#endif // USE_KHRONOS_OMX_HEADER
777 #ifndef USE_KHRONOS_OMX_1_2
779 /** WMV Profile enum type */
780 typedef enum OMX_VIDEO_WMVPROFILETYPE
{
781 OMX_VIDEO_WMVProfileSimple
= 0,
782 OMX_VIDEO_WMVProfileMain
,
783 OMX_VIDEO_WMVProfileAdvanced
,
784 OMX_VIDEO_WMVProfileUnknown
= 0x6EFFFFFF,
785 OMX_VIDEO_WMVProfileKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
786 OMX_VIDEO_WMVProfileVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
787 } OMX_VIDEO_WMVPROFILETYPE
;
789 /** WMV Level enum type */
790 typedef enum OMX_VIDEO_WMVLEVELTYPE
{
791 OMX_VIDEO_WMVLevelLow
= 0,
792 OMX_VIDEO_WMVLevelMedium
,
793 OMX_VIDEO_WMVLevelHigh
,
794 OMX_VIDEO_WMVLevelL0
,
795 OMX_VIDEO_WMVLevelL1
,
796 OMX_VIDEO_WMVLevelL2
,
797 OMX_VIDEO_WMVLevelL3
,
798 OMX_VIDEO_WMVLevelL4
,
799 OMX_VIDEO_WMVLevelUnknown
= 0x6EFFFFFF,
800 OMX_VIDEO_WMVLevelKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
801 OMX_VIDEO_WMVLevelVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
802 } OMX_VIDEO_WMVLEVELTYPE
;
805 /** VC1 Profile enum type */
806 typedef enum OMX_VIDEO_VC1PROFILETYPE
{
807 OMX_VIDEO_VC1ProfileUnused
= 0,
808 OMX_VIDEO_VC1ProfileSimple
,
809 OMX_VIDEO_VC1ProfileMain
,
810 OMX_VIDEO_VC1ProfileAdvanced
,
811 OMX_VIDEO_VC1ProfileUnknown
= 0x6EFFFFFF,
812 OMX_VIDEO_VC1ProfileKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
813 OMX_VIDEO_VC1ProfileVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
814 OMX_VIDEO_VC1ProfileMax
815 } OMX_VIDEO_VC1PROFILETYPE
;
817 /** VC1 Level enum type */
818 typedef enum OMX_VIDEO_VC1LEVELTYPE
{
819 OMX_VIDEO_VC1LevelUnused
= 0,
820 OMX_VIDEO_VC1LevelLow
,
821 OMX_VIDEO_VC1LevelMedium
,
822 OMX_VIDEO_VC1LevelHigh
,
828 OMX_VIDEO_VC1LevelUnknown
= 0x6EFFFFFF,
829 OMX_VIDEO_VC1LevelKhronosExtensions
= 0x6F000000, /**< Reserved region for introducing Khronos Standard Extensions */
830 OMX_VIDEO_VC1LevelVendorStartUnused
= 0x7F000000, /**< Reserved region for introducing Vendor Extensions */
831 OMX_VIDEO_VC1LevelMax
832 } OMX_VIDEO_VC1LEVELTYPE
;
834 /** Structure for controlling VC1 video encoding and decoding */
835 typedef struct OMX_VIDEO_PARAM_VC1TYPE
{
837 OMX_VERSIONTYPE nVersion
;
839 OMX_VIDEO_VC1PROFILETYPE eProfile
;
840 OMX_VIDEO_VC1LEVELTYPE eLevel
;
841 } OMX_VIDEO_PARAM_VC1TYPE
;
844 #ifndef __OMX_EXPORTS
845 #define __OMX_EXPORTS
846 #define EXYNOS_EXPORT_REF __attribute__((visibility("default")))
847 #define EXYNOS_IMPORT_REF __attribute__((visibility("default")))