1 /*-------------------------------------------------------------------------- 2 Copyright (c) 2009-2017,2019 The Linux Foundation. All rights reserved. 3 4 Redistribution and use in source and binary forms, with or without 5 modification, are permitted provided that the following conditions are met: 6 * Redistributions of source code must retain the above copyright 7 notice, this list of conditions and the following disclaimer. 8 * Redistributions in binary form must reproduce the above copyright 9 notice, this list of conditions and the following disclaimer in the 10 documentation and/or other materials provided with the distribution. 11 * Neither the name of The Linux Foundation nor 12 the names of its contributors may be used to endorse or promote 13 products derived from this software without specific prior written 14 permission. 15 16 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 20 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 21 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 22 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 23 OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 24 WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 26 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 --------------------------------------------------------------------------*/ 28 #ifndef __OMX_QCOM_EXTENSIONS_H__ 29 #define __OMX_QCOM_EXTENSIONS_H__ 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif /* __cplusplus */ 34 35 /*============================================================================ 36 *//** @file OMX_QCOMExtns.h 37 This header contains constants and type definitions that specify the 38 extensions added to the OpenMAX Vendor specific APIs. 39 40 *//*========================================================================*/ 41 42 43 /////////////////////////////////////////////////////////////////////////////// 44 // Include Files 45 /////////////////////////////////////////////////////////////////////////////// 46 #include "OMX_Core.h" 47 #include "OMX_Video.h" 48 #include "string.h" 49 #include "OMX_VideoExt.h" 50 51 #define OMX_VIDEO_MAX_HP_LAYERS 6 52 53 /** 54 * These MACROS used by Camera and Video to decide buffer count. 55 * This is to avoid mismatch of buffer count between Camera and Video. 56 * In Meta mode, read this count as buffer count in Camera and Header 57 * count in Video. 58 * 1) Number of buffers in Non-DCVS mode. 59 * 2) DCVS resolution. 60 * 3) Buffer count when Current resolution is greater than DCVS resolution 61 * defined in 2) 62 */ 63 64 #define OMX_VIDEO_MIN_CAMERA_BUFFERS 9 65 #define OMX_VIDEO_ENC_DCVS_RESOLUTION 3840 * 2160 66 #define OMX_VIDEO_MIN_CAMERA_BUFFERS_DCVS 11 67 68 /** 69 * This count indicates the number of Ints in the legacy Camera payload 70 * used for HAL1 71 */ 72 73 #define VIDEO_METADATA_NUM_COMMON_INTS 1 74 75 /** 76 * This extension is used to register mapping of a virtual 77 * address to a physical address. This extension is a parameter 78 * which can be set using the OMX_SetParameter macro. The data 79 * pointer corresponding to this extension is 80 * OMX_QCOM_MemMapEntry. This parameter is a 'write only' 81 * parameter (Current value cannot be queried using 82 * OMX_GetParameter macro). 83 */ 84 #define OMX_QCOM_EXTN_REGISTER_MMAP "OMX.QCOM.index.param.register_mmap" 85 86 /** 87 * This structure describes the data pointer corresponding to 88 * the OMX_QCOM_MMAP_REGISTER_EXTN extension. This parameter 89 * must be set only 'after' populating a port with a buffer 90 * using OMX_UseBuffer, wherein the data pointer of the buffer 91 * corresponds to the virtual address as specified in this 92 * structure. 93 */ 94 struct OMX_QCOM_PARAM_MEMMAPENTRYTYPE 95 { 96 OMX_U32 nSize; /** Size of the structure in bytes */ 97 OMX_VERSIONTYPE nVersion; /**< OMX specification version information */ 98 OMX_U32 nPortIndex; /**< Port number the structure applies to */ 99 100 /** 101 * The virtual address of memory block 102 */ 103 OMX_U64 nVirtualAddress; 104 105 /** 106 * The physical address corresponding to the virtual address. The physical 107 * address is contiguous for the entire valid range of the virtual 108 * address. 109 */ 110 OMX_U64 nPhysicalAddress; 111 }; 112 113 #define QOMX_VIDEO_IntraRefreshRandom (OMX_VIDEO_IntraRefreshVendorStartUnused + 0) 114 115 /* This error event is used for H.264 long-term reference (LTR) encoding. 116 * When IL client specifies an LTR frame with its identifier via 117 * OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE to the encoder, if the specified 118 * LTR frame can not be located by the encoder in its LTR list, the encoder 119 * issues this error event to IL client to notify the failure of LTRUse config. 120 */ 121 #define QOMX_ErrorLTRUseFailed (OMX_ErrorVendorStartUnused + 1) 122 123 /* 124 * This rate control will be used for low bitrate applications to get better 125 * video quality for a given bitrate. 126 */ 127 #define QOMX_Video_ControlRateMaxBitrate (OMX_Video_ControlRateVendorStartUnused + 1) 128 129 #define QOMX_Video_ControlRateMaxBitrateSkipFrames (OMX_Video_ControlRateVendorStartUnused + 2) 130 131 #define QOMX_VIDEO_BUFFERFLAG_BFRAME 0x00100000 132 133 #define QOMX_VIDEO_BUFFERFLAG_EOSEQ 0x00200000 134 135 #define QOMX_VIDEO_BUFFERFLAG_MBAFF 0x00400000 136 137 #define QOMX_VIDEO_BUFFERFLAG_CANCEL 0x00800000 138 139 #define OMX_QCOM_PORTDEFN_EXTN "OMX.QCOM.index.param.portdefn" 140 /* Allowed APIs on the above Index: OMX_GetParameter() and OMX_SetParameter() */ 141 142 /* 143 * VT Driver Version Number definition 144 * Hexa Decimal: 0xPPPPYYMM 145 * PPPP [2 Bytes] - Product ID 146 * YY [1 Byte ] - Year (last two digits of year {00..99}) 147 * MM [1 Byte ] - Month (01..12) 148 */ 149 #define VT_DRIVER_VERSION 0x1FD6120A 150 151 typedef enum OMX_QCOMMemoryRegion 152 { 153 OMX_QCOM_MemRegionInvalid, 154 OMX_QCOM_MemRegionEBI1, 155 OMX_QCOM_MemRegionSMI, 156 OMX_QCOM_MemRegionMax = 0X7FFFFFFF 157 } OMX_QCOMMemoryRegion; 158 159 typedef enum OMX_QCOMCacheAttr 160 { 161 OMX_QCOM_CacheAttrNone, 162 OMX_QCOM_CacheAttrWriteBack, 163 OMX_QCOM_CacheAttrWriteThrough, 164 OMX_QCOM_CacheAttrMAX = 0X7FFFFFFF 165 } OMX_QCOMCacheAttr; 166 167 typedef struct OMX_QCOMRectangle 168 { 169 OMX_S32 x; 170 OMX_S32 y; 171 OMX_S32 dx; 172 OMX_S32 dy; 173 } OMX_QCOMRectangle; 174 175 /** OMX_QCOMFramePackingFormat 176 * Input or output buffer format 177 */ 178 typedef enum OMX_QCOMFramePackingFormat 179 { 180 /* 0 - unspecified 181 */ 182 OMX_QCOM_FramePacking_Unspecified, 183 184 /* 1 - Partial frames may be present OMX IL 1.1.1 Figure 2-10: 185 * Case 1??Each Buffer Filled In Whole or In Part 186 */ 187 OMX_QCOM_FramePacking_Arbitrary, 188 189 /* 2 - Multiple complete frames per buffer (integer number) 190 * OMX IL 1.1.1 Figure 2-11: Case 2-Each Buffer Filled with 191 * Only Complete Frames of Data 192 */ 193 OMX_QCOM_FramePacking_CompleteFrames, 194 195 /* 3 - Only one complete frame per buffer, no partial frame 196 * OMX IL 1.1.1 Figure 2-12: Case 3-Each Buffer Filled with 197 * Only One Frame of Compressed Data. Usually at least one 198 * complete unit of data will be delivered in a buffer for 199 * uncompressed data formats. 200 */ 201 OMX_QCOM_FramePacking_OnlyOneCompleteFrame, 202 203 /* 4 - Only one complete subframe per buffer, no partial subframe 204 * Example: In H264, one complete NAL per buffer, where one frame 205 * can contatin multiple NAL 206 */ 207 OMX_QCOM_FramePacking_OnlyOneCompleteSubFrame, 208 209 OMX_QCOM_FramePacking_MAX = 0X7FFFFFFF 210 } OMX_QCOMFramePackingFormat; 211 212 typedef struct OMX_QCOM_PARAM_PORTDEFINITIONTYPE { 213 OMX_U32 nSize; /** Size of the structure in bytes */ 214 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 215 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 216 217 /** Platform specific memory region EBI1, SMI, etc.,*/ 218 OMX_QCOMMemoryRegion nMemRegion; 219 220 OMX_QCOMCacheAttr nCacheAttr; /** Cache attributes */ 221 222 /** Input or output buffer format */ 223 OMX_U32 nFramePackingFormat; 224 225 } OMX_QCOM_PARAM_PORTDEFINITIONTYPE; 226 227 typedef struct OMX_QCOM_VIDEO_CONFIG_QP { 228 OMX_U32 nSize; 229 OMX_VERSIONTYPE nVersion; 230 OMX_U32 nPortIndex; 231 OMX_U32 nQP; 232 } OMX_QCOM_VIDEO_CONFIG_QP; 233 234 typedef struct OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE { 235 OMX_U32 nSize; 236 OMX_VERSIONTYPE nVersion; 237 OMX_U32 nPortIndex; 238 OMX_U32 minIQP; 239 OMX_U32 maxIQP; 240 OMX_U32 minPQP; 241 OMX_U32 maxPQP; 242 OMX_U32 minBQP; 243 OMX_U32 maxBQP; 244 } OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE; 245 246 #define OMX_QCOM_PLATFORMPVT_EXTN "OMX.QCOM.index.param.platformprivate" 247 /** Allowed APIs on the above Index: OMX_SetParameter() */ 248 249 typedef enum OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE 250 { 251 /** Enum for PMEM information */ 252 OMX_QCOM_PLATFORM_PRIVATE_PMEM = 0x1 253 } OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE; 254 255 /** IL client will set the following structure. A failure 256 * code will be returned if component does not support the 257 * value provided for 'type'. 258 */ 259 struct OMX_QCOM_PLATFORMPRIVATE_EXTN 260 { 261 OMX_U32 nSize; /** Size of the structure in bytes */ 262 OMX_VERSIONTYPE nVersion; /** OMX spec version information */ 263 OMX_U32 nPortIndex; /** Port number on which usebuffer extn is applied */ 264 265 /** Type of extensions should match an entry from 266 OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE 267 */ 268 OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type; 269 }; 270 271 typedef struct OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO 272 { 273 /** pmem file descriptor */ 274 unsigned long pmem_fd; 275 #ifdef USE_GBM 276 unsigned long pmeta_fd; 277 #endif 278 /** Offset from pmem device base address */ 279 OMX_U32 offset; 280 OMX_U32 size; 281 OMX_U32 mapped_size; 282 OMX_PTR buffer; 283 }OMX_QCOM_PLATFORM_PRIVATE_PMEM_INFO; 284 285 typedef struct OMX_QCOM_PLATFORM_PRIVATE_ENTRY 286 { 287 /** Entry type */ 288 OMX_QCOM_PLATFORM_PRIVATE_ENTRY_TYPE type; 289 290 /** Pointer to platform specific entry */ 291 OMX_PTR entry; 292 }OMX_QCOM_PLATFORM_PRIVATE_ENTRY; 293 294 typedef struct OMX_QCOM_PLATFORM_PRIVATE_LIST 295 { 296 /** Number of entries */ 297 OMX_U32 nEntries; 298 299 /** Pointer to array of platform specific entries * 300 * Contiguous block of OMX_QCOM_PLATFORM_PRIVATE_ENTRY element 301 */ 302 OMX_QCOM_PLATFORM_PRIVATE_ENTRY* entryList; 303 }OMX_QCOM_PLATFORM_PRIVATE_LIST; 304 305 #define OMX_QCOM_FRAME_PACKING_FORMAT "OMX.QCOM.index.param.framepackfmt" 306 /* Allowed API call: OMX_GetParameter() */ 307 /* IL client can use this index to rerieve the list of frame formats * 308 * supported by the component */ 309 310 typedef struct OMX_QCOM_FRAME_PACKINGFORMAT_TYPE { 311 OMX_U32 nSize; 312 OMX_VERSIONTYPE nVersion; 313 OMX_U32 nPortIndex; 314 OMX_U32 nIndex; 315 OMX_QCOMFramePackingFormat eframePackingFormat; 316 } OMX_QCOM_FRAME_PACKINGFORMAT_TYPE; 317 318 319 /** 320 * Following is the enum for color formats supported on Qualcomm 321 * MSMs YVU420SemiPlanar color format is not defined in OpenMAX 322 * 1.1.1 and prior versions of OpenMAX specification. 323 */ 324 325 enum OMX_QCOM_COLOR_FORMATTYPE 326 { 327 328 /** YVU420SemiPlanar: YVU planar format, organized with a first 329 * plane containing Y pixels, and a second plane containing 330 * interleaved V and U pixels. V and U pixels are sub-sampled 331 * by a factor of two both horizontally and vertically. 332 */ 333 QOMX_COLOR_FormatYVU420SemiPlanar = 0x7FA30C00, 334 QOMX_COLOR_FormatYVU420PackedSemiPlanar32m4ka, 335 QOMX_COLOR_FormatYUV420PackedSemiPlanar16m2ka, 336 QOMX_COLOR_FormatYUV420PackedSemiPlanar64x32Tile2m8ka, 337 QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m, 338 QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mMultiView, 339 QOMX_COLOR_FORMATYUV420PackedSemiPlanar32mCompressed, 340 QOMX_COLOR_Format32bitRGBA8888, 341 QOMX_COLOR_Format32bitRGBA8888Compressed, 342 QOMX_COLOR_FORMATYUV420PackedSemiPlanar32m10bitCompressed, 343 QOMX_COLOR_FORMATYUV420SemiPlanarP010Venus, 344 QOMX_COLOR_FormatAndroidOpaque = (OMX_COLOR_FORMATTYPE) OMX_COLOR_FormatVendorStartUnused + 0x789, 345 }; 346 347 enum OMX_QCOM_VIDEO_CODINGTYPE 348 { 349 /** Codecs support by qualcomm which are not listed in OMX 1.1.x 350 * spec 351 * */ 352 OMX_QCOM_VIDEO_CodingVC1 = 0x7FA30C00 , 353 OMX_QCOM_VIDEO_CodingWMV9 = 0x7FA30C01, 354 QOMX_VIDEO_CodingDivx = 0x7FA30C02, /**< Value when coding is Divx */ 355 QOMX_VIDEO_CodingSpark = 0x7FA30C03, /**< Value when coding is Sorenson Spark */ 356 QOMX_VIDEO_CodingVp = 0x7FA30C04, 357 QOMX_VIDEO_CodingVp8 = OMX_VIDEO_CodingVP8, /**< keeping old enum for backwards compatibility*/ 358 QOMX_VIDEO_CodingHevc = OMX_VIDEO_CodingHEVC, /**< keeping old enum for backwards compatibility*/ 359 QOMX_VIDEO_CodingMVC = 0x7FA30C07, 360 QOMX_VIDEO_CodingVp9 = OMX_VIDEO_CodingVP9, /**< keeping old enum for backwards compatibility*/ 361 QOMX_VIDEO_CodingTME = 0x7FA30C09, 362 QOMX_VIDEO_CodingImageHeic = OMX_VIDEO_CodingImageHEIC, 363 }; 364 365 enum OMX_QCOM_EXTN_INDEXTYPE 366 { 367 /** Qcom proprietary extension index list */ 368 369 /* "OMX.QCOM.index.param.register_mmap" */ 370 OMX_QcomIndexRegmmap = 0x7F000000, 371 372 /* "OMX.QCOM.index.param.platformprivate" */ 373 OMX_QcomIndexPlatformPvt = 0x7F000001, 374 375 /* "OMX.QCOM.index.param.portdefn" */ 376 OMX_QcomIndexPortDefn = 0x7F000002, 377 378 /* "OMX.QCOM.index.param.framepackingformat" */ 379 OMX_QcomIndexPortFramePackFmt = 0x7F000003, 380 381 /*"OMX.QCOM.index.param.Interlaced */ 382 OMX_QcomIndexParamInterlaced = 0x7F000004, 383 384 /*"OMX.QCOM.index.config.interlaceformat */ 385 OMX_QcomIndexConfigInterlaced = 0x7F000005, 386 387 /*"OMX.QCOM.index.param.syntaxhdr" */ 388 QOMX_IndexParamVideoSyntaxHdr = 0x7F000006, 389 390 /*"OMX.QCOM.index.config.intraperiod" */ 391 QOMX_IndexConfigVideoIntraperiod = 0x7F000007, 392 393 /*"OMX.QCOM.index.config.randomIntrarefresh" */ 394 QOMX_IndexConfigVideoIntraRefresh = 0x7F000008, 395 396 /*"OMX.QCOM.index.config.video.TemporalSpatialTradeOff" */ 397 QOMX_IndexConfigVideoTemporalSpatialTradeOff = 0x7F000009, 398 399 /*"OMX.QCOM.index.param.video.EncoderMode" */ 400 QOMX_IndexParamVideoEncoderMode = 0x7F00000A, 401 402 /*"OMX.QCOM.index.param.Divxtype */ 403 OMX_QcomIndexParamVideoDivx = 0x7F00000B, 404 405 /*"OMX.QCOM.index.param.Sparktype */ 406 OMX_QcomIndexParamVideoSpark = 0x7F00000C, 407 408 /*"OMX.QCOM.index.param.Vptype */ 409 OMX_QcomIndexParamVideoVp = 0x7F00000D, 410 411 OMX_QcomIndexQueryNumberOfVideoDecInstance = 0x7F00000E, 412 413 OMX_QcomIndexParamVideoSyncFrameDecodingMode = 0x7F00000F, 414 415 OMX_QcomIndexParamVideoDecoderPictureOrder = 0x7F000010, 416 417 /* "OMX.QCOM.index.config.video.FramePackingInfo" */ 418 OMX_QcomIndexConfigVideoFramePackingArrangement = 0x7F000011, 419 420 OMX_QcomIndexParamConcealMBMapExtraData = 0x7F000012, 421 422 OMX_QcomIndexParamFrameInfoExtraData = 0x7F000013, 423 424 OMX_QcomIndexParamInterlaceExtraData = 0x7F000014, 425 426 OMX_QcomIndexParamH264TimeInfo = 0x7F000015, 427 428 OMX_QcomIndexParamIndexExtraDataType = 0x7F000016, 429 430 OMX_GoogleAndroidIndexEnableAndroidNativeBuffers = 0x7F000017, 431 432 OMX_GoogleAndroidIndexUseAndroidNativeBuffer = 0x7F000018, 433 434 OMX_GoogleAndroidIndexGetAndroidNativeBufferUsage = 0x7F000019, 435 436 /*"OMX.QCOM.index.param.EnableTimeStampReoder"*/ 437 OMX_QcomIndexParamEnableTimeStampReorder = 0x7F00001B, 438 439 /*"OMX.google.android.index.storeMetaDataInBuffers"*/ 440 OMX_QcomIndexParamVideoMetaBufferMode = 0x7F00001C, 441 442 /*"OMX.google.android.index.useAndroidNativeBuffer2"*/ 443 OMX_GoogleAndroidIndexUseAndroidNativeBuffer2 = 0x7F00001D, 444 445 /*"OMX.QCOM.index.param.VideoMaxAllowedBitrateCheck"*/ 446 OMX_QcomIndexParamVideoMaxAllowedBitrateCheck = 0x7F00001E, 447 448 OMX_QcomIndexEnableSliceDeliveryMode = 0x7F00001F, 449 450 /* "OMX.QCOM.index.param.video.ExtnUserExtraData" */ 451 OMX_QcomIndexEnableExtnUserData = 0x7F000020, 452 453 /*"OMX.QCOM.index.param.video.EnableSmoothStreaming"*/ 454 OMX_QcomIndexParamEnableSmoothStreaming = 0x7F000021, 455 456 OMX_QcomIndexEnableH263PlusPType = 0x7F000023, 457 458 /*"OMX.QCOM.index.param.video.LTRCount"*/ 459 QOMX_IndexParamVideoLTRCount = 0x7F000026, 460 461 /*"OMX.QCOM.index.config.video.LTRUse"*/ 462 QOMX_IndexConfigVideoLTRUse = 0x7F000028, 463 464 /*"OMX.QCOM.index.config.video.LTRMark"*/ 465 QOMX_IndexConfigVideoLTRMark = 0x7F000029, 466 467 /* OMX.google.android.index.prependSPSPPSToIDRFrames */ 468 OMX_QcomIndexParamSequenceHeaderWithIDR = 0x7F00002A, 469 470 OMX_QcomIndexParamAUDelimiter = 0x7F00002B, 471 472 OMX_QcomIndexParamVideoDownScalar = 0x7F00002C, 473 474 /* "OMX.QCOM.index.param.video.FramePackingExtradata" */ 475 OMX_QcomIndexParamVideoFramePackingExtradata = 0x7F00002D, 476 477 /* "OMX.QCOM.index.config.activeregiondetection" */ 478 OMX_QcomIndexConfigActiveRegionDetection = 0x7F00002E, 479 480 /* "OMX.QCOM.index.config.activeregiondetectionstatus" */ 481 OMX_QcomIndexConfigActiveRegionDetectionStatus = 0x7F00002F, 482 483 /* "OMX.QCOM.index.config.scalingmode" */ 484 OMX_QcomIndexConfigScalingMode = 0x7F000030, 485 486 /* "OMX.QCOM.index.config.noisereduction" */ 487 OMX_QcomIndexConfigNoiseReduction = 0x7F000031, 488 489 /* "OMX.QCOM.index.config.imageenhancement" */ 490 OMX_QcomIndexConfigImageEnhancement = 0x7F000032, 491 492 /* google smooth-streaming support */ 493 OMX_QcomIndexParamVideoAdaptivePlaybackMode = 0x7F000033, 494 495 /* H.264 MVC codec index */ 496 QOMX_IndexParamVideoMvc = 0x7F000034, 497 498 /* "OMX.QCOM.index.param.video.QPExtradata" */ 499 OMX_QcomIndexParamVideoQPExtraData = 0x7F000035, 500 501 /* "OMX.QCOM.index.param.video.InputBitsInfoExtradata" */ 502 OMX_QcomIndexParamVideoInputBitsInfoExtraData = 0x7F000036, 503 504 /* VP8 Hierarchical P support */ 505 OMX_QcomIndexHierarchicalStructure = 0x7F000037, 506 507 OMX_QcomIndexParamH264VUITimingInfo = 0x7F000039, 508 509 OMX_QcomIndexParamPeakBitrate = 0x7F00003A, 510 511 /* Enable InitialQP : QOMX_EXTNINDEX_VIDEO_INITIALQP */ 512 QOMX_IndexParamVideoInitialQp = 0x7F00003B, 513 514 OMX_QcomIndexParamSetMVSearchrange = 0x7F00003C, 515 516 /* Note: This will get deprecated */ 517 OMX_QcomIndexConfigPerfLevel = 0x7F00003D, 518 519 /*"OMX.QCOM.index.param.video.LTRCount"*/ 520 OMX_QcomIndexParamVideoLTRCount = QOMX_IndexParamVideoLTRCount, 521 522 /*"OMX.QCOM.index.config.video.LTRUse"*/ 523 OMX_QcomIndexConfigVideoLTRUse = QOMX_IndexConfigVideoLTRUse, 524 525 /*"OMX.QCOM.index.config.video.LTRMark"*/ 526 OMX_QcomIndexConfigVideoLTRMark = QOMX_IndexConfigVideoLTRMark, 527 528 /*"OMX.QCOM.index.param.video.CustomBufferSize"*/ 529 OMX_QcomIndexParamVideoCustomBufferSize = 0x7F00003E, 530 531 /* Max Hierarchical P layers */ 532 OMX_QcomIndexMaxHierarchicallayers = 0x7F000041, 533 534 OMX_QcomIndexFlexibleYUVDescription = 0x7F000044, 535 536 /* Vpp Hqv Control Type */ 537 OMX_QcomIndexParamVppHqvControl = 0x7F000045, 538 539 /* Enable VPP */ 540 OMX_QcomIndexParamEnableVpp = 0x7F000046, 541 542 /* MBI statistics mode */ 543 OMX_QcomIndexParamMBIStatisticsMode = 0x7F000047, 544 545 /* Set PictureTypeDecode */ 546 OMX_QcomIndexConfigPictureTypeDecode = 0x7F000048, 547 548 OMX_QcomIndexConfigH264EntropyCodingCabac = 0x7F000049, 549 550 /* "OMX.QCOM.index.param.video.InputBatch" */ 551 OMX_QcomIndexParamBatchSize = 0x7F00004A, 552 553 OMX_QcomIndexConfigNumHierPLayers = 0x7F00004B, 554 555 OMX_QcomIndexConfigRectType = 0x7F00004C, 556 557 OMX_QcomIndexConfigBaseLayerId = 0x7F00004E, 558 559 OMX_QcomIndexParamDriverVersion = 0x7F00004F, 560 561 /* Reference : OMX_QCOM_VIDEO_CONFIG_QP */ 562 OMX_QcomIndexConfigQp = 0x7F000050, 563 564 OMX_QcomIndexParamVencAspectRatio = 0x7F000051, 565 566 OMX_QTIIndexParamVQZipSEIExtraData = 0x7F000052, 567 568 /* Enable VQZIP SEI NAL type */ 569 OMX_QTIIndexParamVQZIPSEIType = 0x7F000053, 570 571 OMX_QTIIndexParamPassInputBufferFd = 0x7F000054, 572 573 /* Set Prefer-adaptive playback*/ 574 /* "OMX.QTI.index.param.video.PreferAdaptivePlayback" */ 575 OMX_QTIIndexParamVideoPreferAdaptivePlayback = 0x7F000055, 576 577 /* Set time params */ 578 OMX_QTIIndexConfigSetTimeData = 0x7F000056, 579 /* Force Compressed format for DPB when resolution <=1080p 580 * and OPB is cpu_access */ 581 /* OMX.QTI.index.param.video.ForceCompressedForDPB */ 582 OMX_QTIIndexParamForceCompressedForDPB = 0x7F000057, 583 584 /* Enable ROI info */ 585 OMX_QTIIndexParamVideoEnableRoiInfo = 0x7F000058, 586 587 /* Configure ROI info */ 588 OMX_QTIIndexConfigVideoRoiInfo = 0x7F000059, 589 590 /* Set Low Latency Mode */ 591 OMX_QTIIndexParamLowLatencyMode = 0x7F00005B, 592 593 /* Force OPB to UnCompressed mode */ 594 OMX_QTIIndexParamForceUnCompressedForOPB = 0x7F00005C, 595 596 /* OMX.google.android.index.allocateNativeHandle */ 597 OMX_GoogleAndroidIndexAllocateNativeHandle = 0x7F00005D, 598 599 /* Configure BLUR resolution for encode */ 600 OMX_QTIIndexConfigVideoBlurResolution = 0x7F00005E, 601 602 /* QP range for I/P/B frames : OMX_QCOM_VIDEO_PARAM_IPB_QPRANGETYPE */ 603 OMX_QcomIndexParamVideoIPBQPRange = 0x7F00005F, 604 605 /* Enable client extradata */ 606 OMX_QTIIndexParamVideoClientExtradata = 0x7F000060, 607 608 /* H264 transform 8x8 mode */ 609 OMX_QcomIndexConfigH264Transform8x8 = 0x7F000061, 610 611 /*"OMX.google.android.index.describeColorAspects"*/ 612 OMX_QTIIndexConfigDescribeColorAspects = 0x7F000062, 613 614 OMX_QTIIndexParamVUIExtraDataExtraData = 0x7F000063, 615 616 OMX_QTIIndexParamMPEG2SeqDispExtraData = 0x7F000064, 617 618 OMX_QTIIndexParamVC1SeqDispExtraData = 0x7F000065, 619 620 OMX_QTIIndexParamVPXColorSpaceExtraData = 0x7F000066, 621 622 /*"OMX.google.android.index.describeHDRStaticInfo"*/ 623 OMX_QTIIndexConfigDescribeHDRColorInfo = 0x7F000067, 624 625 /* Configure to disable PQ*/ 626 OMX_QTIIndexParamDisablePQ = 0x7F000068, 627 628 /* Dither control for 10bit */ 629 OMX_QTIIndexParamDitherControl = 0x7F000069, 630 631 /* Suggest how big Iframe sizes should be */ 632 OMX_QTIIndexParamIframeSizeType = 0x7F000070, 633 634 /* use av-timer ticks as timestamp (used by VT-client) */ 635 OMX_QTIIndexParamEnableAVTimerTimestamps = 0x7F000071, 636 637 /* Output Crop extradata (includes MISR) */ 638 OMX_QcomIndexParamOutputCropExtraData = 0x7F000072, 639 640 /* Controlled Input queue mode for frame accurate configuration */ 641 OMX_QcomIndexParamVencControlInputQueue = 0x7F000073, 642 643 /** 644 * Configure Slice Header Spacing 645 * This index will be used to configure both byte based 646 * and MB based slice header spacing. This is the preferred 647 * alternative to OMX_IndexParamVideoAvc (for MB based) 648 * and OMX_IndexParamVideoErrorCorrection (for byte based) 649 */ 650 OMX_QcomIndexParamVideoSliceSpacing = 0x7F000074, 651 652 /* OMX.QTI.index.config.video.getdsmode */ 653 OMX_QTIIndexConfigGetDSMode = 0x7F000075, 654 655 /* 656 * Client configured profile and level for sufficiency 657 * This index will be set by the OMX client which will 658 * specify profile and level of the clip upto which 659 * buffer sufficiency should be considered. if the profile 660 * or level of the clip exceeds the client specified 661 * profile and level via this index, sufficient buffer 662 * events will be converted to insufficient. 663 * Structure to be used for this extension is: 664 * typedef struct OMX_VIDEO_PARAM_PROFILELEVELTYPE { 665 * OMX_U32 nSize; 666 * OMX_VERSIONTYPE nVersion; 667 * OMX_U32 nPortIndex; 668 * OMX_U32 eProfile; 669 * OMX_U32 eLevel; 670 * OMX_U32 nProfileIndex; // index not needed 671 * } OMX_VIDEO_PARAM_PROFILELEVELTYPE; 672 */ 673 OMX_QTIIndexParamClientConfiguredProfileLevelForSufficiency = 0x7F000076, 674 675 /* TME configuration */ 676 OMX_IndexParamVideoTme = 0x7F000077, 677 678 /* Set Color Space Conversion */ 679 OMX_QTIIndexParamColorSpaceConversion = 0x7F000078, 680 681 /* Enable linear color format */ 682 OMX_QTIIndexParamEnableLinearColorFormat = 0x7F000079, 683 684 /* Enable Blur */ 685 OMX_QTIIndexParamVideoEnableBlur = 0x7F00007A, 686 687 /* Capabilities */ 688 OMX_QTIIndexParamCapabilitiesVTDriverVersion = 0x7F100000, 689 690 OMX_QTIIndexParamCapabilitiesMaxTemporalLayers = 0x7F100001, 691 692 OMX_QTIIndexParamCapabilitiesMaxLTR = 0x7F100002, 693 694 OMX_QTIIndexParamCapabilitiesMaxDownScaleRatio = 0x7F100003, 695 696 OMX_QTIIndexParamCapabilitiesRotationSupport = 0x7F100004, 697 698 OMX_QTIIndexParamCapabilitiesBlurSupport = 0x7F100005, 699 700 OMX_QTIIndexParamCapabilitiesColorSpaceConversionSupport = 0x7F100006, 701 702 /* Configure Rectangle Region based ROI info */ 703 OMX_QTIIndexConfigVideoRoiRectRegionInfo = 0x7F100007, 704 705 OMX_QTIIndexParamNativeRecorder = 0x7F100008, 706 707 OMX_QTIIndexParamVideoDecoderOutputFrameRate = 0x7F100009, 708 /*"OMX.google.android.index.describeHDR10PlusInfo"*/ 709 OMX_QTIIndexConfigDescribeHDR10PlusInfo = 0x7F10000a, 710 }; 711 712 /** 713 * This is custom extension to configure Low Latency Mode. 714 * 715 * STRUCT MEMBERS 716 * 717 * nSize : Size of Structure in bytes 718 * nVersion : OpenMAX IL specification version information 719 * bEnableLowLatencyMode : Enable/Disable Low Latency mode 720 * nNumFrames : Latency in terms of num of frames 721 * 0: Minimum possible latency, 722 * n: n-frame latency 723 * Valid when bEnableLowLatencyMode is TRUE 724 */ 725 726 typedef struct QOMX_EXTNINDEX_VIDEO_LOW_LATENCY_MODE 727 { 728 OMX_U32 nSize; 729 OMX_VERSIONTYPE nVersion; 730 OMX_BOOL bEnableLowLatencyMode; 731 OMX_U32 nNumFrames; 732 } QOMX_EXTNINDEX_VIDEO_LOW_LATENCY_MODE; 733 734 /** 735 * This is custom extension to configure Encoder Aspect Ratio. 736 * 737 * STRUCT MEMBERS 738 * 739 * nSize : Size of Structure in bytes 740 * nVersion : OpenMAX IL specification version information 741 * nSARWidth : Horizontal aspect size 742 * nSARHeight : Vertical aspect size 743 */ 744 745 typedef struct QOMX_EXTNINDEX_VIDEO_VENC_SAR 746 { 747 OMX_U32 nSize; 748 OMX_VERSIONTYPE nVersion; 749 OMX_U32 nSARWidth; 750 OMX_U32 nSARHeight; 751 } QOMX_EXTNINDEX_VIDEO_VENC_SAR; 752 753 /** 754 * This is custom extension to configure Hier-p layers. 755 * This mode configures Hier-p layers dynamically. 756 * 757 * STRUCT MEMBERS 758 * 759 * nSize : Size of Structure in bytes 760 * nVersion : OpenMAX IL specification version information 761 * nNumHierLayers: Set the number of Hier-p layers for the session 762 * - This should be less than the MAX Hier-P 763 * layers set for the session. 764 */ 765 766 typedef struct QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS { 767 OMX_U32 nSize; 768 OMX_VERSIONTYPE nVersion; 769 OMX_U32 nNumHierLayers; 770 } QOMX_EXTNINDEX_VIDEO_HIER_P_LAYERS; 771 772 /** 773 * Initial QP parameter. This structure is used to enable 774 * vendor specific extension to let client enable setting 775 * initial QP values to I P B Frames 776 * 777 * STRUCT MEMBERS: 778 * nSize : Size of Structure in bytes 779 * nVersion : OpenMAX IL specification version information 780 * nPortIndex : Index of the port to which this structure applies 781 * OMX_U32 nQpI : First Iframe QP 782 * OMX_U32 nQpP : First Pframe QP 783 * OMX_U32 nQpB : First Bframe QP 784 * OMX_U32 bEnableInitQp : Bit field indicating which frame type(s) shall 785 * use the specified initial QP. 786 * Bit 0: Enable initial QP for I/IDR 787 * and use value specified in nInitQpI 788 * Bit 1: Enable initial QP for 789 * and use value specified in nInitQpP 790 * Bit 2: Enable initial QP for B 791 * and use value specified in nInitQpB 792 */ 793 typedef struct QOMX_EXTNINDEX_VIDEO_INITIALQP { 794 OMX_U32 nSize; 795 OMX_VERSIONTYPE nVersion; 796 OMX_U32 nPortIndex; 797 OMX_U32 nQpI; 798 OMX_U32 nQpP; 799 OMX_U32 nQpB; 800 OMX_U32 bEnableInitQp; 801 } QOMX_EXTNINDEX_VIDEO_INITIALQP; 802 803 /** 804 * Extension index parameter. This structure is used to enable 805 * vendor specific extension on input/output port and 806 * to pass the required flags and data, if any. 807 * The format of flags and data being passed is known to 808 * the client and component apriori. 809 * 810 * STRUCT MEMBERS: 811 * nSize : Size of Structure plus pData size 812 * nVersion : OMX specification version information 813 * nPortIndex : Indicates which port to set 814 * bEnable : Extension index enable (1) or disable (0) 815 * nFlags : Extension index flags, if any 816 * nDataSize : Size of the extension index data to follow 817 * pData : Extension index data, if present. 818 */ 819 typedef struct QOMX_EXTNINDEX_PARAMTYPE { 820 OMX_U32 nSize; 821 OMX_VERSIONTYPE nVersion; 822 OMX_U32 nPortIndex; 823 OMX_BOOL bEnable; 824 OMX_U32 nFlags; 825 OMX_U32 nDataSize; 826 OMX_PTR pData; 827 } QOMX_EXTNINDEX_PARAMTYPE; 828 829 /** 830 * Range index parameter. This structure is used to enable 831 * vendor specific extension on input/output port and 832 * to pass the required minimum and maximum values 833 * 834 * STRUCT MEMBERS: 835 * nSize : Size of Structure in bytes 836 * nVersion : OpenMAX IL specification version information 837 * nPortIndex : Index of the port to which this structure applies 838 * nMin : Minimum value 839 * nMax : Maximum value 840 * nSteSize : Step size 841 */ 842 typedef struct QOMX_EXTNINDEX_RANGETYPE { 843 OMX_U32 nSize; 844 OMX_VERSIONTYPE nVersion; 845 OMX_U32 nPortIndex; 846 OMX_S32 nMin; 847 OMX_S32 nMax; 848 OMX_S32 nStepSize; 849 } QOMX_EXTNINDEX_RANGETYPE; 850 851 /** 852 * LTR count index parameter. This structure is used 853 * to enable vendor specific extension on output port 854 * to pass the LTR count information. 855 * 856 * STRUCT MEMBERS: 857 * nSize : Size of Structure in bytes 858 * nVersion : OpenMAX IL specification version information 859 * nPortIndex : Index of the port to which this structure applies 860 * nCount : Specifies the number of LTR frames stored in the 861 * encoder component 862 */ 863 typedef struct QOMX_VIDEO_PARAM_LTRCOUNT_TYPE { 864 OMX_U32 nSize; 865 OMX_VERSIONTYPE nVersion; 866 OMX_U32 nPortIndex; 867 OMX_U32 nCount; 868 } QOMX_VIDEO_PARAM_LTRCOUNT_TYPE; 869 870 871 /** 872 * This should be used with OMX_QcomIndexParamVideoLTRCount extension. 873 */ 874 typedef QOMX_VIDEO_PARAM_LTRCOUNT_TYPE OMX_QCOM_VIDEO_PARAM_LTRCOUNT_TYPE; 875 876 /** 877 * Marks the next encoded frame as an LTR frame. 878 * STRUCT MEMBERS: 879 * nSize : Size of Structure in bytes 880 * nVersion : OpenMAX IL specification version information 881 * nPortIndex : Index of the port to which this structure applies 882 * nID : Specifies the identifier of the LTR frame to be marked 883 * as reference frame for encoding subsequent frames. 884 */ 885 typedef struct QOMX_VIDEO_CONFIG_LTRMARK_TYPE { 886 OMX_U32 nSize; 887 OMX_VERSIONTYPE nVersion; 888 OMX_U32 nPortIndex; 889 OMX_U32 nID; 890 } QOMX_VIDEO_CONFIG_LTRMARK_TYPE; 891 892 /** 893 * This should be used with OMX_QcomIndexConfigVideoLTRMark extension. 894 */ 895 typedef QOMX_VIDEO_CONFIG_LTRMARK_TYPE OMX_QCOM_VIDEO_CONFIG_LTRMARK_TYPE; 896 897 /** 898 * Specifies an LTR frame to encode subsequent frames. 899 * STRUCT MEMBERS: 900 * nSize : Size of Structure in bytes 901 * nVersion : OpenMAX IL specification version information 902 * nPortIndex : Index of the port to which this structure applies 903 * nID : Specifies the identifier of the LTR frame to be used 904 as reference frame for encoding subsequent frames. 905 * nFrames : Specifies the number of subsequent frames to be 906 encoded using the LTR frame with its identifier 907 nID as reference frame. Short-term reference frames 908 will be used thereafter. The value of 0xFFFFFFFF 909 indicates that all subsequent frames will be 910 encodedusing this LTR frame as reference frame. 911 */ 912 typedef struct QOMX_VIDEO_CONFIG_LTRUSE_TYPE { 913 OMX_U32 nSize; 914 OMX_VERSIONTYPE nVersion; 915 OMX_U32 nPortIndex; 916 OMX_U32 nID; 917 OMX_U32 nFrames; 918 } QOMX_VIDEO_CONFIG_LTRUSE_TYPE; 919 920 /** 921 * This should be used with OMX_QcomIndexConfigVideoLTRUse extension. 922 */ 923 typedef QOMX_VIDEO_CONFIG_LTRUSE_TYPE OMX_QCOM_VIDEO_CONFIG_LTRUSE_TYPE; 924 925 /** 926 * Enumeration used to define the video encoder modes 927 * 928 * ENUMS: 929 * EncoderModeDefault : Default video recording mode. 930 * All encoder settings made through 931 * OMX_SetParameter/OMX_SetConfig are applied. No 932 * parameter is overridden. 933 * EncoderModeMMS : Video recording mode for MMS (Multimedia Messaging 934 * Service). This mode is similar to EncoderModeDefault 935 * except that here the Rate control mode is overridden 936 * internally and set as a variant of variable bitrate with 937 * variable frame rate. After this mode is set if the IL 938 * client tries to set OMX_VIDEO_CONTROLRATETYPE via 939 * OMX_IndexParamVideoBitrate that would be rejected. For 940 * this, client should set mode back to EncoderModeDefault 941 * first and then change OMX_VIDEO_CONTROLRATETYPE. 942 */ 943 typedef enum QOMX_VIDEO_ENCODERMODETYPE 944 { 945 QOMX_VIDEO_EncoderModeDefault = 0x00, 946 QOMX_VIDEO_EncoderModeMMS = 0x01, 947 QOMX_VIDEO_EncoderModeMax = 0x7FFFFFFF 948 } QOMX_VIDEO_ENCODERMODETYPE; 949 950 /** 951 * This structure is used to set the video encoder mode. 952 * 953 * STRUCT MEMBERS: 954 * nSize : Size of the structure in bytes 955 * nVersion : OMX specification version info 956 * nPortIndex : Port that this structure applies to 957 * nMode : defines the video encoder mode 958 */ 959 typedef struct QOMX_VIDEO_PARAM_ENCODERMODETYPE { 960 OMX_U32 nSize; 961 OMX_VERSIONTYPE nVersion; 962 OMX_U32 nPortIndex; 963 QOMX_VIDEO_ENCODERMODETYPE nMode; 964 } QOMX_VIDEO_PARAM_ENCODERMODETYPE; 965 966 /** 967 * This structure describes the parameters corresponding to the 968 * QOMX_VIDEO_SYNTAXHDRTYPE extension. This parameter can be queried 969 * during the loaded state. 970 */ 971 972 typedef struct QOMX_VIDEO_SYNTAXHDRTYPE 973 { 974 OMX_U32 nSize; /** Size of the structure in bytes */ 975 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 976 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 977 OMX_U32 nBytes; /** The number of bytes filled in to the buffer */ 978 OMX_U8 data[1]; /** Buffer to store the header information */ 979 } QOMX_VIDEO_SYNTAXHDRTYPE; 980 981 /** 982 * This structure describes the parameters corresponding to the 983 * QOMX_VIDEO_TEMPORALSPATIALTYPE extension. This parameter can be set 984 * dynamically during any state except the state invalid. This is primarily 985 * used for setting MaxQP from the application. This is set on the out port. 986 */ 987 988 typedef struct QOMX_VIDEO_TEMPORALSPATIALTYPE 989 { 990 OMX_U32 nSize; /** Size of the structure in bytes */ 991 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 992 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 993 OMX_U32 nTSFactor; /** Temoral spatial tradeoff factor value in 0-100 */ 994 } QOMX_VIDEO_TEMPORALSPATIALTYPE; 995 996 /** 997 * This structure describes the parameters corresponding to the 998 * OMX_QCOM_VIDEO_CONFIG_INTRAPERIODTYPE extension. This parameter can be set 999 * dynamically during any state except the state invalid. This is set on the out port. 1000 */ 1001 1002 typedef struct QOMX_VIDEO_INTRAPERIODTYPE 1003 { 1004 OMX_U32 nSize; /** Size of the structure in bytes */ 1005 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 1006 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 1007 OMX_U32 nIDRPeriod; /** This specifies coding a frame as IDR after every nPFrames 1008 of intra frames. If this parameter is set to 0, only the 1009 first frame of the encode session is an IDR frame. This 1010 field is ignored for non-AVC codecs and is used only for 1011 codecs that support IDR Period */ 1012 OMX_U32 nPFrames; /** The number of "P" frames between two "I" frames */ 1013 OMX_U32 nBFrames; /** The number of "B" frames between two "I" frames */ 1014 } QOMX_VIDEO_INTRAPERIODTYPE; 1015 1016 /** 1017 * This structure describes the parameters corresponding to the 1018 * OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE extension. This parameter can be set 1019 * dynamically during any state except the state invalid. This is used for the buffer negotiation 1020 * with other clients. This is set on the out port. 1021 */ 1022 typedef struct OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE 1023 { 1024 OMX_U32 nSize; /** Size of the structure in bytes */ 1025 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1026 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 1027 OMX_U32 nBufferOccupancy; /** The number of bytes to be set for the buffer occupancy */ 1028 } OMX_QCOM_VIDEO_CONFIG_ULBUFFEROCCUPANCYTYPE; 1029 1030 /** 1031 * This structure describes the parameters corresponding to the 1032 * OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE extension. This parameter can be set 1033 * dynamically during any state except the state invalid. This is primarily used for the dynamic/random 1034 * intrarefresh. This is set on the out port. 1035 */ 1036 typedef struct OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE 1037 { 1038 OMX_U32 nSize; /** Size of the structure in bytes */ 1039 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 1040 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 1041 OMX_U32 nRirMBs; /** The number of MBs to be set for intrarefresh */ 1042 } OMX_QCOM_VIDEO_CONFIG_RANDOMINTRAREFRESHTYPE; 1043 1044 /** 1045 * This structure describes the parameters for the 1046 * OMX_QcomIndexParamAUDelimiter extension. It enables/disables 1047 * the AU delimiters in H264/HEVC stream. 1048 */ 1049 typedef struct OMX_QCOM_VIDEO_CONFIG_AUD 1050 { 1051 OMX_U32 nSize; /** Size of the structure in bytes */ 1052 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 1053 OMX_BOOL bEnable; /** Enable/disable the setting */ 1054 } OMX_QCOM_VIDEO_CONFIG_AUD; 1055 1056 #define QOMX_VIDEO_HIGH_PERF_OPERATING_MODE (0x7FFFFFFF) 1057 1058 /** 1059 * Note: This will get deprecated 1060 */ 1061 typedef enum QOMX_VIDEO_PERF_LEVEL 1062 { 1063 OMX_QCOM_PerfLevelNominal, 1064 OMX_QCOM_PerfLevelTurbo 1065 } QOMX_VIDEO_PERF_LEVEL; 1066 1067 /** 1068 * This structure describes the parameters corresponding 1069 * to OMX_QcomIndexParamPerfLevel extension. It will set 1070 * the performance mode specified as QOMX_VIDEO_PERF_LEVEL. 1071 * Note: This will get deprecated 1072 */ 1073 typedef struct OMX_QCOM_VIDEO_PARAM_PERF_LEVEL { 1074 OMX_U32 nSize; /** Size of the structure in bytes */ 1075 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1076 QOMX_VIDEO_PERF_LEVEL ePerfLevel; /** Performance level */ 1077 } OMX_QCOM_VIDEO_PARAM_PERF_LEVEL; 1078 1079 /** 1080 * This structure describes the parameters corresponding 1081 * to OMX_QcomIndexConfigPerfLevel extension. It will set 1082 * the performance mode specified as QOMX_VIDEO_PERF_LEVEL. 1083 * Note: This will get deprecated 1084 */ 1085 typedef struct OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL { 1086 OMX_U32 nSize; /** Size of the structure in bytes */ 1087 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1088 QOMX_VIDEO_PERF_LEVEL ePerfLevel; /** Performance level */ 1089 } OMX_QCOM_VIDEO_CONFIG_PERF_LEVEL; 1090 1091 typedef enum QOMX_VIDEO_PICTURE_TYPE_DECODE 1092 { 1093 OMX_QCOM_PictypeDecode_IPB, 1094 OMX_QCOM_PictypeDecode_I 1095 } QOMX_VIDEO_PICTURE_TYPE_DECODE; 1096 1097 /** 1098 * This structure describes the parameters corresponding 1099 * to OMX_QcomIndexConfigPictureTypeDecode extension. It 1100 * will set the picture type decode specified by eDecodeType. 1101 */ 1102 typedef struct OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE { 1103 OMX_U32 nSize; /** Size of the structure in bytes */ 1104 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1105 QOMX_VIDEO_PICTURE_TYPE_DECODE eDecodeType; /** Decode type */ 1106 } OMX_QCOM_VIDEO_CONFIG_PICTURE_TYPE_DECODE; 1107 1108 /** 1109 * This structure describes the parameters corresponding 1110 * to OMX_QcomIndexParamH264VUITimingInfo extension. It 1111 * will enable/disable the VUI timing info. 1112 */ 1113 typedef struct OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO { 1114 OMX_U32 nSize; /** Size of the structure in bytes */ 1115 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1116 OMX_BOOL bEnable; /** Enable/disable the setting */ 1117 } OMX_QCOM_VIDEO_PARAM_VUI_TIMING_INFO; 1118 1119 /** 1120 * This structure describes the parameters corresponding 1121 * to OMX_QcomIndexParamVQZIPSEIType extension. It 1122 * will enable/disable the VQZIP SEI info. 1123 */ 1124 typedef struct OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE { 1125 OMX_U32 nSize; /** Size of the structure in bytes */ 1126 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1127 OMX_BOOL bEnable; /** Enable/disable the setting */ 1128 } OMX_QTI_VIDEO_PARAM_VQZIP_SEI_TYPE; 1129 1130 /** 1131 * This structure describes the parameters corresponding 1132 * to OMX_QcomIndexParamPeakBitrate extension. It will 1133 * set the peak bitrate specified by nPeakBitrate. 1134 */ 1135 typedef struct OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE { 1136 OMX_U32 nSize; /** Size of the structure in bytes */ 1137 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1138 OMX_U32 nPeakBitrate; /** Peak bitrate value */ 1139 } OMX_QCOM_VIDEO_PARAM_PEAK_BITRATE; 1140 1141 /** 1142 * This structure describes the parameters corresponding 1143 * to OMX_QTIIndexParamForceCompressedForDPB extension. Enabling 1144 * this extension will force the split mode DPB(compressed)/OPB(Linear) 1145 * for all resolutions.On some chipsets preferred mode would be combined 1146 * Linear for both DPB/OPB to save memory. For example on 8996 preferred mode 1147 * would be combined linear for resolutions <= 1080p . 1148 * Enabling this might save power but with the cost 1149 * of increased memory i.e almost double the number on output YUV buffers. 1150 */ 1151 typedef struct OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE { 1152 OMX_U32 nSize; /** Size of the structure in bytes */ 1153 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1154 OMX_BOOL bEnable; /** Enable/disable the setting */ 1155 } OMX_QTI_VIDEO_PARAM_FORCE_COMPRESSED_FOR_DPB_TYPE; 1156 1157 /** 1158 * This structure describes the parameters corresponding 1159 * to OMX_QTIIndexParamForceUnCompressedForOPB extension. Enabling this 1160 * extension will force the OPB to be linear for the current video session. 1161 * If this property is not set, then the OPB will be set to linear or compressed 1162 * based on resolution selected and/or if cpu access is requested on the 1163 * OPB buffer. 1164 */ 1165 typedef struct OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE { 1166 OMX_U32 nSize; /** Sizeo f the structure in bytes */ 1167 OMX_VERSIONTYPE nVersion; /** OMX specification version information */ 1168 OMX_BOOL bEnable; /** Enable/disable the setting */ 1169 } OMX_QTI_VIDEO_PARAM_FORCE_UNCOMPRESSED_FOR_OPB_TYPE; 1170 1171 typedef struct OMX_VENDOR_EXTRADATATYPE { 1172 OMX_U32 nPortIndex; 1173 OMX_U32 nDataSize; 1174 OMX_U8 *pData; // cdata (codec_data/extradata) 1175 } OMX_VENDOR_EXTRADATATYPE; 1176 1177 /** 1178 * This structure describes the parameters corresponding to the 1179 * OMX_VENDOR_VIDEOFRAMERATE extension. This parameter can be set 1180 * dynamically during any state except the state invalid. This is 1181 * used for frame rate to be set from the application. This 1182 * is set on the in port. 1183 */ 1184 typedef struct OMX_VENDOR_VIDEOFRAMERATE { 1185 OMX_U32 nSize; /** Size of the structure in bytes */ 1186 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 1187 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 1188 OMX_U32 nFps; /** Frame rate value */ 1189 OMX_BOOL bEnabled; /** Flag to enable or disable client's frame rate value */ 1190 } OMX_VENDOR_VIDEOFRAMERATE; 1191 1192 typedef enum OMX_INDEXVENDORTYPE { 1193 OMX_IndexVendorFileReadInputFilename = 0xFF000001, 1194 OMX_IndexVendorParser3gpInputFilename = 0xFF000002, 1195 OMX_IndexVendorVideoExtraData = 0xFF000003, 1196 OMX_IndexVendorAudioExtraData = 0xFF000004, 1197 OMX_IndexVendorVideoFrameRate = 0xFF000005, 1198 } OMX_INDEXVENDORTYPE; 1199 1200 typedef enum OMX_QCOM_VC1RESOLUTIONTYPE 1201 { 1202 OMX_QCOM_VC1_PICTURE_RES_1x1, 1203 OMX_QCOM_VC1_PICTURE_RES_2x1, 1204 OMX_QCOM_VC1_PICTURE_RES_1x2, 1205 OMX_QCOM_VC1_PICTURE_RES_2x2 1206 } OMX_QCOM_VC1RESOLUTIONTYPE; 1207 1208 typedef enum OMX_QCOM_INTERLACETYPE 1209 { 1210 OMX_QCOM_InterlaceFrameProgressive, 1211 OMX_QCOM_InterlaceInterleaveFrameTopFieldFirst, 1212 OMX_QCOM_InterlaceInterleaveFrameBottomFieldFirst, 1213 OMX_QCOM_InterlaceFrameTopFieldFirst, 1214 OMX_QCOM_InterlaceFrameBottomFieldFirst, 1215 OMX_QCOM_InterlaceFieldTop, 1216 OMX_QCOM_InterlaceFieldBottom 1217 }OMX_QCOM_INTERLACETYPE; 1218 1219 typedef struct OMX_QCOM_PARAM_VIDEO_INTERLACETYPE 1220 { 1221 OMX_U32 nSize; /** Size of the structure in bytes */ 1222 OMX_VERSIONTYPE nVersion;/** OMX specification version information */ 1223 OMX_U32 nPortIndex; /** Portindex which is extended by this structure */ 1224 OMX_BOOL bInterlace; /** Interlace content **/ 1225 }OMX_QCOM_PARAM_VIDEO_INTERLACETYPE; 1226 1227 typedef struct OMX_QCOM_CONFIG_INTERLACETYPE 1228 { 1229 OMX_U32 nSize; 1230 OMX_VERSIONTYPE nVersion; 1231 OMX_U32 nPortIndex; 1232 OMX_U32 nIndex; 1233 OMX_QCOM_INTERLACETYPE eInterlaceType; 1234 }OMX_QCOM_CONFIG_INTERLACETYPE; 1235 1236 #define MAX_PAN_SCAN_WINDOWS 4 1237 1238 typedef struct OMX_QCOM_MISR_INFO { 1239 unsigned int misr_set; 1240 unsigned int misr_dpb_luma[8]; 1241 unsigned int misr_dpb_chroma[8]; 1242 unsigned int misr_opb_luma[8]; 1243 unsigned int misr_opb_chroma[8]; 1244 } OMX_QCOM_MISR_INFO; 1245 1246 typedef struct OMX_QCOM_OUTPUT_CROP { 1247 OMX_U32 size; 1248 OMX_U32 version; 1249 OMX_U32 port_index; 1250 OMX_U32 left; 1251 OMX_U32 top; 1252 OMX_U32 display_width; 1253 OMX_U32 display_height; 1254 OMX_U32 width; 1255 OMX_U32 height; 1256 OMX_U32 frame_num; 1257 OMX_U32 bit_depth_y; 1258 OMX_U32 bit_depth_c; 1259 OMX_QCOM_MISR_INFO misr_info[2]; 1260 } OMX_QCOM_OUTPUT_CROP; 1261 1262 typedef struct OMX_QCOM_PANSCAN 1263 { 1264 OMX_U32 numWindows; 1265 OMX_QCOMRectangle window[MAX_PAN_SCAN_WINDOWS]; 1266 } OMX_QCOM_PANSCAN; 1267 1268 typedef struct OMX_QCOM_ASPECT_RATIO 1269 { 1270 OMX_U32 aspectRatioX; 1271 OMX_U32 aspectRatioY; 1272 } OMX_QCOM_ASPECT_RATIO; 1273 1274 typedef struct OMX_QCOM_DISPLAY_ASPECT_RATIO 1275 { 1276 OMX_U32 displayVerticalSize; 1277 OMX_U32 displayHorizontalSize; 1278 } OMX_QCOM_DISPLAY_ASPECT_RATIO; 1279 1280 typedef struct OMX_QCOM_FRAME_PACK_ARRANGEMENT 1281 { 1282 OMX_U32 nSize; 1283 OMX_VERSIONTYPE nVersion; 1284 OMX_U32 nPortIndex; 1285 OMX_U32 id; 1286 OMX_U32 cancel_flag; 1287 OMX_U32 type; 1288 OMX_U32 quincunx_sampling_flag; 1289 OMX_U32 content_interpretation_type; 1290 OMX_U32 spatial_flipping_flag; 1291 OMX_U32 frame0_flipped_flag; 1292 OMX_U32 field_views_flag; 1293 OMX_U32 current_frame_is_frame0_flag; 1294 OMX_U32 frame0_self_contained_flag; 1295 OMX_U32 frame1_self_contained_flag; 1296 OMX_U32 frame0_grid_position_x; 1297 OMX_U32 frame0_grid_position_y; 1298 OMX_U32 frame1_grid_position_x; 1299 OMX_U32 frame1_grid_position_y; 1300 OMX_U32 reserved_byte; 1301 OMX_U32 repetition_period; 1302 OMX_U32 extension_flag; 1303 } OMX_QCOM_FRAME_PACK_ARRANGEMENT; 1304 1305 typedef struct OMX_QCOM_EXTRADATA_QP 1306 { 1307 OMX_U32 nQP; 1308 OMX_U32 nQPSum; /* Decode Only */ 1309 OMX_U32 nSkipQPSum; /* Decode Only */ 1310 OMX_U32 nSkipNumBlocks; /* Decode Only */ 1311 OMX_U32 nTotalNumBlocks; /* Decode Only */ 1312 } OMX_QCOM_EXTRADATA_QP; 1313 1314 typedef struct OMX_QCOM_EXTRADATA_BITS_INFO 1315 { 1316 OMX_U32 header_bits; 1317 OMX_U32 frame_bits; 1318 } OMX_QCOM_EXTRADATA_BITS_INFO; 1319 1320 typedef struct OMX_QCOM_EXTRADATA_USERDATA { 1321 OMX_U32 type; 1322 OMX_U32 data[1]; 1323 } OMX_QCOM_EXTRADATA_USERDATA; 1324 1325 typedef struct OMX_QCOM_EXTRADATA_FRAMEINFO 1326 { 1327 // common frame meta data. interlace related info removed 1328 OMX_VIDEO_PICTURETYPE ePicType; 1329 OMX_QCOM_INTERLACETYPE interlaceType; 1330 OMX_QCOM_PANSCAN panScan; 1331 OMX_QCOM_ASPECT_RATIO aspectRatio; 1332 OMX_QCOM_DISPLAY_ASPECT_RATIO displayAspectRatio; 1333 OMX_U32 nConcealedMacroblocks; 1334 OMX_U32 nRecoverySeiFlag; 1335 OMX_U32 nFrameRate; 1336 OMX_TICKS nTimeStamp; 1337 } OMX_QCOM_EXTRADATA_FRAMEINFO; 1338 1339 typedef struct OMX_QCOM_EXTRADATA_FRAMEDIMENSION 1340 { 1341 /** Frame Dimensions added to each YUV buffer */ 1342 OMX_U32 nDecWidth; /** Width rounded to multiple of 16 */ 1343 OMX_U32 nDecHeight; /** Height rounded to multiple of 16 */ 1344 OMX_U32 nActualWidth; /** Actual Frame Width */ 1345 OMX_U32 nActualHeight; /** Actual Frame Height */ 1346 1347 } OMX_QCOM_EXTRADATA_FRAMEDIMENSION; 1348 1349 typedef struct OMX_QCOM_H264EXTRADATA 1350 { 1351 OMX_U64 seiTimeStamp; 1352 } OMX_QCOM_H264EXTRADATA; 1353 1354 typedef struct OMX_QCOM_VC1EXTRADATA 1355 { 1356 OMX_U32 nVC1RangeY; 1357 OMX_U32 nVC1RangeUV; 1358 OMX_QCOM_VC1RESOLUTIONTYPE eVC1PicResolution; 1359 } OMX_QCOM_VC1EXTRADATA; 1360 1361 typedef union OMX_QCOM_EXTRADATA_CODEC_DATA 1362 { 1363 OMX_QCOM_H264EXTRADATA h264ExtraData; 1364 OMX_QCOM_VC1EXTRADATA vc1ExtraData; 1365 } OMX_QCOM_EXTRADATA_CODEC_DATA; 1366 1367 typedef struct OMX_QCOM_EXTRADATA_MBINFO 1368 { 1369 OMX_U32 nFormat; 1370 OMX_U32 nDataSize; 1371 OMX_U8 data[0]; 1372 } OMX_QCOM_EXTRADATA_MBINFO; 1373 1374 typedef struct OMX_QCOM_EXTRADATA_VQZIPSEI { 1375 OMX_U32 nSize; 1376 OMX_U8 data[0]; 1377 } OMX_QCOM_EXTRADATA_VQZIPSEI; 1378 1379 typedef struct OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO { 1380 OMX_U32 nSize; 1381 OMX_VERSIONTYPE nVersion; 1382 OMX_U32 nPortIndex; 1383 OMX_BOOL bEnableRoiInfo; 1384 } OMX_QTI_VIDEO_PARAM_ENABLE_ROIINFO; 1385 1386 #define MAX_ROI_MBINFO_SIZE 36864 /* 4096*2304/256 */ 1387 1388 /** 1389 * Specifies ROI deltaQP information for a frame. This information must be provided 1390 * via SetConfig before ETB. If client sends it after the ETB, it will be ignored. 1391 * STRUCT MEMBERS: 1392 * nSize : Size of Structure in bytes 1393 * nVersion : OpenMAX IL specification version information 1394 * nPortIndex : Index of the port to which this structure applies 1395 * nTimeStamp : TimeStamp of the ETB, to which the ROI data will be applied. 1396 * nRoiMBInfoCount : Total deltaQP values provided by the Client. 1397 * Total MB/LCU = (MB/LCU)_Width * (MB/LCU)_Height 1398 * for H264: 1399 * MB_Width = (frame_width +15) >>4; 1400 * MB_Height = (frame_height +15) >>4; 1401 * for H265: 1402 * LCU_Width = (frame_width + 31) >>5; 1403 * LCU_Height = (frame_height +31) >>5; 1404 * pRoiMBInfo[] : Array containing the deltaQP(1 per MacroBlock) values of a frame. 1405 */ 1406 typedef struct OMX_QTI_VIDEO_CONFIG_ROIINFO { 1407 OMX_U32 nSize; 1408 OMX_VERSIONTYPE nVersion; 1409 OMX_U32 nPortIndex; 1410 OMX_BOOL bUseRoiInfo; 1411 OMX_TICKS nTimeStamp; 1412 OMX_S32 nRoiMBInfoCount; 1413 OMX_S8 pRoiMBInfo[MAX_ROI_MBINFO_SIZE]; 1414 } OMX_QTI_VIDEO_CONFIG_ROIINFO; 1415 1416 typedef struct QOMX_VIDEO_RECT_REGION_DELTAQP { 1417 OMX_U32 nLeft; 1418 OMX_U32 nTop; 1419 OMX_U32 nRight; 1420 OMX_U32 nBottom; 1421 OMX_S8 nDeltaQP; 1422 } QOMX_VIDEO_RECT_REGION_DELTAQP; 1423 1424 #define MAX_RECT_ROI_NUM 10 1425 /* * 1426 * Specifies the region based ROI deltaQP information for each frame to support 1427 * MediaCodec VendorExtension usage. The client should send it before ETB. 1428 * STRUCT MEMBERS: 1429 * nSize : Size of Structure in bytes. 1430 * nVersion : OpenMAX IL spcification version information. 1431 * nPortIndex : Index of the port to which this structure applies. 1432 * nTimeStamp : TimeStamp of the ETB, to which the ROI data will be applied. 1433 * nRegionNum : The numbers of the roi regions, the maximum number is 10 which 1434 * is aligned with vender extension's maximum numbers. 1435 * nRegions : The array of rectangle region's area and delta qp value. 1436 */ 1437 typedef struct OMX_QTI_VIDEO_CONFIG_ROI_RECT_REGION_INFO { 1438 OMX_U32 nSize; 1439 OMX_VERSIONTYPE nVersion; 1440 OMX_U32 nPortIndex; 1441 OMX_TICKS nTimeStamp; 1442 OMX_U32 nRegionNum; 1443 QOMX_VIDEO_RECT_REGION_DELTAQP nRegions[MAX_RECT_ROI_NUM]; 1444 } OMX_QTI_VIDEO_CONFIG_ROI_RECT_REGION_INFO; 1445 1446 /** 1447 * Specifies the Blur resolution or Enable/Disable config. 1448 * When enabled, a filter will be applied to the input YUV, to 1449 * achieve an effect similar to downscaling to the BLUR 1450 * resolution specified in nBlurInfo. Blur effect is applied 1451 * starting from the next IDR frame. 1452 * 1453 * nSize : Size of Structure in bytes 1454 * nVersion : OpenMAX IL specification version information 1455 * nPortIndex : Index of the port. 1456 * nBlurInfo 0 : Disable Blur. If set before start, blur 1457 * is disabled throughout the session. 1458 * 1 : Enable Blur. Must be set before start. 1459 * Blur is applied when valid resolution 1460 * is set. 1461 * n : Custom resolution, bit[31:16] for width 1462 * bit[15:0] for height. 1463 */ 1464 1465 typedef struct OMX_QTI_VIDEO_CONFIG_BLURINFO { 1466 OMX_U32 nSize; 1467 OMX_VERSIONTYPE nVersion; 1468 OMX_U32 nPortIndex; 1469 OMX_U32 nBlurInfo; 1470 } OMX_QTI_VIDEO_CONFIG_BLURINFO; 1471 1472 typedef enum OMX_QCOM_EXTRADATATYPE 1473 { 1474 OMX_ExtraDataFrameInfo = 0x7F000001, 1475 OMX_ExtraDataH264 = 0x7F000002, 1476 OMX_ExtraDataVC1 = 0x7F000003, 1477 OMX_ExtraDataFrameDimension = 0x7F000004, 1478 OMX_ExtraDataVideoEncoderSliceInfo = 0x7F000005, 1479 OMX_ExtraDataConcealMB = 0x7F000006, 1480 OMX_ExtraDataInterlaceFormat = 0x7F000007, 1481 OMX_ExtraDataPortDef = 0x7F000008, 1482 OMX_ExtraDataMP2ExtnData = 0x7F000009, 1483 OMX_ExtraDataMP2UserData = 0x7F00000a, 1484 OMX_ExtraDataVideoLTRInfo = 0x7F00000b, 1485 OMX_ExtraDataFramePackingArrangement = 0x7F00000c, 1486 OMX_ExtraDataQP = 0x7F00000d, 1487 OMX_ExtraDataInputBitsInfo = 0x7F00000e, 1488 OMX_ExtraDataVideoEncoderMBInfo = 0x7F00000f, 1489 OMX_ExtraDataVQZipSEI = 0x7F000010, 1490 OMX_ExtraDataDisplayColourSEI = 0x7F000011, 1491 OMX_ExtraDataLightLevelSEI = 0x7F000012, 1492 OMX_ExtraDataOutputCropInfo = 0x7F000014, 1493 OMX_ExtraDataInputROIInfo = 0x7F000058, 1494 } OMX_QCOM_EXTRADATATYPE; 1495 1496 struct ExtraDataMap { 1497 const char *type; 1498 OMX_QCOM_EXTRADATATYPE index; 1499 }; 1500 static const struct ExtraDataMap kExtradataMap[] = { 1501 { "ltrinfo", OMX_ExtraDataVideoLTRInfo }, 1502 { "mbinfo", OMX_ExtraDataVideoEncoderMBInfo }, 1503 { "outputcropinfo", OMX_ExtraDataOutputCropInfo }, 1504 { "roiinfo", OMX_ExtraDataInputROIInfo }, 1505 }; 1506 1507 static inline OMX_S32 getIndexForExtradataType(char * type) { 1508 if(type == NULL) return -1; 1509 for(int i = 0; i< (int)(sizeof(kExtradataMap)/ sizeof(struct ExtraDataMap)); i++){ 1510 if(!strcmp(kExtradataMap[i].type,type)){ 1511 return kExtradataMap[i].index; 1512 } 1513 } 1514 return -1; 1515 } 1516 1517 static inline const char * getStringForExtradataType(int64_t index) { 1518 for(int i = 0; i< (int)(sizeof(kExtradataMap)/sizeof(struct ExtraDataMap)); i++){ 1519 if(kExtradataMap[i].index == index){ 1520 return kExtradataMap[i].type; 1521 } 1522 } 1523 return NULL; 1524 } 1525 1526 typedef struct OMX_STREAMINTERLACEFORMATTYPE { 1527 OMX_U32 nSize; 1528 OMX_VERSIONTYPE nVersion; 1529 OMX_U32 nPortIndex; 1530 OMX_BOOL bInterlaceFormat; 1531 OMX_U32 nInterlaceFormats; 1532 } OMX_STREAMINTERLACEFORMAT; 1533 1534 typedef enum OMX_INTERLACETYPE 1535 { 1536 OMX_InterlaceFrameProgressive, 1537 OMX_InterlaceInterleaveFrameTopFieldFirst, 1538 OMX_InterlaceInterleaveFrameBottomFieldFirst, 1539 OMX_InterlaceFrameTopFieldFirst, 1540 OMX_InterlaceFrameBottomFieldFirst 1541 } OMX_INTERLACES; 1542 1543 typedef enum QOMX_VIDEO_RECOVERYSEITYPE { 1544 /* 1545 * 0: Frame reconstruction is incorrect 1546 * a) Open Gop, frames before recovery point SEI 1547 * 1: Frame reconstruction is correct. 1548 * a) Closed Gop, When decoding starts from the top of closed GOP at IDR 1549 * b) Open Gop, Output at and subsequent to recovery point SEI with 1550 * exact_match_flag = true 1551 * 2: Frame reconstruction is approximately correct: 1552 * a) Closed Gop, When decoding starts from a P/B/I frames wihtout 1553 * any recovery point SEI information 1554 * b) Open Gop, Output at and subsequent to recovery point SEI with 1555 * exact_match_flag = false 1556 * In case flag is set to 0 or 2, DATACORRUPT shall be enabled 1557 * for buffer (nFlags) in FILL_BUFFER_DONE 1558 */ 1559 OMX_FRAME_RECONSTRUCTION_INCORRECT = 0, 1560 OMX_FRAME_RECONSTRUCTION_CORRECT = 1, 1561 OMX_FRAME_RECONSTRUCTION_APPROXIMATELY_CORRECT = 2 1562 } QOMX_VIDEO_RECOVERYSEI; 1563 1564 #define OMX_EXTRADATA_HEADER_SIZE 20 1565 1566 /** 1567 * AVC profile types, each profile indicates support for various 1568 * performance bounds and different annexes. 1569 */ 1570 typedef enum QOMX_VIDEO_AVCPROFILETYPE { 1571 QOMX_VIDEO_AVCProfileBaseline = OMX_VIDEO_AVCProfileBaseline, 1572 QOMX_VIDEO_AVCProfileMain = OMX_VIDEO_AVCProfileMain, 1573 QOMX_VIDEO_AVCProfileExtended = OMX_VIDEO_AVCProfileExtended, 1574 QOMX_VIDEO_AVCProfileHigh = OMX_VIDEO_AVCProfileHigh, 1575 QOMX_VIDEO_AVCProfileHigh10 = OMX_VIDEO_AVCProfileHigh10, 1576 QOMX_VIDEO_AVCProfileHigh422 = OMX_VIDEO_AVCProfileHigh422, 1577 QOMX_VIDEO_AVCProfileHigh444 = OMX_VIDEO_AVCProfileHigh444, 1578 QOMX_VIDEO_AVCProfileConstrainedBaseline = OMX_VIDEO_AVCProfileConstrainedBaseline, 1579 QOMX_VIDEO_AVCProfileConstrainedHigh = OMX_VIDEO_AVCProfileConstrainedHigh, 1580 /* QCom specific profile indexes */ 1581 QOMX_VIDEO_AVCProfileConstrained = OMX_VIDEO_AVCProfileVendorStartUnused 1582 } QOMX_VIDEO_AVCPROFILETYPE; 1583 1584 1585 /** 1586 * H.264 MVC Profiles 1587 */ 1588 typedef enum QOMX_VIDEO_MVCPROFILETYPE { 1589 QOMX_VIDEO_MVCProfileStereoHigh = 0x1, 1590 QOMX_VIDEO_MVCProfileMultiViewHigh = 0x2, 1591 QOMX_VIDEO_MVCProfileKhronosExtensions = 0x6F000000, 1592 QOMX_VIDEO_MVCProfileVendorStartUnused = 0x7F000000, 1593 QOMX_VIDEO_MVCProfileMax = 0x7FFFFFFF 1594 } QOMX_VIDEO_MVCPROFILETYPE; 1595 1596 /** 1597 * H.264 MVC Levels 1598 */ 1599 typedef enum QOMX_VIDEO_MVCLEVELTYPE { 1600 QOMX_VIDEO_MVCLevel1 = 0x01, /**< Level 1 */ 1601 QOMX_VIDEO_MVCLevel1b = 0x02, /**< Level 1b */ 1602 QOMX_VIDEO_MVCLevel11 = 0x04, /**< Level 1.1 */ 1603 QOMX_VIDEO_MVCLevel12 = 0x08, /**< Level 1.2 */ 1604 QOMX_VIDEO_MVCLevel13 = 0x10, /**< Level 1.3 */ 1605 QOMX_VIDEO_MVCLevel2 = 0x20, /**< Level 2 */ 1606 QOMX_VIDEO_MVCLevel21 = 0x40, /**< Level 2.1 */ 1607 QOMX_VIDEO_MVCLevel22 = 0x80, /**< Level 2.2 */ 1608 QOMX_VIDEO_MVCLevel3 = 0x100, /**< Level 3 */ 1609 QOMX_VIDEO_MVCLevel31 = 0x200, /**< Level 3.1 */ 1610 QOMX_VIDEO_MVCLevel32 = 0x400, /**< Level 3.2 */ 1611 QOMX_VIDEO_MVCLevel4 = 0x800, /**< Level 4 */ 1612 QOMX_VIDEO_MVCLevel41 = 0x1000, /**< Level 4.1 */ 1613 QOMX_VIDEO_MVCLevel42 = 0x2000, /**< Level 4.2 */ 1614 QOMX_VIDEO_MVCLevel5 = 0x4000, /**< Level 5 */ 1615 QOMX_VIDEO_MVCLevel51 = 0x8000, /**< Level 5.1 */ 1616 QOMX_VIDEO_MVCLevelKhronosExtensions = 0x6F000000, 1617 QOMX_VIDEO_MVCLevelVendorStartUnused = 0x7F000000, 1618 QOMX_VIDEO_MVCLevelMax = 0x7FFFFFFF 1619 } QOMX_VIDEO_MVCLEVELTYPE; 1620 1621 /** 1622 * DivX Versions 1623 */ 1624 typedef enum QOMX_VIDEO_DIVXFORMATTYPE { 1625 QOMX_VIDEO_DIVXFormatUnused = 0x01, /**< Format unused or unknown */ 1626 QOMX_VIDEO_DIVXFormat311 = 0x02, /**< DivX 3.11 */ 1627 QOMX_VIDEO_DIVXFormat4 = 0x04, /**< DivX 4 */ 1628 QOMX_VIDEO_DIVXFormat5 = 0x08, /**< DivX 5 */ 1629 QOMX_VIDEO_DIVXFormat6 = 0x10, /**< DivX 6 */ 1630 QOMX_VIDEO_DIVXFormatKhronosExtensions = 0x6F000000, 1631 QOMX_VIDEO_DIVXFormatVendorStartUnused = 0x7F000000, 1632 QOMX_VIDEO_DIVXFormatMax = 0x7FFFFFFF 1633 } QOMX_VIDEO_DIVXFORMATTYPE; 1634 1635 /** 1636 * DivX profile types, each profile indicates support for 1637 * various performance bounds. 1638 */ 1639 typedef enum QOMX_VIDEO_DIVXPROFILETYPE { 1640 QOMX_VIDEO_DivXProfileqMobile = 0x01, /**< qMobile Profile */ 1641 QOMX_VIDEO_DivXProfileMobile = 0x02, /**< Mobile Profile */ 1642 QOMX_VIDEO_DivXProfileMT = 0x04, /**< Mobile Theatre Profile */ 1643 QOMX_VIDEO_DivXProfileHT = 0x08, /**< Home Theatre Profile */ 1644 QOMX_VIDEO_DivXProfileHD = 0x10, /**< High Definition Profile */ 1645 QOMX_VIDEO_DIVXProfileKhronosExtensions = 0x6F000000, 1646 QOMX_VIDEO_DIVXProfileVendorStartUnused = 0x7F000000, 1647 QOMX_VIDEO_DIVXProfileMax = 0x7FFFFFFF 1648 } QOMX_VIDEO_DIVXPROFILETYPE; 1649 1650 /** 1651 * DivX Video Params 1652 * 1653 * STRUCT MEMBERS: 1654 * nSize : Size of the structure in bytes 1655 * nVersion : OMX specification version information 1656 * nPortIndex : Port that this structure applies to 1657 * eFormat : Version of DivX stream / data 1658 * eProfile : Profile of DivX stream / data 1659 */ 1660 typedef struct QOMX_VIDEO_PARAM_DIVXTYPE { 1661 OMX_U32 nSize; 1662 OMX_VERSIONTYPE nVersion; 1663 OMX_U32 nPortIndex; 1664 QOMX_VIDEO_DIVXFORMATTYPE eFormat; 1665 QOMX_VIDEO_DIVXPROFILETYPE eProfile; 1666 } QOMX_VIDEO_PARAM_DIVXTYPE; 1667 1668 1669 1670 /** 1671 * VP Versions 1672 */ 1673 typedef enum QOMX_VIDEO_VPFORMATTYPE { 1674 QOMX_VIDEO_VPFormatUnused = 0x01, /**< Format unused or unknown */ 1675 QOMX_VIDEO_VPFormat6 = 0x02, /**< VP6 Video Format */ 1676 QOMX_VIDEO_VPFormat7 = 0x04, /**< VP7 Video Format */ 1677 QOMX_VIDEO_VPFormat8 = 0x08, /**< VP8 Video Format */ 1678 QOMX_VIDEO_VPFormat9 = 0x10, /**< VP9 Video Format */ 1679 QOMX_VIDEO_VPFormatKhronosExtensions = 0x6F000000, 1680 QOMX_VIDEO_VPFormatVendorStartUnused = 0x7F000000, 1681 QOMX_VIDEO_VPFormatMax = 0x7FFFFFFF 1682 } QOMX_VIDEO_VPFORMATTYPE; 1683 1684 /** 1685 * VP profile types, each profile indicates support for various 1686 * encoding tools. 1687 */ 1688 typedef enum QOMX_VIDEO_VPPROFILETYPE { 1689 QOMX_VIDEO_VPProfileSimple = 0x01, /**< Simple Profile, applies to VP6 only */ 1690 QOMX_VIDEO_VPProfileAdvanced = 0x02, /**< Advanced Profile, applies to VP6 only */ 1691 QOMX_VIDEO_VPProfileVersion0 = 0x04, /**< Version 0, applies to VP7 and VP8 */ 1692 QOMX_VIDEO_VPProfileVersion1 = 0x08, /**< Version 1, applies to VP7 and VP8 */ 1693 QOMX_VIDEO_VPProfileVersion2 = 0x10, /**< Version 2, applies to VP8 only */ 1694 QOMX_VIDEO_VPProfileVersion3 = 0x20, /**< Version 3, applies to VP8 only */ 1695 QOMX_VIDEO_VPProfileKhronosExtensions = 0x6F000000, 1696 QOMX_VIDEO_VPProfileVendorStartUnused = 0x7F000000, 1697 QOMX_VIDEO_VPProfileMax = 0x7FFFFFFF 1698 } QOMX_VIDEO_VPPROFILETYPE; 1699 1700 /** 1701 * VP Video Params 1702 * 1703 * STRUCT MEMBERS: 1704 * nSize : Size of the structure in bytes 1705 * nVersion : OMX specification version information 1706 * nPortIndex : Port that this structure applies to 1707 * eFormat : Format of VP stream / data 1708 * eProfile : Profile or Version of VP stream / data 1709 */ 1710 typedef struct QOMX_VIDEO_PARAM_VPTYPE { 1711 OMX_U32 nSize; 1712 OMX_VERSIONTYPE nVersion; 1713 OMX_U32 nPortIndex; 1714 QOMX_VIDEO_VPFORMATTYPE eFormat; 1715 QOMX_VIDEO_VPPROFILETYPE eProfile; 1716 } QOMX_VIDEO_PARAM_VPTYPE; 1717 1718 /** 1719 * Spark Versions 1720 */ 1721 typedef enum QOMX_VIDEO_SPARKFORMATTYPE { 1722 QOMX_VIDEO_SparkFormatUnused = 0x01, /**< Format unused or unknown */ 1723 QOMX_VIDEO_SparkFormat0 = 0x02, /**< Video Format Version 0 */ 1724 QOMX_VIDEO_SparkFormat1 = 0x04, /**< Video Format Version 1 */ 1725 QOMX_VIDEO_SparkFormatKhronosExtensions = 0x6F000000, 1726 QOMX_VIDEO_SparkFormatVendorStartUnused = 0x7F000000, 1727 QOMX_VIDEO_SparkFormatMax = 0x7FFFFFFF 1728 } QOMX_VIDEO_SPARKFORMATTYPE; 1729 1730 /** 1731 * Spark Video Params 1732 * 1733 * STRUCT MEMBERS: 1734 * nSize : Size of the structure in bytes 1735 * nVersion : OMX specification version information 1736 * nPortIndex : Port that this structure applies to 1737 * eFormat : Version of Spark stream / data 1738 */ 1739 typedef struct QOMX_VIDEO_PARAM_SPARKTYPE { 1740 OMX_U32 nSize; 1741 OMX_VERSIONTYPE nVersion; 1742 OMX_U32 nPortIndex; 1743 QOMX_VIDEO_SPARKFORMATTYPE eFormat; 1744 } QOMX_VIDEO_PARAM_SPARKTYPE; 1745 1746 typedef enum QOMX_VIDEO_TMEPROFILETYPE { 1747 QOMX_VIDEO_TMEProfile0 = 0x1, 1748 QOMX_VIDEO_TMEProfile1 = 0x2, 1749 QOMX_VIDEO_TMEProfile2 = 0x4, 1750 QOMX_VIDEO_TMEProfile3 = 0x8, 1751 } QOMX_VIDEO_TMEPROFILETYPE; 1752 1753 typedef enum QOMX_VIDEO_TMELEVELTYPE { 1754 QOMX_VIDEO_TMELevelInteger = 0x1, 1755 } QOMX_VIDEO_TMELEVELTYPE; 1756 1757 typedef struct QOMX_VIDEO_PARAM_TMETYPE { 1758 OMX_U32 nSize; 1759 OMX_VERSIONTYPE nVersion; 1760 OMX_U32 nPortIndex; 1761 QOMX_VIDEO_TMEPROFILETYPE eProfile; 1762 QOMX_VIDEO_TMELEVELTYPE eLevel; 1763 OMX_U32 ePayloadVersion; 1764 } QOMX_VIDEO_PARAM_TMETYPE; 1765 1766 typedef struct QOMX_VIDEO_QUERY_DECODER_INSTANCES { 1767 OMX_U32 nSize; 1768 OMX_VERSIONTYPE nVersion; 1769 OMX_U32 nPortIndex; 1770 OMX_U32 nNumOfInstances; 1771 } QOMX_VIDEO_QUERY_DECODER_INSTANCES; 1772 1773 typedef struct QOMX_ENABLETYPE { 1774 OMX_U32 nSize; 1775 OMX_VERSIONTYPE nVersion; 1776 OMX_BOOL bEnable; 1777 } QOMX_ENABLETYPE; 1778 1779 typedef struct QOMX_DISABLETYPE { 1780 OMX_U32 nSize; 1781 OMX_VERSIONTYPE nVersion; 1782 OMX_BOOL bDisable; 1783 } QOMX_DISABLETYPE; 1784 1785 typedef enum QOMX_VIDEO_EVENTS { 1786 OMX_EventIndexsettingChanged = OMX_EventVendorStartUnused 1787 } QOMX_VIDEO_EVENTS; 1788 1789 typedef enum QOMX_VIDEO_PICTURE_ORDER { 1790 QOMX_VIDEO_DISPLAY_ORDER = 0x1, 1791 QOMX_VIDEO_DECODE_ORDER = 0x2 1792 } QOMX_VIDEO_PICTURE_ORDER; 1793 1794 typedef struct QOMX_VIDEO_DECODER_PICTURE_ORDER { 1795 OMX_U32 nSize; 1796 OMX_VERSIONTYPE nVersion; 1797 OMX_U32 nPortIndex; 1798 QOMX_VIDEO_PICTURE_ORDER eOutputPictureOrder; 1799 } QOMX_VIDEO_DECODER_PICTURE_ORDER; 1800 1801 typedef struct QOMX_INDEXEXTRADATATYPE { 1802 OMX_U32 nSize; 1803 OMX_VERSIONTYPE nVersion; 1804 OMX_U32 nPortIndex; 1805 OMX_BOOL bEnabled; 1806 OMX_INDEXTYPE nIndex; 1807 } QOMX_INDEXEXTRADATATYPE; 1808 1809 typedef struct QOMX_INDEXTIMESTAMPREORDER { 1810 OMX_U32 nSize; 1811 OMX_VERSIONTYPE nVersion; 1812 OMX_U32 nPortIndex; 1813 OMX_BOOL bEnable; 1814 } QOMX_INDEXTIMESTAMPREORDER; 1815 1816 typedef struct QOMX_INDEXDOWNSCALAR { 1817 OMX_U32 nSize; 1818 OMX_VERSIONTYPE nVersion; 1819 OMX_U32 nPortIndex; 1820 OMX_BOOL bEnable; 1821 OMX_U32 nOutputWidth; 1822 OMX_U32 nOutputHeight; 1823 } QOMX_INDEXDOWNSCALAR; 1824 1825 typedef struct QOMX_VIDEO_CUSTOM_BUFFERSIZE { 1826 OMX_U32 nSize; 1827 OMX_VERSIONTYPE nVersion; 1828 OMX_U32 nPortIndex; 1829 OMX_U32 nBufferSize; 1830 } QOMX_VIDEO_CUSTOM_BUFFERSIZE; 1831 1832 typedef struct QOMX_VIDEO_OUTPUT_FRAME_RATE { 1833 OMX_U32 nSize; 1834 OMX_VERSIONTYPE nVersion; 1835 OMX_U32 fps; 1836 } QOMX_VIDEO_OUTPUT_FRAME_RATE; 1837 1838 #define OMX_QCOM_INDEX_PARAM_VIDEO_SYNCFRAMEDECODINGMODE "OMX.QCOM.index.param.video.SyncFrameDecodingMode" 1839 #define OMX_QCOM_INDEX_PARAM_INDEXEXTRADATA "OMX.QCOM.index.param.IndexExtraData" 1840 #define OMX_QCOM_INDEX_PARAM_VIDEO_SLICEDELIVERYMODE "OMX.QCOM.index.param.SliceDeliveryMode" 1841 #define OMX_QCOM_INDEX_PARAM_VIDEO_FRAMEPACKING_EXTRADATA "OMX.QCOM.index.param.video.FramePackingExtradata" 1842 #define OMX_QCOM_INDEX_PARAM_VIDEO_QP_EXTRADATA "OMX.QCOM.index.param.video.QPExtradata" 1843 #define OMX_QCOM_INDEX_PARAM_VIDEO_INPUTBITSINFO_EXTRADATA "OMX.QCOM.index.param.video.InputBitsInfoExtradata" 1844 #define OMX_QCOM_INDEX_PARAM_VIDEO_EXTNUSER_EXTRADATA "OMX.QCOM.index.param.video.ExtnUserExtraData" 1845 #define OMX_QCOM_INDEX_PARAM_VIDEO_EXTNOUTPUTCROP_EXTRADATA "OMX.QCOM.index.param.video.ExtnOutputCropExtraData" 1846 #define OMX_QCOM_INDEX_CONFIG_VIDEO_FRAMEPACKING_INFO "OMX.QCOM.index.config.video.FramePackingInfo" 1847 #define OMX_QCOM_INDEX_PARAM_VIDEO_MPEG2SEQDISP_EXTRADATA "OMX.QCOM.index.param.video.Mpeg2SeqDispExtraData" 1848 1849 #define OMX_QCOM_INDEX_PARAM_VIDEO_HIERSTRUCTURE "OMX.QCOM.index.param.video.HierStructure" 1850 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRCOUNT "OMX.QCOM.index.param.video.LTRCount" 1851 #define OMX_QCOM_INDEX_PARAM_VIDEO_LTRPERIOD "OMX.QCOM.index.param.video.LTRPeriod" 1852 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRUSE "OMX.QCOM.index.config.video.LTRUse" 1853 #define OMX_QCOM_INDEX_CONFIG_VIDEO_LTRMARK "OMX.QCOM.index.config.video.LTRMark" 1854 #define OMX_QCOM_INDEX_CONFIG_VIDEO_HIER_P_LAYERS "OMX.QCOM.index.config.video.hierplayers" 1855 #define OMX_QCOM_INDEX_CONFIG_RECTANGLE_TYPE "OMX.QCOM.index.config.video.rectangle" 1856 #define OMX_QCOM_INDEX_PARAM_VIDEO_BASE_LAYER_ID "OMX.QCOM.index.param.video.baselayerid" 1857 #define OMX_QCOM_INDEX_CONFIG_VIDEO_QP "OMX.QCOM.index.config.video.qp" 1858 #define OMX_QCOM_INDEX_PARAM_VIDEO_SAR "OMX.QCOM.index.param.video.sar" 1859 #define OMX_QTI_INDEX_PARAM_VIDEO_LOW_LATENCY "OMX.QTI.index.param.video.LowLatency" 1860 1861 #define OMX_QCOM_INDEX_PARAM_VIDEO_PASSINPUTBUFFERFD "OMX.QCOM.index.param.video.PassInputBufferFd" 1862 #define OMX_QTI_INDEX_PARAM_VIDEO_PREFER_ADAPTIVE_PLAYBACK "OMX.QTI.index.param.video.PreferAdaptivePlayback" 1863 #define OMX_QTI_INDEX_CONFIG_VIDEO_SETTIMEDATA "OMX.QTI.index.config.video.settimedata" 1864 #define OMX_QTI_INDEX_PARAM_VIDEO_FORCE_COMPRESSED_FOR_DPB "OMX.QTI.index.param.video.ForceCompressedForDPB" 1865 #define OMX_QTI_INDEX_PARAM_VIDEO_ENABLE_ROIINFO "OMX.QTI.index.param.enableRoiInfo" 1866 #define OMX_QTI_INDEX_CONFIG_VIDEO_ROIINFO "OMX.QTI.index.config.RoiInfo" 1867 #define OMX_QTI_INDEX_CONFIG_VIDEO_BLURINFO "OMX.QTI.index.config.BlurInfo" 1868 #define OMX_QTI_INDEX_PARAM_VIDEO_CLIENT_EXTRADATA "OMX.QTI.index.param.client.extradata" 1869 #define OMX_QTI_INDEX_CONFIG_COLOR_ASPECTS "OMX.google.android.index.describeColorAspects" 1870 #define OMX_QTI_INDEX_CONFIG_VIDEO_GETDSMODE "OMX.QTI.index.config.video.getdsmode" 1871 #define OMX_QTI_INDEX_PARAM_TME "OMX.QTI.index.param.tme" 1872 #define OMX_QTI_INDEX_PARAM_NATIVE_RECORDER "OMX.QTI.index.param.nativeRecorder" 1873 1874 typedef enum { 1875 QOMX_VIDEO_FRAME_PACKING_CHECKERBOARD = 0, 1876 QOMX_VIDEO_FRAME_PACKING_COLUMN_INTERLEAVE = 1, 1877 QOMX_VIDEO_FRAME_PACKING_ROW_INTERLEAVE = 2, 1878 QOMX_VIDEO_FRAME_PACKING_SIDE_BY_SIDE = 3, 1879 QOMX_VIDEO_FRAME_PACKING_TOP_BOTTOM = 4, 1880 QOMX_VIDEO_FRAME_PACKING_TEMPORAL = 5, 1881 } QOMX_VIDEO_FRAME_PACKING_ARRANGEMENT; 1882 1883 typedef enum { 1884 QOMX_VIDEO_CONTENT_UNSPECIFIED = 0, 1885 QOMX_VIDEO_CONTENT_LR_VIEW = 1, 1886 QOMX_VIDEO_CONTENT_RL_VIEW = 2, 1887 } QOMX_VIDEO_CONTENT_INTERPRETATION; 1888 1889 /** 1890 * Specifies the extended picture types. These values should be 1891 * OR'd along with the types defined in OMX_VIDEO_PICTURETYPE to 1892 * signal all pictures types which are allowed. 1893 * 1894 * ENUMS: 1895 * H.264 Specific Picture Types: IDR 1896 */ 1897 typedef enum QOMX_VIDEO_PICTURETYPE { 1898 QOMX_VIDEO_PictureTypeIDR = OMX_VIDEO_PictureTypeVendorStartUnused + 0x1000 1899 } QOMX_VIDEO_PICTURETYPE; 1900 1901 #define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION "OMX.QCOM.index.config.activeregiondetection" 1902 #define OMX_QCOM_INDEX_CONFIG_ACTIVE_REGION_DETECTION_STATUS "OMX.QCOM.index.config.activeregiondetectionstatus" 1903 #define OMX_QCOM_INDEX_CONFIG_SCALING_MODE "OMX.QCOM.index.config.scalingmode" 1904 #define OMX_QCOM_INDEX_CONFIG_NOISEREDUCTION "OMX.QCOM.index.config.noisereduction" 1905 #define OMX_QCOM_INDEX_CONFIG_IMAGEENHANCEMENT "OMX.QCOM.index.config.imageenhancement" 1906 #define OMX_QCOM_INDEX_PARAM_HELDBUFFERCOUNT "OMX.QCOM.index.param.HeldBufferCount" /**< reference: QOMX_HELDBUFFERCOUNTTYPE */ 1907 1908 1909 typedef struct QOMX_RECTTYPE { 1910 OMX_U32 nSize; 1911 OMX_VERSIONTYPE nVersion; 1912 OMX_S32 nLeft; 1913 OMX_S32 nTop; 1914 OMX_U32 nWidth; 1915 OMX_U32 nHeight; 1916 } QOMX_RECTTYPE; 1917 1918 typedef struct QOMX_ACTIVEREGIONDETECTIONTYPE { 1919 OMX_U32 nSize; 1920 OMX_VERSIONTYPE nVersion; 1921 OMX_U32 nPortIndex; 1922 OMX_BOOL bEnable; 1923 QOMX_RECTTYPE sROI; 1924 OMX_U32 nNumExclusionRegions; 1925 QOMX_RECTTYPE sExclusionRegions[1]; 1926 } QOMX_ACTIVEREGIONDETECTIONTYPE; 1927 1928 typedef struct QOMX_ACTIVEREGIONDETECTION_STATUSTYPE { 1929 OMX_U32 nSize; 1930 OMX_VERSIONTYPE nVersion; 1931 OMX_U32 nPortIndex; 1932 OMX_BOOL bDetected; 1933 QOMX_RECTTYPE sDetectedRegion; 1934 } QOMX_ACTIVEREGIONDETECTION_STATUSTYPE; 1935 1936 typedef enum QOMX_SCALE_MODETYPE { 1937 QOMX_SCALE_MODE_Normal, 1938 QOMX_SCALE_MODE_Anamorphic, 1939 QOMX_SCALE_MODE_Max = 0x7FFFFFFF 1940 } QOMX_SCALE_MODETYPE; 1941 1942 typedef struct QOMX_SCALINGMODETYPE { 1943 OMX_U32 nSize; 1944 OMX_VERSIONTYPE nVersion; 1945 QOMX_SCALE_MODETYPE eScaleMode; 1946 } QOMX_SCALINGMODETYPE; 1947 1948 typedef struct QOMX_NOISEREDUCTIONTYPE { 1949 OMX_U32 nSize; 1950 OMX_VERSIONTYPE nVersion; 1951 OMX_U32 nPortIndex; 1952 OMX_BOOL bEnable; 1953 OMX_BOOL bAutoMode; 1954 OMX_S32 nNoiseReduction; 1955 } QOMX_NOISEREDUCTIONTYPE; 1956 1957 typedef struct QOMX_IMAGEENHANCEMENTTYPE { 1958 OMX_U32 nSize; 1959 OMX_VERSIONTYPE nVersion; 1960 OMX_U32 nPortIndex; 1961 OMX_BOOL bEnable; 1962 OMX_BOOL bAutoMode; 1963 OMX_S32 nImageEnhancement; 1964 } QOMX_IMAGEENHANCEMENTTYPE; 1965 1966 /* 1967 * these are part of OMX1.2 but JB MR2 branch doesn't have them defined 1968 * OMX_IndexParamInterlaceFormat 1969 * OMX_INTERLACEFORMATTYPE 1970 */ 1971 #ifndef OMX_IndexParamInterlaceFormat 1972 #define OMX_IndexParamInterlaceFormat (0x7FF00000) 1973 typedef struct OMX_INTERLACEFORMATTYPE { 1974 OMX_U32 nSize; 1975 OMX_VERSIONTYPE nVersion; 1976 OMX_U32 nPortIndex; 1977 OMX_U32 nFormat; 1978 OMX_TICKS nTimeStamp; 1979 } OMX_INTERLACEFORMATTYPE; 1980 #endif 1981 1982 /** 1983 * This structure is used to indicate the maximum number of buffers 1984 * that a port will hold during data flow. 1985 * 1986 * STRUCT MEMBERS: 1987 * nSize : Size of the structure in bytes 1988 * nVersion : OMX specification version info 1989 * nPortIndex : Port that this structure applies to 1990 * nHeldBufferCount : Read-only, maximum number of buffers that will be held 1991 */ 1992 typedef struct QOMX_HELDBUFFERCOUNTTYPE { 1993 OMX_U32 nSize; 1994 OMX_VERSIONTYPE nVersion; 1995 OMX_U32 nPortIndex; 1996 OMX_U32 nHeldBufferCount; 1997 } QOMX_HELDBUFFERCOUNTTYPE; 1998 1999 typedef enum QOMX_VIDEO_HIERARCHICALCODINGTYPE { 2000 QOMX_HIERARCHICALCODING_P = 0x01, 2001 QOMX_HIERARCHICALCODING_B = 0x02, 2002 } QOMX_VIDEO_HIERARCHICALCODINGTYPE; 2003 2004 typedef struct QOMX_VIDEO_HIERARCHICALLAYERS { 2005 OMX_U32 nSize; 2006 OMX_VERSIONTYPE nVersion; 2007 OMX_U32 nPortIndex; 2008 OMX_U32 nNumLayers; 2009 QOMX_VIDEO_HIERARCHICALCODINGTYPE eHierarchicalCodingType; 2010 } QOMX_VIDEO_HIERARCHICALLAYERS; 2011 2012 typedef struct QOMX_VIDEO_H264ENTROPYCODINGTYPE { 2013 OMX_U32 nSize; 2014 OMX_VERSIONTYPE nVersion; 2015 OMX_BOOL bCabac; 2016 OMX_U32 nCabacInitIdc; 2017 } QOMX_VIDEO_H264ENTROPYCODINGTYPE; 2018 2019 typedef enum QOMX_VIDEO_IFRAMESIZE_TYPE { 2020 QOMX_IFRAMESIZE_DEFAULT, 2021 QOMX_IFRAMESIZE_MEDIUM, 2022 QOMX_IFRAMESIZE_HUGE, 2023 QOMX_IFRAMESIZE_UNLIMITED, 2024 } QOMX_VIDEO_IFRAMESIZE_TYPE; 2025 2026 typedef struct QOMX_VIDEO_IFRAMESIZE { 2027 OMX_U32 nSize; 2028 OMX_VERSIONTYPE nVersion; 2029 QOMX_VIDEO_IFRAMESIZE_TYPE eType; 2030 } QOMX_VIDEO_IFRAMESIZE; 2031 2032 /* VIDEO POSTPROCESSING CTRLS AND ENUMS */ 2033 /* MUST KEEP SAME AS IN vpp.h */ 2034 #define QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ 256 2035 #define VPP_HQV_CONTROL_GLOBAL_START (VPP_HQV_CONTROL_CUST + 1) 2036 2037 typedef enum QOMX_VPP_HQV_MODE { 2038 VPP_HQV_MODE_OFF, 2039 VPP_HQV_MODE_AUTO, 2040 VPP_HQV_MODE_MANUAL, 2041 VPP_HQV_MODE_MAX 2042 } QOMX_VPP_HQV_MODE; 2043 2044 typedef enum QOMX_VPP_HQVCONTROLTYPE { 2045 VPP_HQV_CONTROL_CADE = 0x1, 2046 VPP_HQV_CONTROL_DI = 0x02, 2047 VPP_HQV_CONTROL_CNR = 0x04, 2048 VPP_HQV_CONTROL_AIE = 0x05, 2049 VPP_HQV_CONTROL_FRC = 0x06, 2050 VPP_HQV_CONTROL_CUST = 0x07, 2051 VPP_HQV_CONTROL_GLOBAL_DEMO = VPP_HQV_CONTROL_GLOBAL_START, 2052 VPP_HQV_CONTROL_MAX, 2053 } QOMX_VPP_HQVCONTROLTYPE; 2054 2055 typedef enum QOMX_VPP_HQV_DI_MODE { 2056 VPP_HQV_DI_MODE_OFF, 2057 VPP_HQV_DI_MODE_VIDEO_1F, 2058 VPP_HQV_DI_MODE_VIDEO_3F, 2059 VPP_HQV_DI_MODE_AUTO, 2060 VPP_HQV_DI_MODE_MAX, 2061 } QOMX_VPP_HQV_DI_MODE; 2062 2063 typedef enum QOMX_VPP_HQV_HUE_MODE { 2064 VPP_HQV_HUE_MODE_OFF, 2065 VPP_HQV_HUE_MODE_ON, 2066 VPP_HQV_HUE_MODE_MAX, 2067 } QOMX_VPP_HQV_HUE_MODE; 2068 2069 typedef enum QOMX_VPP_SPLIT_DIRECTION { 2070 VPP_HQV_SPLIT_LEFT_TO_RIGHT, 2071 VPP_HQV_SPLIT_RIGHT_TO_LEFT, 2072 VPP_HQV_SPLIT_TOP_TO_BOTTOM, 2073 VPP_HQV_SPLIT_BOTTOM_TO_TOP, 2074 VPP_HQV_SPLIT_MAX, 2075 } QOMX_VPP_SPLIT_DIRECTION; 2076 2077 typedef enum QOMX_VPP_HQV_FRC_MODE { 2078 VPP_HQV_FRC_MODE_OFF, 2079 VPP_HQV_FRC_MODE_LOW, 2080 VPP_HQV_FRC_MODE_MED, 2081 VPP_HQV_FRC_MODE_HIGH, 2082 VPP_HQV_FRC_MODE_MAX, 2083 } QOMX_VPP_HQV_FRC_MODE; 2084 2085 2086 typedef struct QOMX_VPP_HQVCTRL_CADE { 2087 QOMX_VPP_HQV_MODE mode; 2088 OMX_U32 level; 2089 OMX_S32 contrast; 2090 OMX_S32 saturation; 2091 } QOMX_VPP_HQVCTRL_CADE; 2092 2093 typedef struct QOMX_VPP_HQVCTRL_DI { 2094 QOMX_VPP_HQV_DI_MODE mode; 2095 } QOMX_VPP_HQVCTRL_DI; 2096 2097 typedef struct QOMX_VPP_HQVCTRL_CNR { 2098 QOMX_VPP_HQV_MODE mode; 2099 OMX_U32 level; 2100 } QOMX_VPP_HQVCTRL_CNR; 2101 2102 typedef struct QOMX_VPP_HQVCTRL_AIE { 2103 QOMX_VPP_HQV_MODE mode; 2104 QOMX_VPP_HQV_HUE_MODE hue_mode; 2105 OMX_U32 cade_level; 2106 OMX_U32 ltm_level; 2107 } QOMX_VPP_HQVCTRL_AIE; 2108 2109 typedef struct QOMX_VPP_HQVCTRL_CUSTOM { 2110 OMX_U32 id; 2111 OMX_U32 len; 2112 OMX_U8 data[QOMX_VPP_HQV_CUSTOMPAYLOAD_SZ]; 2113 } QOMX_VPP_HQVCTRL_CUSTOM; 2114 2115 typedef struct QOMX_VPP_HQVCTRL_GLOBAL_DEMO { 2116 OMX_U32 process_percent; 2117 QOMX_VPP_SPLIT_DIRECTION process_direction; 2118 } QOMX_VPP_HQVCTRL_GLOBAL_DEMO; 2119 2120 typedef struct QOMX_VPP_HQVCTRL_FRC { 2121 QOMX_VPP_HQV_FRC_MODE mode; 2122 } QOMX_VPP_HQVCTRL_FRC; 2123 2124 /* VIDEO POSTPROCESSING OMX CTRLS */ 2125 typedef struct QOMX_VPP_HQVCONTROL { 2126 OMX_U32 nSize; 2127 OMX_VERSIONTYPE nVersion; 2128 QOMX_VPP_HQV_MODE mode; 2129 QOMX_VPP_HQVCONTROLTYPE ctrl_type; 2130 union { 2131 QOMX_VPP_HQVCTRL_CADE cade; 2132 QOMX_VPP_HQVCTRL_DI di; 2133 QOMX_VPP_HQVCTRL_CNR cnr; 2134 QOMX_VPP_HQVCTRL_AIE aie; 2135 QOMX_VPP_HQVCTRL_CUSTOM custom; 2136 QOMX_VPP_HQVCTRL_GLOBAL_DEMO global_demo; 2137 QOMX_VPP_HQVCTRL_FRC frc; 2138 }; 2139 } QOMX_VPP_HQVCONTROL; 2140 2141 /* STRUCTURE TO TURN VPP ON */ 2142 typedef struct QOMX_VPP_ENABLE { 2143 OMX_U32 nSize; 2144 OMX_VERSIONTYPE nVersion; 2145 OMX_BOOL enable_vpp; 2146 } QOMX_VPP_ENABLE; 2147 2148 typedef struct QOMX_EXTRADATA_ENABLE { 2149 OMX_U32 nSize; 2150 OMX_VERSIONTYPE nVersion; 2151 OMX_U32 nPortIndex; 2152 OMX_BOOL bEnable; 2153 } QOMX_EXTRADATA_ENABLE; 2154 2155 typedef enum OMX_QOMX_VIDEO_MBISTATISTICSTYPE { 2156 QOMX_MBI_STATISTICS_MODE_DEFAULT = 0, 2157 QOMX_MBI_STATISTICS_MODE_1 = 0x01, 2158 QOMX_MBI_STATISTICS_MODE_2 = 0x02, 2159 } OMX_QOMX_VIDEO_MBISTATISTICSTYPE; 2160 2161 typedef struct OMX_QOMX_VIDEO_MBI_STATISTICS { 2162 OMX_U32 nSize; 2163 OMX_VERSIONTYPE nVersion; 2164 OMX_U32 nPortIndex; 2165 OMX_QOMX_VIDEO_MBISTATISTICSTYPE eMBIStatisticsType; 2166 } OMX_QOMX_VIDEO_MBI_STATISTICS; 2167 2168 typedef struct QOMX_VIDEO_BATCHSIZETYPE { 2169 OMX_U32 nSize; 2170 OMX_VERSIONTYPE nVersion; 2171 OMX_U32 nPortIndex; 2172 OMX_U32 nBatchSize; 2173 } QOMX_VIDEO_BATCHSIZETYPE; 2174 2175 typedef struct QOMX_VIDEO_CLIENT_EXTRADATA { 2176 OMX_U32 nSize; 2177 OMX_VERSIONTYPE nVersion; 2178 OMX_U32 nPortIndex; 2179 OMX_U32 nFd; 2180 OMX_U32 nExtradataAllocSize; 2181 OMX_U32 nExtradataSize; 2182 } QOMX_VIDEO_CLIENT_EXTRADATATYPE; 2183 2184 #if defined(__cplusplus) && defined(USE_CAMERA_METABUFFER_UTILS) 2185 2186 #define CAM_META_BUFFER_EVENT_PERF 0x01 2187 2188 /** 2189 * Camera1 meta-buffer payload create/access/modify utility 2190 */ 2191 struct MetaBufferUtil { 2192 2193 enum { 2194 INT_OFFSET = 1, 2195 INT_SIZE = 2, 2196 INT_USAGE = 3, 2197 INT_TIMESTAMP = 4, 2198 INT_COLORFORMAT = 5, 2199 INT_BUFINDEX = 6, 2200 INT_BUFEVENT = 7, 2201 INT_TOTAL = INT_BUFINDEX, 2202 }; 2203 2204 static int getNumFdsForBatch(int batchSize) { 2205 return batchSize; 2206 } 2207 static int getNumIntsForBatch(int batchSize) { 2208 return batchSize * INT_TOTAL; 2209 } 2210 static int getBatchSize(const native_handle_t *hnd) { 2211 return MetaBufferUtil::isHandleSane(hnd) ? hnd->numFds : -1; 2212 } 2213 2214 /* getters */ 2215 /* return a fd at index or -1 if index is invalid */ 2216 static int getFdAt(const native_handle_t *hnd, int index) { 2217 return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] : -1; 2218 } 2219 /* return a int of type at index or -1 if index or type is invalid */ 2220 static int getIntAt(const native_handle_t *hnd, int index, int type) { 2221 int idx = MetaBufferUtil::getIntIndex(hnd, index, type); 2222 return idx < 0 ? -1 : hnd->data[idx]; 2223 } 2224 2225 /* setters */ 2226 /* replace the fd at index and return 0. Return -1 if index is invalid */ 2227 static int setFdAt(native_handle_t *hnd, int index, int fd) { 2228 return (MetaBufferUtil::isHandleSane(hnd) && (index < hnd->numFds)) ? hnd->data[index] = fd, 0 : -1; 2229 } 2230 /* replace an int of type at index and return 0. Return -1 if index or type is invalid */ 2231 static int setIntAt(native_handle_t *hnd, int index, int type, int value) { 2232 int idx = MetaBufferUtil::getIntIndex(hnd, index, type); 2233 return idx < 0 ? -1 : hnd->data[idx] = value, 0; 2234 } 2235 2236 private: 2237 static bool isHandleSane(const native_handle_t *hnd) { 2238 return hnd && hnd->version == sizeof(native_handle_t); 2239 } 2240 2241 static int getIntIndex(const native_handle_t *hnd, int index, int type) { 2242 int idx = index + type * MetaBufferUtil::getBatchSize(hnd); 2243 return (MetaBufferUtil::isHandleSane(hnd) && (idx < (hnd->numInts + hnd->numFds))) ? idx : -1; 2244 } 2245 }; 2246 2247 #endif // __cplusplus 2248 2249 typedef enum QOMX_VIDEO_DITHERTYPE { 2250 QOMX_DITHER_DISABLE = 0, 2251 QOMX_DITHER_COLORSPACE_EXCEPT_BT2020 = 0x01, 2252 QOMX_DITHER_ALL_COLORSPACE = 0x02, 2253 } QOMX_VIDEO_DITHERTYPE; 2254 2255 typedef struct QOMX_VIDEO_DITHER_CONTROL { 2256 OMX_U32 nSize; 2257 OMX_VERSIONTYPE nVersion; 2258 OMX_U32 nPortIndex; 2259 QOMX_VIDEO_DITHERTYPE eDitherType; 2260 } QOMX_VIDEO_DITHER_CONTROL; 2261 2262 typedef enum QOMX_VIDEO_SLICEMODETYPE { 2263 QOMX_SLICEMODE_DISABLE = 0, 2264 QOMX_SLICEMODE_MB_COUNT = 0x01, 2265 QOMX_SLICEMODE_BYTE_COUNT = 0x02, 2266 } QOMX_VIDEO_SLICEMODETYPE; 2267 2268 typedef struct QOMX_VIDEO_PARAM_SLICE_SPACING_TYPE { 2269 OMX_U32 nSize; 2270 OMX_VERSIONTYPE nVersion; 2271 OMX_U32 nPortIndex; 2272 QOMX_VIDEO_SLICEMODETYPE eSliceMode; 2273 OMX_U32 nSliceSize; 2274 } QOMX_VIDEO_PARAM_SLICE_SPACING_TYPE; 2275 2276 #ifdef __cplusplus 2277 } 2278 #endif /* __cplusplus */ 2279 2280 #endif /* __OMX_QCOM_EXTENSIONS_H__ */ 2281