1 /* 2 * Copyright (C) Texas Instruments - http://www.ti.com/ 3 * 4 * This library is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU Lesser General Public 6 * License as published by the Free Software Foundation; either 7 * version 2.1 of the License, or (at your option) any later version. 8 * 9 * 10 * This library is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 * Lesser General Public License for more details. 14 * 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19 */ 20 21 #ifndef OMX_VIDDEC_UTILS__H 22 #define OMX_VIDDEC_UTILS__H 23 24 #define newmalloc(x) malloc(x) 25 #define newfree(z) free(z) 26 #ifdef ANDROID 27 /* Log for Android system*/ 28 #include <utils/Log.h> 29 #define LOG_TAG "TI_Video_Decoder" 30 #endif 31 #include <cutils/properties.h> 32 33 #ifdef UNDER_CE 34 #include <windows.h> 35 #include <oaf_osal.h> 36 #include <omx_core.h> 37 #include <pthread.h> 38 #include <stdlib.h> 39 #else 40 #define _XOPEN_SOURCE 600 41 #include <sys/select.h> 42 #include <signal.h> 43 #include <pthread.h> 44 #include <wchar.h> 45 #include <unistd.h> 46 #include <sys/types.h> 47 #include <malloc.h> 48 #include <memory.h> 49 #include <sys/wait.h> 50 #include <sys/types.h> 51 #include <sys/stat.h> 52 #include <fcntl.h> 53 #include <dbapi.h> 54 #include <string.h> 55 #include <stdio.h> 56 #include <dlfcn.h> 57 #include <stdarg.h> 58 #include <errno.h> 59 #include <sys/ioctl.h> 60 #include <sys/time.h> 61 #include <stdlib.h> 62 #include <semaphore.h> 63 #endif 64 65 #ifndef KHRONOS_1_1 66 #define KHRONOS_1_1 67 #endif 68 69 #define KHRONOS_1_2 70 #ifndef VIDDEC_SPARK_CODE 71 #define VIDDEC_SPARK_CODE 72 #endif 73 74 #ifndef VIDDEC_SN_R8_14 75 #define VIDDEC_SN_R8_14 76 #endif 77 78 #define VIDDEC_WAIT_CODE() sched_yield() 79 80 #ifndef UNDER_CE 81 #ifndef __ENV_CHANGE__ 82 #define __ENV_CHANGE__ 83 #endif 84 #endif 85 86 #ifndef VIDDEC_ACTIVATEPARSER 87 #define VIDDEC_ACTIVATEPARSER 88 #endif 89 90 #define VIDDEC_WMVPOINTERFIXED 91 #define VIDDEC_HANDLE_FULL_STRM_PROP_OBJ 92 93 #include <sched.h> 94 #include <OMX_Core.h> 95 #include <OMX_TI_Debug.h> 96 #include "OMX_VideoDecoder.h" 97 #include "OMX_VidDec_CustomCmd.h" 98 #include "OMX_TI_Common.h" 99 100 101 #ifdef KHRONOS_1_1 102 typedef struct OMX_CONFIG_MACROBLOCKERRORMAPTYPE_TI { 103 OMX_U32 nSize; 104 OMX_VERSIONTYPE nVersion; 105 OMX_U32 nPortIndex; 106 OMX_U32 nErrMapSize; /* Size of the Error Map in bytes*/ 107 OMX_U8 ErrMap[(864 * 480) / 256]; /* Error map hint */ 108 } OMX_CONFIG_MACROBLOCKERRORMAPTYPE_TI; 109 #endif 110 111 #define VIDDEC_MEMLEVELS 5 112 typedef enum VIDDEC_ENUM_MEMLEVELS{ 113 VIDDDEC_Enum_MemLevel0 = 0, 114 VIDDDEC_Enum_MemLevel1, 115 VIDDDEC_Enum_MemLevel2, 116 VIDDDEC_Enum_MemLevel3, 117 VIDDDEC_Enum_MemLevel4 118 }VIDDEC_ENUM_MEMLEVELS; 119 120 #include "LCML_DspCodec.h" 121 #include "LCML_Types.h" 122 #include "LCML_CodecInterface.h" 123 124 #ifdef __PERF_INSTRUMENTATION__ 125 #include "perf.h" 126 #endif 127 128 /*#define RESOURCE_MANAGER_ENABLED*/ 129 #ifdef RESOURCE_MANAGER_ENABLED 130 #include <ResourceManagerProxyAPI.h> 131 #endif 132 133 #ifdef __ENV_CHANGE__ 134 #ifndef ENV_CHANGE_DEF_AUTO 135 #define ENV_CHANGE_DEF_AUTO "ON" 136 #endif 137 #ifndef ENV_CHANGE_DEF_VALUE 138 #define ENV_CHANGE_DEF_VALUE "H264" 139 #endif 140 #define ENV_CHANGE_VAL_ON "ON" 141 #define ENV_CHANGE_NAME_AUTO "ENV_CHANGE_AUTO" 142 #define ENV_CHANGE_NAME_VALUE "ENV_CHANGE_VALUE" 143 #define ENV_CHANGE_SET_H264 "H264" 144 #define ENV_CHANGE_SET_AVC "AVC" 145 #define ENV_CHANGE_SET_H263 "H263" 146 #define ENV_CHANGE_SET_MPEG2 "MPEG2" 147 #define ENV_CHANGE_SET_MPEG4 "MPEG4" 148 #define ENV_CHANGE_SET_WMV9 "WMV" 149 #ifdef VIDDEC_SPARK_CODE 150 #define ENV_CHANGE_SET_SPARK "SPARK" 151 #endif 152 #endif 153 154 #define VIDDEC_COMPONENTROLES_H263 "video_decoder.h263" 155 #define VIDDEC_COMPONENTROLES_H264 "video_decoder.avc" 156 #define VIDDEC_COMPONENTROLES_MPEG2 "video_decoder.mpeg2" 157 #define VIDDEC_COMPONENTROLES_MPEG4 "video_decoder.mpeg4" 158 #define VIDDEC_COMPONENTROLES_WMV9 "video_decoder.wmv" 159 #ifdef VIDDEC_SPARK_CODE 160 #define VIDDEC_COMPONENTROLES_SPARK "video_decoder.spark" 161 #endif 162 163 #define __STD_COMPONENT__ 164 165 /* 166 * MAX_PRIVATE_IN_BUFFERS and MAX_PRIVATE_OUT_BUFFERS must NOT be 167 * greater than MAX_PRIVATE_BUFFERS. MAX_PRIVATE_BUFFERS is set 168 * to 6 because 6 overlay buffers are currently being used for 169 * playback 170 */ 171 #define MAX_PRIVATE_IN_BUFFERS 6 172 #define MAX_PRIVATE_OUT_BUFFERS 6 173 #define MAX_PRIVATE_BUFFERS 6 174 #define NUM_OF_PORTS 2 175 #define VIDDEC_MAX_NAMESIZE 128 176 #define VIDDEC_NOPORT 0xfffffffe 177 #define VIDDEC_MPU 50 178 179 #define IUALG_CMD_SETSTATUS 3 180 181 #define VERSION_MAJOR 1 182 #ifdef KHRONOS_1_1 183 #define VERSION_MINOR 0 184 #else 185 #define VERSION_MINOR 0 186 #endif 187 #define VERSION_REVISION 0 188 #define VERSION_STEP 0 189 190 #define VIDDEC_COLORFORMAT422 OMX_COLOR_FormatCbYCrY 191 #define VIDDEC_COLORFORMAT420 OMX_COLOR_FormatYUV420Planar /*OMX_COLOR_FormatYUV420PackedPlanar is not working with OpenCore*/ 192 #define VIDDEC_COLORFORMATUNUSED OMX_COLOR_FormatUnused 193 194 #define VIDDEC_ZERO 0 195 #define VIDDEC_ONE 1 196 #define VIDDEC_MINUS -1 197 #define VIDDEC_WMVHEADER 20 198 199 #define VIDDEC_BUFFERMINCOUNT VIDDEC_ONE 200 #define VIDDEC_PORT_ENABLED OMX_TRUE 201 #define VIDDEC_PORT_POPULATED OMX_FALSE 202 #define VIDDEC_PORT_DOMAIN OMX_PortDomainVideo 203 204 #define VIDDEC_DEFAULT_INPUT_BUFFER_SIZE 614400 205 #define VIDDEC_DEFAULT_OUTPUT_BUFFER_SIZE 614400 206 #define VIDDEC_DEFAULT_WIDTH 640 207 #define VIDDEC_DEFAULT_HEIGHT 480 208 #define VIDDEC_DEFAULT_PROCESSMODE 0 /* 0=frmmode; 1=strmmode */ 209 #define VIDDEC_DEFAULT_H264BITSTRMFMT 0 /* 0=bytestrm; 1->4=NAL-bitstrm */ 210 #define MAX_CCD_CNT 128 211 #define MAX_NALUDATA_CNT 128 212 213 #define VIDDEC_INPUT_PORT_COMPRESSIONFORMAT OMX_VIDEO_CodingMPEG4 214 #define VIDDEC_OUTPUT_PORT_COMPRESSIONFORMAT OMX_VIDEO_CodingUnused 215 #define VIDDEC_INPUT_PORT_BUFFERSUPPLIER VIDDEC_ZERO 216 #define VIDDEC_OUTPUT_PORT_BUFFERSUPPLIER VIDDEC_ZERO 217 218 #define VIDDEC_MIMETYPEH263 "H263" 219 #define VIDDEC_MIMETYPEH264 "H264" 220 #define VIDDEC_MIMETYPEMPEG4 "MPEG4" 221 #define VIDDEC_MIMETYPEWMV "WMV" 222 #define VIDDEC_MIMETYPEYUV "YUV" 223 #ifdef VIDDEC_SPARK_CODE 224 #define VIDDEC_MIMETYPEWMV_SPARK "SPARK" 225 #endif 226 227 #define VIDDEC_INPUT_PORT_NATIVERENDER NULL 228 #define VIDDEC_INPUT_PORT_STRIDE VIDDEC_MINUS 229 #define VIDDEC_INPUT_PORT_SLICEHEIGHT VIDDEC_MINUS 230 231 #ifdef __STD_COMPONENT__ 232 #define VIDDEC_INPUT_PORT_BITRATE (64000) 233 #define VIDDEC_INPUT_PORT_FRAMERATE (15 << 16) 234 #else 235 #define VIDDEC_INPUT_PORT_BITRATE VIDDEC_MINUS 236 #define VIDDEC_INPUT_PORT_FRAMERATE VIDDEC_MINUS 237 #endif 238 #define VIDDEC_INPUT_PORT_FLAGERRORCONCEALMENT OMX_FALSE 239 240 #define VIDDEC_OUTPUT_PORT_NATIVERENDER NULL 241 #define VIDDEC_OUTPUT_PORT_STRIDE VIDDEC_ZERO 242 #define VIDDEC_OUTPUT_PORT_SLICEHEIGHT VIDDEC_ZERO 243 #define VIDDEC_OUTPUT_PORT_BITRATE VIDDEC_ZERO 244 #define VIDDEC_OUTPUT_PORT_FRAMERATE VIDDEC_ZERO 245 #define VIDDEC_OUTPUT_PORT_FLAGERRORCONCEALMENT OMX_FALSE 246 247 #define VIDDEC_FACTORFORMAT422 2 248 #define VIDDEC_FACTORFORMAT420 (1.5) 249 250 #define VIDDEC_DEFAULT_MPEG4_PORTINDEX VIDDEC_INPUT_PORT 251 #define VIDDEC_DEFAULT_MPEG4_SLICEHEADERSPACING VIDDEC_ZERO 252 #define VIDDEC_DEFAULT_MPEG4_SVH OMX_FALSE 253 #define VIDDEC_DEFAULT_MPEG4_GOV OMX_FALSE 254 #define VIDDEC_DEFAULT_MPEG4_PFRAMES VIDDEC_MINUS 255 #define VIDDEC_DEFAULT_MPEG4_BFRAMES VIDDEC_MINUS 256 #define VIDDEC_DEFAULT_MPEG4_IDCVLCTHRESHOLD VIDDEC_MINUS 257 #define VIDDEC_DEFAULT_MPEG4_ACPRED OMX_FALSE 258 #define VIDDEC_DEFAULT_MPEG4_MAXPACKETSIZE VIDDEC_DEFAULT_INPUT_BUFFER_SIZE 259 #define VIDDEC_DEFAULT_MPEG4_TIMEINCRES VIDDEC_MINUS 260 #define VIDDEC_DEFAULT_MPEG4_PROFILE OMX_VIDEO_MPEG4ProfileSimple 261 #define VIDDEC_DEFAULT_MPEG4_LEVEL OMX_VIDEO_MPEG4Level1 262 #define VIDDEC_DEFAULT_MPEG4_ALLOWEDPICTURETYPES VIDDEC_MINUS 263 #define VIDDEC_DEFAULT_MPEG4_HEADEREXTENSION VIDDEC_ONE 264 #define VIDDEC_DEFAULT_MPEG4_REVERSIBLEVLC OMX_FALSE 265 266 #define VIDDEC_DEFAULT_MPEG2_PORTINDEX VIDDEC_INPUT_PORT 267 #define VIDDEC_DEFAULT_MPEG2_PFRAMES VIDDEC_MINUS 268 #define VIDDEC_DEFAULT_MPEG2_BFRAMES VIDDEC_MINUS 269 #define VIDDEC_DEFAULT_MPEG2_PROFILE OMX_VIDEO_MPEG2ProfileSimple 270 #define VIDDEC_DEFAULT_MPEG2_LEVEL OMX_VIDEO_MPEG2LevelLL 271 #define VIDDEC_DEFAULT_H264_PORTINDEX VIDDEC_INPUT_PORT 272 #define VIDDEC_DEFAULT_H264_SLICEHEADERSPACING VIDDEC_ZERO 273 #define VIDDEC_DEFAULT_H264_PFRAMES VIDDEC_MINUS 274 #define VIDDEC_DEFAULT_H264_BFRAMES VIDDEC_MINUS 275 #define VIDDEC_DEFAULT_H264_USEHADAMARD OMX_FALSE 276 #define VIDDEC_DEFAULT_H264_REFFRAMES VIDDEC_MINUS 277 #define VIDDEC_DEFAULT_H264_REFIDX10ACTIVEMINUS1 VIDDEC_MINUS 278 #define VIDDEC_DEFAULT_H264_REFIDX11ACTIVEMINUS1 VIDDEC_MINUS 279 #define VIDDEC_DEFAULT_H264_ENABLEUEP OMX_FALSE 280 #define VIDDEC_DEFAULT_H264_ENABLEFMO OMX_FALSE 281 #define VIDDEC_DEFAULT_H264_ENABLEASO OMX_FALSE 282 #define VIDDEC_DEFAULT_H264_ENABLERS OMX_FALSE 283 #define VIDDEC_DEFAULT_H264_PROFILE OMX_VIDEO_AVCProfileBaseline 284 #define VIDDEC_DEFAULT_H264_LEVEL OMX_VIDEO_AVCLevel1 285 #define VIDDEC_DEFAULT_H264_ALLOWEDPICTURETYPES VIDDEC_MINUS 286 #define VIDDEC_DEFAULT_H264_FRAMEMBSONLY OMX_FALSE 287 #define VIDDEC_DEFAULT_H264_MBAFF OMX_FALSE 288 #define VIDDEC_DEFAULT_H264_ENTROPYCODINGCABAC OMX_FALSE 289 #define VIDDEC_DEFAULT_H264_WEIGHTEDPPREDICTION OMX_FALSE 290 #define VIDDEC_DEFAULT_H264_WEIGHTEDBIPREDICITONMODE VIDDEC_MINUS 291 #define VIDDEC_DEFAULT_H264_CONSTIPRED OMX_FALSE 292 #define VIDDEC_DEFAULT_H264_DIRECT8X8INFERENCE OMX_FALSE 293 #define VIDDEC_DEFAULT_H264_DIRECTSPATIALTEMPORAL OMX_FALSE 294 #define VIDDEC_DEFAULT_H264_CABACINITIDC VIDDEC_MINUS 295 #define VIDDEC_DEFAULT_H264_LOOPFILTERMODE OMX_VIDEO_AVCLoopFilterDisable 296 297 #define VIDDEC_DEFAULT_H263_PORTINDEX VIDDEC_INPUT_PORT 298 #define VIDDEC_DEFAULT_H263_PFRAMES VIDDEC_MINUS 299 #define VIDDEC_DEFAULT_H263_BFRAMES VIDDEC_MINUS 300 #define VIDDEC_DEFAULT_H263_PROFILE OMX_VIDEO_H263ProfileBaseline 301 #define VIDDEC_DEFAULT_H263_LEVEL OMX_VIDEO_H263Level10 302 #define VIDDEC_DEFAULT_H263_PLUSPTYPEALLOWED OMX_FALSE 303 #define VIDDEC_DEFAULT_H263_ALLOWEDPICTURETYPES OMX_VIDEO_PictureTypeMax 304 #define VIDDEC_DEFAULT_H263_FORCEROUNDINGTYPETOZERO OMX_TRUE 305 #define VIDDEC_DEFAULT_H263_PICTUREHEADERREPETITION 0 306 #define VIDDEC_DEFAULT_H263_GOBHEADERINTERVAL 1 307 308 #define VIDDEC_DEFAULT_WMV_PORTINDEX VIDDEC_INPUT_PORT 309 #define VIDDEC_DEFAULT_WMV_FORMAT OMX_VIDEO_WMVFormat9 310 311 #define VIDDEC_PIPE_WRITE VIDDEC_ONE 312 #define VIDDEC_PIPE_READ VIDDEC_ZERO 313 314 #define VIDDEC_PADDING_FULL 256 315 #define VIDDEC_PADDING_HALF VIDDEC_PADDING_FULL / 2 316 317 #define VIDDEC_ALIGNMENT 4 318 319 #define VIDDEC_CLEARFLAGS 0 320 #define H264VDEC_SN_MAX_NALUNITS 1200 321 322 #define VIDDEC_RM_FREC_MPEG4_QCIF 30 323 #define VIDDEC_RM_FREC_MPEG4_CIF 80 324 #define VIDDEC_RM_FREC_MPEG4_VGA 165 325 #define VIDDEC_RM_FREC_MPEG4_720P 401 326 327 #define VIDDEC_RM_FREC_MPEG2_QCIF 30 328 #define VIDDEC_RM_FREC_MPEG2_CIF 80 329 #define VIDDEC_RM_FREC_MPEG2_VGA 165 330 331 #define VIDDEC_RM_FREC_H263_QCIF 25 332 #define VIDDEC_RM_FREC_H263_CIF 60 333 #define VIDDEC_RM_FREC_H263_VGA 165 334 335 #define VIDDEC_RM_FREC_H264_QCIF 85 336 #define VIDDEC_RM_FREC_H264_CIF 160 337 #define VIDDEC_RM_FREC_H264_VGA 260 338 339 #define VIDDEC_RM_FREC_WMV_QCIF 55 340 #define VIDDEC_RM_FREC_WMV_CIF 100 341 #define VIDDEC_RM_FREC_WMV_VGA 300 342 343 #ifdef VIDDEC_SPARK_CODE 344 #define VIDDEC_RM_FREC_SPARK_QCIF 55 345 #define VIDDEC_RM_FREC_SPARK_CIF 100 346 #define VIDDEC_RM_FREC_SPARK_VGA 300 347 #endif 348 349 #define VIDDEC_MIN_WIDTH 176 350 #define VIDDEC_MIN_HEIGHT 144 351 352 #define VIDDEC_QCIF_WIDTH 176 353 #define VIDDEC_QCIF_HEIGHT 144 354 355 #define VIDDEC_QVGA_WIDTH 320 356 #define VIDDEC_QVGA_HEIGHT 240 357 358 #define VIDDEC_CIF_WIDTH 352 359 #define VIDDEC_CIF_HEIGHT 288 360 361 #define VIDDEC_VGA_WIDTH 640 362 #define VIDDEC_VGA_HEIGHT 480 363 364 #define VIDDEC_D1MAX_WIDTH 864 365 #define VIDDEC_D1MAX_HEIGHT VIDDEC_D1MAX_WIDTH 366 367 /* In the current release the suport for : VIDDEC_MAX_FRAMERATE & VIDDEC_MAX_BITRATE 368 * is not provided by the algorithm. But is require to set this field to a non-zero value */ 369 #define VIDDEC_MAX_FRAMERATE 30000 /* Max frame rate to be suported * 1000 */ 370 #define VIDDEC_MAX_BITRATE 8000000 /* Max bit rate (in bits per second) to be suported */ 371 372 #define VIDDEC_WMV_PROFILE_ID0 0 373 #define VIDDEC_WMV_PROFILE_ID1 1 374 #define VIDDEC_WMV_PROFILE_ID2 2 375 #define VIDDEC_WMV_PROFILE_ID3 3 376 #define VIDDEC_WMV_PROFILE_ID4 4 377 #define VIDDEC_WMV_PROFILE_ID5 5 378 #define VIDDEC_WMV_PROFILE_ID6 6 379 #define VIDDEC_WMV_PROFILE_ID7 7 380 #define VIDDEC_WMV_PROFILE_ID8 8 381 382 #define VIDDEC_MAX_QUEUE_SIZE 256 383 #define VIDDEC_WMV_BUFFER_OFFSET (255 - 4) 384 #define VIDDEC_WMV_ELEMSTREAM 0 385 #define VIDDEC_WMV_RCVSTREAM 1 386 387 #define VIDDEC_SN_WMV_ELEMSTREAM 1 388 #define VIDDEC_SN_WMV_RCVSTREAM 2 389 390 #define CSD_POSITION 51 /*Codec Specific Data position on the "stream propierties object"(ASF spec)*/ 391 392 #ifndef KHRONOS_1_2 393 #define OMX_BUFFERFLAG_CODECCONFIG 0x00000080 394 #endif 395 396 typedef struct VIDDEC_CUSTOM_PARAM 397 { 398 unsigned char cCustomParamName[128]; 399 OMX_INDEXTYPE nCustomParamIndex; 400 } VIDDEC_CUSTOM_PARAM; 401 402 typedef enum VIDDEC_CUSTOM_PARAM_INDEX 403 { 404 #ifdef KHRONOS_1_2 405 VideoDecodeCustomParamProcessMode = (OMX_IndexVendorStartUnused + 1), 406 #else 407 VideoDecodeCustomParamProcessMode = (OMX_IndexIndexVendorStartUnused + 1), 408 #endif 409 VideoDecodeCustomParamH264BitStreamFormat, 410 VideoDecodeCustomParamWMVProfile, 411 VideoDecodeCustomParamWMVFileType, 412 VideoDecodeCustomParamParserEnabled, 413 VideoDecodeCustomParamIsNALBigEndian, 414 #ifdef VIDDEC_SPARK_CODE 415 VideoDecodeCustomParamIsSparkInput, 416 #endif 417 VideoDecodeCustomConfigDebug 418 419 #ifdef ANDROID /*To be use by opencore multimedia framework*/ 420 , 421 PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX = 0xFF7A347 422 #endif 423 } VIDDEC_CUSTOM_PARAM_INDEX; 424 425 typedef enum VIDDEC_LCML_STATES 426 { 427 VidDec_LCML_State_Unload = 0, 428 VidDec_LCML_State_Load, 429 VidDec_LCML_State_Init, 430 VidDec_LCML_State_Pause, 431 VidDec_LCML_State_Start, 432 VidDec_LCML_State_Stop, 433 VidDec_LCML_State_Destroy 434 } VIDDEC_LCML_STATES; 435 436 typedef enum VIDDEC_RMPROXY_STATES 437 { 438 VidDec_RMPROXY_State_Unload = 0, 439 VidDec_RMPROXY_State_Load, 440 VidDec_RMPROXY_State_Registered, 441 } VIDDEC_RMPROXY_STATES; 442 443 /* ======================================================================= */ 444 /** 445 * @def WMV9DEC_YUVFORMAT_XYZ : YUV ouput chroma format. 446 */ 447 /* ==================================================================== */ 448 #define WMV9VIDDEC_YUVFORMAT_PLANAR420 (1) 449 #define WMV9VIDDEC_YUVFORMAT_INTERLEAVED422 (4) 450 451 /* ======================================================================= */ 452 /** 453 * @def MP4VDEC_YUVFORMAT_XYZ : YUV ouput chroma format. 454 */ 455 /* ==================================================================== */ 456 #define MP4VIDDEC_YUVFORMAT_PLANAR420 (1) 457 #define MP4VIDDEC_YUVFORMAT_INTERLEAVED422 (4) 458 459 /* ======================================================================= */ 460 /** 461 * @def H264VDEC_YUVFORMAT_XYZ : YUV ouput chroma format. 462 */ 463 /* ==================================================================== */ 464 #define H264VIDDEC_YUVFORMAT_PLANAR420 (0) 465 #define H264VIDDEC_YUVFORMAT_INTERLEAVED422 (1) 466 467 #define MP2VIDDEC_YUVFORMAT_PLANAR420 (1) 468 #define MP2VIDDEC_YUVFORMAT_INTERLEAVED422 (4) 469 470 /* ======================================================================= */ 471 /** 472 * @def MP4VDEC_YUVFORMAT_XYZ : YUV ouput chroma format. 473 */ 474 /* ==================================================================== */ 475 #define SPARKVIDDEC_YUVFORMAT_PLANAR420 (1) 476 #define SPARKVIDDEC_YUVFORMAT_INTERLEAVED422 (4) 477 478 typedef enum VIDDEC_PORT_INDEX 479 { 480 VIDDEC_INPUT_PORT, 481 VIDDEC_OUTPUT_PORT 482 }VIDDEC_PORT_INDEX; 483 484 typedef enum VIDDEC_DEFAULT_INPUT_INDEX 485 { 486 VIDDEC_DEFAULT_INPUT_INDEX_H263, 487 VIDDEC_DEFAULT_INPUT_INDEX_H264, 488 VIDDEC_DEFAULT_INPUT_INDEX_MPEG4, 489 VIDDEC_DEFAULT_INPUT_INDEX_WMV9, 490 VIDDEC_DEFAULT_INPUT_INDEX_MPEG2, 491 #ifdef VIDDEC_SPARK_CODE 492 VIDDEC_DEFAULT_INPUT_INDEX_SPARK, 493 #endif 494 VIDDEC_DEFAULT_INPUT_INDEX_MAX = 0x7ffffff 495 }VIDDEC_DEFAULT_INPUT_INDEX; 496 497 typedef enum VIDDEC_DEFAULT_OUTPUT_INDEX 498 { 499 VIDDEC_DEFAULT_OUTPUT_INDEX_INTERLEAVED422, 500 VIDDEC_DEFAULT_OUTPUT_INDEX_PLANAR420, 501 VIDDEC_DEFAULT_OUTPUT_INDEX_MAX = 0x7ffffff 502 }VIDDEC_DEFAULT_OUTPUT_INDEX; 503 504 typedef enum VIDDEC_BUFFER_OWNER 505 { 506 VIDDEC_BUFFER_WITH_CLIENT = 0x0, 507 VIDDEC_BUFFER_WITH_COMPONENT, 508 VIDDEC_BUFFER_WITH_DSP, 509 VIDDEC_BUFFER_WITH_TUNNELEDCOMP 510 } VIDDEC_BUFFER_OWNER; 511 512 typedef enum VIDDEC_TYPE_ALLOCATE 513 { 514 VIDDEC_TALLOC_USEBUFFER, 515 VIDDEC_TALLOC_ALLOCBUFFER 516 }VIDDEC_TYPE_ALLOCATE; 517 518 typedef enum VIDDEC_INIT_VALUE 519 { 520 VIDDEC_INIT_ALL, 521 VIDDEC_INIT_STRUCTS, 522 VIDDEC_INIT_VARS, 523 VIDDEC_INIT_H263, 524 VIDDEC_INIT_H264, 525 VIDDEC_INIT_MPEG2, 526 VIDDEC_INIT_MPEG4, 527 VIDDEC_INIT_WMV9, 528 #ifdef VIDDEC_SPARK_CODE 529 VIDDEC_INIT_SPARK, 530 #endif 531 VIDDEC_INIT_PLANAR420, 532 VIDDEC_INIT_INTERLEAVED422, 533 VIDDEC_INIT_IDLEEXECUTING, 534 VIIDE_INIT_MAX = 0x7ffffff 535 }VIDDEC_INIT_VALUE; 536 537 typedef enum VIDDEC_WMV_PROFILES 538 { 539 VIDDEC_WMV_PROFILE0, 540 VIDDEC_WMV_PROFILE1, 541 VIDDEC_WMV_PROFILE2, 542 VIDDEC_WMV_PROFILE3, 543 VIDDEC_WMV_PROFILE4, 544 VIDDEC_WMV_PROFILE5, 545 VIDDEC_WMV_PROFILE6, 546 VIDDEC_WMV_PROFILE7, 547 VIDDEC_WMV_PROFILE8, 548 VIDDEC_WMV_PROFILEMAX 549 }VIDDEC_WMV_PROFILES; 550 551 typedef struct VIDDEC_BUFFER_PRIVATE 552 { 553 OMX_BUFFERHEADERTYPE* pBufferHdr; 554 OMX_PTR pUalgParam; 555 OMX_U32 nUalgParamSize; 556 VIDDEC_BUFFER_OWNER eBufferOwner; 557 VIDDEC_TYPE_ALLOCATE bAllocByComponent; 558 OMX_U32 nNumber; 559 OMX_U8* pOriginalBuffer; 560 #ifdef VIDDEC_WMVPOINTERFIXED 561 OMX_U8* pTempBuffer; 562 #endif 563 } VIDDEC_BUFFER_PRIVATE; 564 565 /*structures and defines for Circular Buffer*/ 566 #define VIDDEC_CBUFFER_LOCK 567 #define MAX_MULTIPLY 4 568 #define CBUFFER_SIZE MAX_PRIVATE_BUFFERS * MAX_MULTIPLY 569 570 typedef enum VIDDEC_QUEUE_TYPES { 571 VIDDEC_QUEUE_OMX_U32, 572 VIDDEC_QUEUE_OMX_MARKTYPE 573 } VIDDEC_QUEUE_TYPES; 574 575 typedef struct VIDDEC_QUEUE_TYPE { 576 OMX_PTR Elements; 577 OMX_U32 CounterElements[VIDDEC_MAX_QUEUE_SIZE]; 578 OMX_U32 nHead; 579 OMX_S32 nTail; 580 OMX_U32 nElements; 581 OMX_U32 nErrorCount; 582 pthread_mutex_t mMutex; 583 }VIDDEC_QUEUE_TYPE; 584 585 typedef enum VIDDEC_CBUFFER_TYPE { 586 VIDDEC_CBUFFER_MARKDATA, 587 VIDDEC_CBUFFER_TIMESTAMP, 588 VIDDEC_CBUFFER_CMDMARKDATA 589 } VIDDEC_CBUFFER_TYPE; 590 591 typedef struct VIDDEC_CIRCULAR_BUFFER { 592 OMX_PTR pElement[CBUFFER_SIZE]; 593 VIDDEC_CBUFFER_TYPE nType; 594 #ifdef VIDDEC_CBUFFER_LOCK 595 pthread_mutex_t* m_lock; 596 #endif 597 OMX_U8 nTail; 598 OMX_U8 nHead; 599 OMX_U8 nCount; 600 } VIDDEC_CIRCULAR_BUFFER; 601 602 typedef struct VIDDEC_CBUFFER_BUFFERFLAGS{ 603 OMX_TICKS nTimeStamp; 604 OMX_U32 nFlags; 605 OMX_U32 nTickCount; 606 OMX_PTR pMarkData; 607 OMX_HANDLETYPE hMarkTargetComponent; 608 } VIDDEC_CBUFFER_BUFFERFLAGS; 609 610 typedef struct VIDDEC_PORT_TYPE 611 { 612 OMX_HANDLETYPE hTunnelComponent; 613 OMX_U32 nTunnelPort; 614 OMX_BUFFERSUPPLIERTYPE eSupplierSetting; 615 VIDDEC_BUFFER_PRIVATE* pBufferPrivate[MAX_PRIVATE_BUFFERS]; 616 OMX_U8 nBufferCnt; 617 VIDDEC_CIRCULAR_BUFFER eTimeStamp; 618 } VIDDEC_PORT_TYPE; 619 620 typedef struct VIDDEC_MUTEX{ 621 OMX_BOOL bEnabled; 622 OMX_BOOL bSignaled; 623 OMX_BOOL bInitialized; 624 OMX_S32 nErrorExist; 625 pthread_mutex_t mutex; 626 pthread_cond_t condition; 627 } VIDDEC_MUTEX; 628 629 typedef struct VIDDEC_SEMAPHORE{ 630 OMX_BOOL bEnabled; 631 OMX_BOOL bSignaled; 632 OMX_BOOL bInitialized; 633 OMX_S32 nErrorExist; 634 sem_t sSemaphore; 635 } VIDDEC_SEMAPHORE; 636 637 #ifdef VIDDEC_ACTIVATEPARSER 638 typedef struct VIDDEC_Point{ 639 OMX_S32 nX; 640 OMX_S32 nY; 641 }VIDDEC_Point; 642 643 typedef struct VIDDEC_Rect{ 644 VIDDEC_Point sTl; 645 VIDDEC_Point sBr; 646 }VIDDEC_Rect; 647 648 typedef struct VIDDEC_Size{ 649 OMX_S32 nWidth; 650 OMX_S32 nHeight; 651 }VIDDEC_Size; 652 653 typedef struct VIDDEC_VideoPictureHeader{ 654 OMX_U32 nOptions; 655 OMX_S32 nProfile; 656 OMX_S32 nLevel; 657 OMX_S32 nVersion; 658 OMX_U8* cnOptional; 659 VIDDEC_Size sSizeInMemory; 660 VIDDEC_Rect sDisplayedRect; 661 OMX_TICKS nPresentationTimestamp; 662 OMX_TICKS nDecodingTimestamp; 663 OMX_U32 nPreDecoderBufferSize; 664 OMX_U32 nPostDecoderBufferSize; 665 OMX_U32 nPictureNumber; 666 OMX_U32 nPictureLayer; 667 OMX_U8* pcSupplementalData; 668 OMX_BOOL bIsRandomAccessible; 669 OMX_S32 nRandomAccessBufferingPeriod; 670 OMX_U32 nRandomAccessBufferOccupancy; 671 }VIDDEC_VideoPictureHeader; 672 673 typedef struct VIDDEC_MPEG4VisualVbvParams{ 674 OMX_TICKS nBitRate; 675 OMX_U32 nVbvBufferSize; 676 OMX_U32 nVbvOccupancy; 677 }VIDDEC_MPEG4VisualVbvParams; 678 679 typedef struct VIDDEC_MPEG4VisualVOLHeader{ 680 OMX_U32 nVideoObjectLayerId; 681 OMX_BOOL bShortVideoHeader; 682 OMX_BOOL bRandomAccessibleVOL; 683 OMX_U32 nVideoObjectTypeIndication; 684 OMX_U32 nVideoObjectLayerVerId; 685 OMX_U32 nVideoObjectLayerPriority; 686 OMX_U32 nAspectRatioNum; 687 OMX_U32 nAspectRatioDenom; 688 VIDDEC_MPEG4VisualVbvParams sVbvParams; 689 OMX_U16 nVOPTimeIncrementResolution; 690 OMX_BOOL bnFnXedVopRate; 691 OMX_U16 nFnXedVOPTimeIncrement; 692 OMX_BOOL bDataPartitioning; 693 OMX_BOOL bReversibleVLC; 694 OMX_U8* pcUserData; 695 }VIDDEC_MPEG4VisualVOLHeader ; 696 697 typedef struct VIDDEC_MPEG4YuvConversionMatrix{ 698 OMX_S32 iPostOffset; 699 OMX_S32 iMatrix; 700 OMX_S32 iPreOffset; 701 }VIDDEC_MPEG4YuvConversionMatrix; 702 703 typedef struct VIDDEC_MPEG4YuvFormat{ 704 OMX_U32 iCoefficients; 705 OMX_U32 iPattern; 706 OMX_U32 iDataLayout; 707 VIDDEC_MPEG4YuvConversionMatrix * iYuv2RgbMatrix; 708 VIDDEC_MPEG4YuvConversionMatrix * iRgb2YuvMatrix; 709 OMX_U32 iAspectRatioNum; 710 OMX_U32 iAspectRatioDenom; 711 }VIDDEC_MPEG4YuvFormat; 712 713 typedef struct VIDDEC_MPEG4UncompressedVideoFormat{ 714 OMX_U32 iDataFormat; 715 VIDDEC_MPEG4YuvFormat iYuvFormat; 716 OMX_U32 iRgbFormat; 717 }VIDDEC_MPEG4UncompressedVideoFormat; 718 719 typedef struct VIDDEC_AVC_ParserParam { 720 OMX_U32 nBitPosTemp; 721 OMX_U32 nForbiddenZeroBit; 722 OMX_U32 nNalRefIdc; 723 OMX_U32 nProfileIdc; 724 OMX_U32 nConstraintSet0Flag; 725 OMX_U32 nConstraintSet1Flag; 726 OMX_U32 nConstraintSet2Flag; 727 OMX_U32 nReservedZero5bits; 728 OMX_U32 nLevelIdc; 729 OMX_U32 nSeqParameterSetId; 730 OMX_U32 nLog2MaxFrameNumMinus4; 731 OMX_U32 nPicOrderCntType; 732 OMX_U32 nLog2MaxPicOrderCntLsbMinus4; 733 OMX_S32 nOffsetForNonRefPic; 734 OMX_S32 nOffsetForTopToBottomField; 735 OMX_U32 nNumRefFramesInPicOrderCntCycle; 736 OMX_U32 nNumRefFrames; 737 OMX_S32 nGapsInFrameNumValueAllowedFlag; 738 OMX_U32 nPicWidthInMbsMinus1; 739 OMX_U32 nPicHeightInMapUnitsMinus1; 740 OMX_U32 nFrameMbsOnlyFlag; 741 OMX_S32 nMBAdaptiveFrameFieldFlag ; 742 OMX_U32 nDirect8x8InferenceFlag; 743 OMX_U32 nFrameCroppingFlag; 744 OMX_U32 nFrameCropLeftOffset; 745 OMX_U32 nFrameCropRightOffset; 746 OMX_U32 nFrameCropTopOffset; 747 OMX_U32 nFrameCropBottomOffset; 748 }VIDDEC_AVC_ParserParam; 749 750 typedef struct VIDDEC_MPEG4_ParserParam { 751 OMX_U32 nIsVisualObjectIdentifier; 752 OMX_U32 nVisualObjectType; 753 OMX_U32 nVideoSignalType; 754 OMX_U32 nVideoFormat; 755 OMX_U32 nVideoRange; 756 OMX_U32 nColorDescription; 757 OMX_U32 NBitZero; 758 OMX_U32 nVideoObjectTypeIndication; 759 OMX_U32 nIsVisualObjectLayerIdentifier; 760 OMX_U32 nLayerVerId; 761 OMX_U32 nLayerPriority; 762 OMX_U32 nAspectRadio; 763 OMX_U32 nParWidth; 764 OMX_U32 nParHeight; 765 OMX_U32 nControlParameters; 766 OMX_U32 nChromaFormat; 767 OMX_U32 nLowDelay; 768 OMX_U32 nVbvParameters; 769 OMX_U32 nBitRate; 770 OMX_U32 nFirstHalfVbvBufferSize; 771 OMX_U32 nLatterHalfVbvBufferSize; 772 OMX_U32 nFirstHalfVbvOccupancy; 773 OMX_U32 nLatterHalfVbvOccupancy; 774 OMX_U32 nLayerShape; 775 OMX_U32 nTimeIncrementResolution; 776 OMX_U32 nFnXedVopRate; 777 OMX_U32 nNum_bits; 778 OMX_U32 nInterlaced; 779 OMX_U32 nObmc; 780 OMX_U32 nUFEP; 781 OMX_U32 NSpriteNotSupported; 782 OMX_U32 nNot8Bit; 783 OMX_U32 nQuantPrecision; 784 OMX_U32 nBitsPerPnXel; 785 OMX_U32 nIsInverseQuantMethodFirst; 786 OMX_U32 nComplexityEstimationDisable; 787 OMX_U32 nIsResyncMarkerDisabled; 788 OMX_U32 nIsDataPartitioned; 789 OMX_U32 nRvlc; 790 OMX_U32 nScalability; 791 OMX_S32 nSourceFormat; 792 OMX_BOOL nOutputFormat; 793 OMX_U32 nCPM; 794 OMX_U32 nPWI; 795 OMX_U32 nPHI; 796 }VIDDEC_MPEG4_ParserParam; 797 #endif 798 799 #define VIDDEC_RCV_EXTHEADER_SIZE 4 800 801 typedef struct VIDDEC_WMV_RCV_struct { 802 OMX_U32 nNumFrames : 24; 803 OMX_U32 nFrameType : 8; 804 OMX_U32 nID : 32; 805 OMX_U32 nStructData : 32; 806 OMX_U32 nVertSize; 807 OMX_U32 nHorizSize; 808 } VIDDEC_WMV_RCV_struct; 809 810 typedef union VIDDEC_WMV_RCV_header { 811 VIDDEC_WMV_RCV_struct sStructRCV; 812 OMX_U8 pBuffer[sizeof(VIDDEC_WMV_RCV_struct)]; 813 } VIDDEC_WMV_RCV_header; 814 815 typedef struct VIDDEC_SAVE_BUFFER{ 816 OMX_BOOL bSaveFirstBuffer; 817 OMX_PTR pFirstBufferSaved; 818 OMX_S32 nFilledLen; 819 }VIDDEC_SAVE_BUFFER; 820 821 #ifdef ANDROID 822 /** Opencore specific, refer to OpenMax Call Sequences document section 3.2 **/ 823 typedef struct PV_OMXComponentCapabilityFlagsType 824 { 825 ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS 826 OMX_BOOL iIsOMXComponentMultiThreaded; 827 OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; 828 OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; 829 OMX_BOOL iOMXComponentSupportsMovableInputBuffers; 830 OMX_BOOL iOMXComponentSupportsPartialFrames; 831 OMX_BOOL iOMXComponentUsesNALStartCodes; 832 OMX_BOOL iOMXComponentCanHandleIncompleteFrames; 833 OMX_BOOL iOMXComponentUsesFullAVCFrames; 834 } PV_OMXComponentCapabilityFlagsType; 835 #endif 836 837 typedef struct VIDEO_PROFILE_LEVEL 838 { 839 OMX_S32 nProfile; 840 OMX_S32 nLevel; 841 } VIDEO_PROFILE_LEVEL_TYPE; 842 843 /** 844 * Data structure used to ... 845 * 846 * STRUCT MEMBERS: 847 * pPortParamType : Add desc here... 848 * pInPortDef : Add desc here... 849 * pOutPortDef : Add desc here... 850 * pInPortFormat : Add desc here... 851 */ 852 typedef struct VIDDEC_COMPONENT_PRIVATE 853 { 854 OMX_PARAM_PORTDEFINITIONTYPE* pInPortDef; 855 OMX_PARAM_PORTDEFINITIONTYPE* pOutPortDef; 856 OMX_VIDEO_PARAM_PORTFORMATTYPE* pInPortFormat; 857 OMX_VIDEO_PARAM_PORTFORMATTYPE* pOutPortFormat; 858 OMX_PRIORITYMGMTTYPE* pPriorityMgmt; 859 OMX_PARAM_BUFFERSUPPLIERTYPE* pInBufSupplier; 860 OMX_PARAM_BUFFERSUPPLIERTYPE* pOutBufSupplier; 861 OMX_VIDEO_PARAM_AVCTYPE* pH264; 862 OMX_VIDEO_PARAM_MPEG4TYPE* pMpeg4; 863 OMX_VIDEO_PARAM_H263TYPE* pH263; 864 OMX_VIDEO_PARAM_WMVTYPE* pWMV; 865 OMX_VIDEO_PARAM_MPEG2TYPE* pMpeg2; /* OMX_IndexParamVideoMpeg2 */ 866 OMX_PORT_PARAM_TYPE* pPortParamType; 867 OMX_PARAM_DEBLOCKINGTYPE* pDeblockingParamType; 868 #ifdef __STD_COMPONENT__ 869 OMX_PORT_PARAM_TYPE* pPortParamTypeAudio; 870 OMX_PORT_PARAM_TYPE* pPortParamTypeImage; 871 OMX_PORT_PARAM_TYPE* pPortParamTypeOthers; 872 873 #endif 874 OMX_CALLBACKTYPE cbInfo; 875 OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS]; 876 OMX_U8 numPorts; 877 OMX_COMPONENTTYPE* pHandle; 878 OMX_STATETYPE eState; 879 OMX_VERSIONTYPE pComponentVersion; 880 OMX_VERSIONTYPE pSpecVersion; 881 OMX_STRING cComponentName; 882 pthread_t ComponentThread; 883 int free_inpBuf_Q[2]; 884 int free_outBuf_Q[2]; 885 int filled_inpBuf_Q[2]; 886 int filled_outBuf_Q[2]; 887 int cmdPipe[2]; 888 int cmdDataPipe[2]; 889 OMX_U32 bIsStopping; 890 OMX_U32 bIsPaused; 891 OMX_U32 bTransPause; 892 OMX_U32 ProcessMode; 893 OMX_U32 H264BitStreamFormat; 894 OMX_BOOL MPEG4Codec_IsTI; 895 OMX_BUFFERHEADERTYPE pTempBuffHead; /*Used for EOS logic*/ 896 OMX_U32 app_nBuf; 897 OMX_U32 lcml_compID; 898 void* pLcmlHandle; 899 void* pModLCML; 900 OMX_U16 arr[100]; 901 int frameCounter; 902 LCML_DSP_INTERFACE* pLCML; 903 VIDDEC_PORT_TYPE* pCompPort[NUM_OF_PORTS]; 904 VIDDEC_WMV_PROFILES wmvProfile; 905 #ifdef __PERF_INSTRUMENTATION__ 906 PERF_OBJHANDLE pPERF, pPERFcomp; 907 OMX_U32 lcml_nCntOpReceived; 908 OMX_U32 lcml_nCntIp; 909 #endif 910 #ifdef KHRONOS_1_1 911 OMX_PARAM_COMPONENTROLETYPE componentRole; 912 /*MBError Reporting code*/ 913 OMX_CONFIG_MBERRORREPORTINGTYPE eMBErrorReport; 914 OMX_CONFIG_MACROBLOCKERRORMAPTYPE_TI eMBErrorMapType[MAX_PRIVATE_BUFFERS]; 915 OMX_U8 cMBErrorIndexIn; 916 OMX_U8 cMBErrorIndexOut; 917 #endif 918 OMX_U8 nInMarkBufIndex; /* for OMX_MARKTYPE */ 919 OMX_U8 nOutMarkBufIndex; /* for OMX_MARKTYPE */ 920 OMX_MARKTYPE arrMarkBufIndex[VIDDEC_MAX_QUEUE_SIZE]; /* for OMX_MARKTYPE */ 921 922 OMX_U8 nInCmdMarkBufIndex; /* for OMX_MARKTYPE */ 923 OMX_U8 nOutCmdMarkBufIndex; /* for OMX_MARKTYPE */ 924 OMX_MARKTYPE arrCmdMarkBufIndex[VIDDEC_MAX_QUEUE_SIZE]; /* for OMX_MARKTYPE */ 925 OMX_U8 nInBufIndex; /* for time stamps */ 926 OMX_U8 nOutBufIndex; /* for time stamps */ 927 OMX_U64 arrBufIndex[VIDDEC_MAX_QUEUE_SIZE]; /* for time stamps */ 928 OMX_MARKTYPE MTbuffMark; 929 VIDDEC_QUEUE_TYPE qBuffMark; 930 VIDDEC_QUEUE_TYPE qCmdMarkData; 931 VIDDEC_QUEUE_TYPE qBytesSent; 932 OMX_U32 nBytesConsumed; 933 OMX_BOOL bBuffMarkTaked; 934 OMX_BOOL bBuffalreadyMarked; 935 936 OMX_STATETYPE eIdleToLoad; 937 OMX_STATETYPE eExecuteToIdle; 938 OMX_BOOL iEndofInputSent; 939 OMX_BOOL bPipeCleaned; 940 OMX_BOOL bFirstBuffer; 941 942 OMX_BOOL bParserEnabled; 943 OMX_BOOL bFlushOut; 944 void* pUalgParams; 945 OMX_BOOL bLCMLHalted; 946 OMX_BOOL bMult16Size; 947 OMX_BOOL bFirstHeader; 948 OMX_BOOL bDynamicConfigurationInProgress; 949 OMX_BOOL bInPortSettingsChanged; 950 OMX_BOOL bOutPortSettingsChanged; 951 VIDDEC_SAVE_BUFFER eFirstBuffer; 952 953 954 #ifndef UNDER_CE 955 OMX_BOOL bLCMLOut; 956 #endif 957 VIDDEC_RMPROXY_STATES eRMProxyState; 958 959 OMX_U8 nCountInputBFromDsp; 960 OMX_U8 nCountOutputBFromDsp; 961 OMX_U8 nCountInputBFromApp; 962 OMX_U8 nCountOutputBFromApp; 963 964 VIDDEC_CBUFFER_BUFFERFLAGS aBufferFlags[CBUFFER_SIZE]; 965 VIDDEC_LCML_STATES eLCMLState; 966 OMX_U32 nWMVFileType; 967 OMX_BOOL bIsNALBigEndian; 968 #ifdef VIDDEC_SPARK_CODE 969 OMX_BOOL bIsSparkInput; 970 #endif 971 VIDDEC_MUTEX sMutex; 972 pthread_mutex_t mutexInputBFromApp; 973 pthread_mutex_t mutexOutputBFromApp; 974 pthread_mutex_t mutexInputBFromDSP; 975 pthread_mutex_t mutexOutputBFromDSP; 976 VIDDEC_MUTEX inputFlushCompletionMutex; 977 VIDDEC_MUTEX outputFlushCompletionMutex; 978 OMX_BOOL bIsInputFlushPending; 979 OMX_BOOL bIsOutputFlushPending; 980 VIDDEC_MUTEX sDynConfigMutex; 981 VIDDEC_SEMAPHORE sInSemaphore; 982 VIDDEC_SEMAPHORE sOutSemaphore; 983 /* used by RM callback */ 984 #ifdef RESOURCE_MANAGER_ENABLED 985 RMPROXY_CALLBACKTYPE rmproxyCallback; 986 #endif 987 /* used to keep track of preempted state */ 988 OMX_BOOL bPreempted; 989 /* desired state of this component */ 990 OMX_STATETYPE eDesiredState; 991 VIDDEC_WMV_RCV_header pBufferRCV; 992 OMX_BUFFERHEADERTYPE pBufferTemp; 993 OMX_U32 pRCVExtendedHeader; 994 OMX_U32 nMemUsage[VIDDEC_MEMLEVELS]; 995 OMX_U32 nDisplayWidth; 996 OMX_U8* pCodecData; /* codec-specific data coming from the demuxer */ 997 OMX_U32 nCodecDataSize; 998 OMX_BOOL bVC1Fix; 999 #ifdef ANDROID /* Specific flag for opencore mmframework */ 1000 PV_OMXComponentCapabilityFlagsType* pPVCapabilityFlags; 1001 #endif 1002 1003 /* Used to handle config buffer fragmentation on AVC*/ 1004 OMX_BOOL bConfigBufferCompleteAVC; 1005 OMX_PTR pInternalConfigBufferAVC; 1006 OMX_U32 nInternalConfigBufferFilledAVC; 1007 struct OMX_TI_Debug dbg; 1008 /* track number of codec config data (CCD) units and sizes */ 1009 OMX_U32 aCCDsize[MAX_CCD_CNT]; 1010 OMX_U32 nCCDcnt; 1011 1012 /* indicate if codec config data (CCD) 1013 * buffer (e.g. SPS/PPS) has been copied 1014 * to the data buffer. SPS,PPS,NAL1,... 1015 * */ 1016 OMX_BOOL bCopiedCCDBuffer; 1017 1018 /* Reference count for pending state change requests */ 1019 OMX_U32 nPendingStateChangeRequests; 1020 pthread_mutex_t mutexStateChangeRequest; 1021 pthread_cond_t StateChangeCondition; 1022 1023 // Signal first buffer after config data should have EOS flag 1024 OMX_BOOL firstBufferEos; 1025 1026 } VIDDEC_COMPONENT_PRIVATE; 1027 1028 /*****************macro definitions*********************/ 1029 /*----------------------------------------------------------------------------*/ 1030 /** 1031 * OMX_GET_DATABUFF_SIZE() Get the needed buffer data size base in the request. 1032 * 1033 * This method will give the needed data buffer size acording with 1034 * specific requirements from the codec and component. 1035 * 1036 * @param _nSizeBytes_ Requested size from client 1037 * 1038 **/ 1039 /*----------------------------------------------------------------------------*/ 1040 1041 #define OMX_GET_DATABUFF_SIZE(_nSizeBytes_) \ 1042 (_nSizeBytes_ + VIDDEC_PADDING_FULL + VIDDEC_WMV_BUFFER_OFFSET + VIDDEC_ALIGNMENT) 1043 1044 1045 #define OMX_MALLOC_STRUCT(_pStruct_, _sName_, _memusage_) \ 1046 _pStruct_ = (_sName_*)malloc(sizeof(_sName_)); \ 1047 if(_pStruct_ == NULL){ \ 1048 eError = OMX_ErrorInsufficientResources; \ 1049 goto EXIT; \ 1050 } \ 1051 /*(_memusage_) += sizeof(_sName_); */ \ 1052 memset((_pStruct_), 0x0, sizeof(_sName_)); 1053 1054 1055 #define OMX_MALLOC_STRUCT_SIZED(_pStruct_, _sName_, _nSize_, _memusage_) \ 1056 _pStruct_ = (_sName_*)malloc(_nSize_); \ 1057 if(_pStruct_ == NULL){ \ 1058 eError = OMX_ErrorInsufficientResources; \ 1059 goto EXIT; \ 1060 } \ 1061 /*(_memusage_) += _nSize_; */ \ 1062 memset((_pStruct_), 0x0, _nSize_); 1063 1064 #define VIDDEC_MEMUSAGE 0 /*\ 1065 pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel0] + \ 1066 pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1] + \ 1067 pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel2] + \ 1068 pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel3] + \ 1069 pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel4]*/ 1070 1071 1072 /*----------------------------------------------------------------------------*/ 1073 /** 1074 * OMX_ALIGN_BUFFER() Align the buffer to the desire number of bytes. 1075 * 1076 * This method will update the component function pointer to the handle 1077 * 1078 * @param _pBuffer_ Pointer to align 1079 * @param _nBytes_ # of byte to alignment desire 1080 * 1081 **/ 1082 /*----------------------------------------------------------------------------*/ 1083 1084 #define OMX_ALIGN_BUFFER(_pBuffer_, _nBytes_) \ 1085 while((OMX_U8)_pBuffer_ & (_nBytes_-1)){ \ 1086 _pBuffer_++; \ 1087 } 1088 1089 1090 1091 #define OMX_MALLOC_BUFFER_VIDDEC(_pBuffer_, _nSize_, _pOriginalBuffer_) \ 1092 _pBuffer_ = OMX_MALLOC_STRUCT_SIZED(_pBuffer_, OMX_U8, _nSize_ + VIDDEC_PADDING_FULL + VIDDEC_WMV_BUFFER_OFFSET + VIDDEC_ALIGNMENT, pComponentPrivate->nMemUsage[VIDDDEC_Enum_MemLevel1]); \ 1093 _pOriginalBuffer_ = _pBuffer_; \ 1094 _pBuffer_ += VIDDEC_PADDING_HALF; \ 1095 OMX_ALIGN_BUFFER(_pBuffer_, VIDDEC_ALIGNMENT); 1096 1097 1098 /*----------------------------------------------------------------------------*/ 1099 /** 1100 * OMX_FREE() Free memory 1101 * 1102 * This method will free memory and set pointer to NULL 1103 * 1104 * @param _pBuffer_ Pointer to free 1105 * 1106 **/ 1107 /*----------------------------------------------------------------------------*/ 1108 1109 #define OMX_FREE_VIDDEC(_pBuffer_) \ 1110 if(_pBuffer_ != NULL){ \ 1111 free(_pBuffer_); \ 1112 _pBuffer_ = NULL; \ 1113 } 1114 1115 1116 1117 /*----------------------------------------------------------------------------*/ 1118 /** 1119 * OMX_FREE_BUFFER_VIDDEC() Free video decoder buffer 1120 * 1121 * This method will free video decoder buffer 1122 * 1123 * @param _pBuffHead_ Buffer header pointer 1124 * @param _pCompPort_ Component port will give us the reference to the 1125 * desire buffer to free 1126 * 1127 **/ 1128 /*----------------------------------------------------------------------------*/ 1129 1130 #define OMX_FREE_BUFFER_VIDDEC(_pBuffHead_, _pCompPort_) \ 1131 { \ 1132 int _nBufferCount_ = 0; \ 1133 OMX_U8* _pTemp_ = NULL; \ 1134 \ 1135 for(_nBufferCount_ = 0; _nBufferCount_ < MAX_PRIVATE_BUFFERS; _nBufferCount_++){ \ 1136 if(_pCompPort_->pBufferPrivate[_nBufferCount_]->pBufferHdr != NULL){ \ 1137 _pTemp_ = (OMX_U8*)_pCompPort_->pBufferPrivate[_nBufferCount_]->pBufferHdr->pBuffer; \ 1138 if(_pBuffHead_->pBuffer == _pTemp_){ \ 1139 break; \ 1140 } \ 1141 } \ 1142 } \ 1143 \ 1144 if(_nBufferCount_ == MAX_PRIVATE_BUFFERS){ \ 1145 OMX_ERROR4(pComponentPrivate->dbg, "Error: Buffer NOT found to free: %p \n", _pBuffHead_->pBuffer); \ 1146 goto EXIT; \ 1147 } \ 1148 \ 1149 _pBuffHead_->pBuffer = _pCompPort_->pBufferPrivate[_nBufferCount_]->pOriginalBuffer; \ 1150 OMX_PRBUFFER1(pComponentPrivate->dbg, "Free original allocated buffer: %p\n", _pBuffHead_->pBuffer); \ 1151 OMX_FREE_VIDDEC(_pBuffHead_->pBuffer); \ 1152 } 1153 /*----------------------------------------------------------------------------*/ 1154 /** 1155 * OMX_WMV_INSERT_CODEC_DATA() 1156 * 1157 * This method will insert the codec data to the first frame to be sent to 1158 * queue in LCML 1159 * 1160 * @param _pBuffHead_ Pointer to free 1161 * @param _pComponentPrivate_ Component private structure to provide needed 1162 * references 1163 * 1164 **/ 1165 /*----------------------------------------------------------------------------*/ 1166 1167 #define OMX_WMV_INSERT_CODEC_DATA(_pBuffHead_, _pComponentPrivate_) \ 1168 { \ 1169 OMX_U8* _pTempBuffer_ = NULL; \ 1170 /* Copy frame data in a temporary buffer*/ \ 1171 OMX_MALLOC_STRUCT_SIZED(_pTempBuffer_, OMX_U8, _pBuffHead_->nFilledLen, NULL); \ 1172 memcpy (_pTempBuffer_, _pBuffHead_->pBuffer, _pBuffHead_->nFilledLen); \ 1173 \ 1174 /*Copy configuration data at the begining of the buffer*/ \ 1175 memcpy (_pBuffHead_->pBuffer, _pComponentPrivate_->pCodecData, _pComponentPrivate_->nCodecDataSize); \ 1176 _pBuffHead_->pBuffer += _pComponentPrivate_->nCodecDataSize; \ 1177 /* Add frame start code */ \ 1178 (*(_pBuffHead_->pBuffer++)) = 0x00; \ 1179 (*(_pBuffHead_->pBuffer++)) = 0x00; \ 1180 (*(_pBuffHead_->pBuffer++)) = 0x01; \ 1181 (*(_pBuffHead_->pBuffer++)) = 0x0d; \ 1182 \ 1183 /* Insert again the frame buffer */ \ 1184 memcpy (_pBuffHead_->pBuffer, _pTempBuffer_, _pBuffHead_->nFilledLen); \ 1185 /* pTempBuffer no longer need*/ \ 1186 OMX_FREE_VIDDEC(_pTempBuffer_); \ 1187 \ 1188 _pBuffHead_->pBuffer -= (pComponentPrivate->nCodecDataSize + 4); \ 1189 _pBuffHead_->nFilledLen += pComponentPrivate->nCodecDataSize + 4; \ 1190 } 1191 1192 1193 1194 1195 #define OMX_CONF_INIT_STRUCT(_s_, _name_, dbg) \ 1196 memset((_s_), 0x0, sizeof(_name_)); \ 1197 (_s_)->nSize = sizeof(_name_); \ 1198 (_s_)->nVersion.s.nVersionMajor = VERSION_MAJOR; \ 1199 (_s_)->nVersion.s.nVersionMinor = VERSION_MINOR; \ 1200 (_s_)->nVersion.s.nRevision = VERSION_REVISION; \ 1201 (_s_)->nVersion.s.nStep = VERSION_STEP; \ 1202 OMX_PRINT0(dbg, "INIT_STRUCT Major 0x%x Minor 0x%x nRevision 0x%x nStep 0x%x\n", \ 1203 (_s_)->nVersion.s.nVersionMajor, (_s_)->nVersion.s.nVersionMinor, \ 1204 (_s_)->nVersion.s.nRevision, (_s_)->nVersion.s.nStep); 1205 1206 #define OMX_CONF_CHK_VERSION(_s_, _name_, _e_, dbg) \ 1207 OMX_PRINT0(dbg, "CHK_VERSION Size 0x%lx Major 0x%x Minor 0x%x nRevision 0x%x nStep 0x%x\n", \ 1208 (_s_)->nSize, (_s_)->nVersion.s.nVersionMajor, (_s_)->nVersion.s.nVersionMinor, \ 1209 (_s_)->nVersion.s.nRevision, (_s_)->nVersion.s.nStep); \ 1210 if((_s_)->nSize != sizeof(_name_)) _e_ = OMX_ErrorBadParameter; \ 1211 if(((_s_)->nVersion.s.nVersionMajor != VERSION_MAJOR)|| \ 1212 ((_s_)->nVersion.s.nVersionMinor != VERSION_MINOR)|| \ 1213 ((_s_)->nVersion.s.nRevision != VERSION_REVISION)|| \ 1214 ((_s_)->nVersion.s.nStep != VERSION_STEP)) _e_ = OMX_ErrorVersionMismatch;\ 1215 if(_e_ != OMX_ErrorNone) goto EXIT; 1216 1217 #define OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3) \ 1218 { \ 1219 if(!_ptr1 || !_ptr2 || !_ptr3){ \ 1220 eError = OMX_ErrorBadParameter; \ 1221 goto EXIT; \ 1222 } \ 1223 } 1224 1225 #define OMX_CONF_SET_ERROR_BAIL(_eError, _eCode)\ 1226 { \ 1227 _eError = _eCode; \ 1228 goto EXIT; \ 1229 } 1230 1231 1232 #define OMX_PARSER_CHECKLIMIT(_total, _actual, _step) /* \ 1233 if(((_actual + _step) >> 3) >= _total){ \ 1234 printf("_total %d _actual %d\n",_total,((_actual + _step)>>3)); \ 1235 eError = OMX_ErrorStreamCorrupt; \ 1236 goto EXIT; \ 1237 }*/ 1238 1239 /*sMutex*/ 1240 #define VIDDEC_PTHREAD_MUTEX_INIT(_mutex_) \ 1241 if(!((_mutex_).bInitialized)) { \ 1242 pthread_mutex_init (&((_mutex_).mutex), NULL); \ 1243 pthread_cond_init (&(_mutex_).condition, NULL);\ 1244 (_mutex_).bInitialized = OMX_TRUE; \ 1245 (_mutex_).bSignaled = OMX_FALSE; \ 1246 (_mutex_).bEnabled = OMX_FALSE; \ 1247 } 1248 1249 #define VIDDEC_PTHREAD_MUTEX_DESTROY(_mutex_) \ 1250 if((_mutex_).bInitialized) { \ 1251 pthread_mutex_destroy (&((_mutex_).mutex)); \ 1252 pthread_cond_destroy (&(_mutex_).condition); \ 1253 (_mutex_).bInitialized = OMX_FALSE; \ 1254 (_mutex_).bEnabled = OMX_FALSE; \ 1255 } 1256 1257 #define VIDDEC_PTHREAD_MUTEX_LOCK(_mutex_) \ 1258 VIDDEC_PTHREAD_MUTEX_INIT ((_mutex_)); \ 1259 (_mutex_).bSignaled = OMX_FALSE; \ 1260 (_mutex_).nErrorExist = 0; \ 1261 (_mutex_).nErrorExist = pthread_mutex_lock (&(_mutex_).mutex); 1262 1263 #define VIDDEC_PTHREAD_MUTEX_UNLOCK(_mutex_) \ 1264 VIDDEC_PTHREAD_MUTEX_INIT ((_mutex_)); \ 1265 (_mutex_).nErrorExist = 0; \ 1266 (_mutex_).nErrorExist = pthread_mutex_unlock (&(_mutex_).mutex); 1267 1268 #define VIDDEC_PTHREAD_MUTEX_TRYLOCK(_mutex_) \ 1269 VIDDEC_PTHREAD_MUTEX_INIT ((_mutex_)); \ 1270 (_mutex_).nErrorExist = 0; \ 1271 (_mutex_).nErrorExist = pthread_mutex_trylock (&(_mutex_).mutex); 1272 1273 #define VIDDEC_PTHREAD_MUTEX_SIGNAL(_mutex_) \ 1274 VIDDEC_PTHREAD_MUTEX_INIT ((_mutex_)); \ 1275 /*if( (_mutex_).bEnabled) { */ \ 1276 (_mutex_).nErrorExist = 0; \ 1277 (_mutex_).nErrorExist = pthread_cond_signal (&(_mutex_).condition); \ 1278 /*(__mutex.bSignaled = OMX_TRUE;*/ \ 1279 /*}*/ 1280 1281 #define VIDDEC_PTHREAD_MUTEX_WAIT(_mutex_) \ 1282 VIDDEC_PTHREAD_MUTEX_INIT ((_mutex_)); \ 1283 (_mutex_).bEnabled = OMX_TRUE; \ 1284 /*if (!(__mutex.bSignaled){ */\ 1285 (_mutex_).nErrorExist = 0; \ 1286 (_mutex_).nErrorExist = pthread_cond_wait (&(_mutex_).condition, &(_mutex_).mutex); \ 1287 (_mutex_).bSignaled = OMX_FALSE; \ 1288 (_mutex_).bEnabled = OMX_FALSE; \ 1289 /*}*/ 1290 1291 #define VIDDEC_PTHREAD_SEMAPHORE_INIT(_semaphore_) \ 1292 if(!((_semaphore_).bInitialized)) { \ 1293 sem_init (&((_semaphore_).sSemaphore), 0, 0); \ 1294 (_semaphore_).bInitialized = OMX_TRUE; \ 1295 (_semaphore_).bEnabled = OMX_FALSE; \ 1296 (_semaphore_).bSignaled = OMX_FALSE; \ 1297 } 1298 1299 #define VIDDEC_PTHREAD_SEMAPHORE_DESTROY(_semaphore_) \ 1300 if((_semaphore_).bInitialized) { \ 1301 sem_destroy (&(_semaphore_).sSemaphore); \ 1302 (_semaphore_).bInitialized = OMX_FALSE; \ 1303 (_semaphore_).bSignaled = OMX_FALSE; \ 1304 (_semaphore_).bEnabled = OMX_FALSE; \ 1305 } 1306 /* 1307 printf("post signal %d Enable %d\n",(_semaphore_).bSignaled,(_semaphore_).bEnabled); \ 1308 \ 1309 printf("post out signal %d Enable %d\n",(_semaphore_).bSignaled,(_semaphore_).bEnabled); \ 1310 \ 1311 printf("wait out signal %d Enable %d\n",(_semaphore_).bSignaled,(_semaphore_).bEnabled); \ 1312 printf("wait signal %d Enable %d\n",(_semaphore_).bSignaled,(_semaphore_).bEnabled); \ 1313 1314 */ 1315 #define VIDDEC_PTHREAD_SEMAPHORE_POST(_semaphore_) \ 1316 VIDDEC_PTHREAD_SEMAPHORE_INIT ((_semaphore_)); \ 1317 if((_semaphore_).bEnabled) { \ 1318 sem_post (&(_semaphore_).sSemaphore); \ 1319 (_semaphore_).bEnabled = OMX_FALSE; \ 1320 } \ 1321 else { \ 1322 (_semaphore_).bSignaled = OMX_TRUE; \ 1323 (_semaphore_).bEnabled = OMX_FALSE; \ 1324 } 1325 1326 #define VIDDEC_PTHREAD_SEMAPHORE_WAIT(_semaphore_) \ 1327 VIDDEC_PTHREAD_SEMAPHORE_INIT ((_semaphore_)); \ 1328 if(!(_semaphore_).bSignaled) { \ 1329 (_semaphore_).bEnabled = OMX_TRUE; \ 1330 sem_wait (&(_semaphore_).sSemaphore); \ 1331 } \ 1332 else { \ 1333 (_semaphore_).bEnabled = OMX_FALSE; \ 1334 (_semaphore_).bSignaled = OMX_FALSE; \ 1335 } 1336 1337 #define VIDDEC_EXECUTETOIDLE \ 1338 (((pComponentPrivate->eState == OMX_StatePause) || \ 1339 (pComponentPrivate->eState == OMX_StateExecuting)) && \ 1340 (pComponentPrivate->eExecuteToIdle == OMX_StateIdle)) 1341 1342 #define VIDDEC_IDLETOEXECUTE \ 1343 (((pComponentPrivate->eState == OMX_StateIdle)) && \ 1344 (pComponentPrivate->eExecuteToIdle == OMX_StateExecuting)) 1345 1346 #ifdef VIDDEC_SPARK_CODE 1347 #define VIDDEC_SPARKCHECK \ 1348 ((pComponentPrivate->bIsSparkInput) && \ 1349 (pComponentPrivate->pInPortDef->format.video.eCompressionFormat == OMX_VIDEO_CodingUnused)) 1350 #else 1351 #define VIDDEC_SPARKCHECK (OMX_FALSE) 1352 #endif 1353 1354 1355 /* DEFINITIONS for parsing the config information & sequence header for WMV*/ 1356 #define VIDDEC_GetUnalignedDword( pb, dw ) \ 1357 (dw) = ((OMX_U32) *(pb + 3) << 24) + \ 1358 ((OMX_U32) *(pb + 2) << 16) + \ 1359 ((OMX_U16) *(pb + 1) << 8) + *pb; 1360 1361 #define VIDDEC_GetUnalignedDwordEx( pb, dw ) VIDDEC_GetUnalignedDword( pb, dw ); (pb) += sizeof(OMX_U32); 1362 #define VIDDEC_LoadDWORD( dw, p ) VIDDEC_GetUnalignedDwordEx( p, dw ) 1363 #ifndef VIDDEC_MAKEFOURCC 1364 #define VIDDEC_MAKEFOURCC(ch0, ch1, ch2, ch3) \ 1365 ((OMX_U32)(OMX_U8)(ch0) | ((OMX_U32)(OMX_U8)(ch1) << 8) | \ 1366 ((OMX_U32)(OMX_U8)(ch2) << 16) | ((OMX_U32)(OMX_U8)(ch3) << 24 )) 1367 1368 #define VIDDEC_FOURCC(ch0, ch1, ch2, ch3) VIDDEC_MAKEFOURCC(ch0, ch1, ch2, ch3) 1369 #endif 1370 1371 #define FOURCC_WMV3 VIDDEC_FOURCC('W','M','V','3') 1372 #define FOURCC_WMV2 VIDDEC_FOURCC('W','M','V','2') 1373 #define FOURCC_WMV1 VIDDEC_FOURCC('W','M','V','1') 1374 #define FOURCC_WVC1 VIDDEC_FOURCC('W','V','C','1') 1375 1376 1377 /*-------function prototypes -------------------------------------------------*/ 1378 typedef OMX_ERRORTYPE (*VIDDEC_fpo)(OMX_HANDLETYPE); 1379 1380 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComponent); 1381 OMX_ERRORTYPE VIDDEC_Start_ComponentThread (OMX_HANDLETYPE pHandle); 1382 OMX_ERRORTYPE VIDDEC_Stop_ComponentThread(OMX_HANDLETYPE pComponent); 1383 OMX_ERRORTYPE VIDDEC_HandleCommand (OMX_HANDLETYPE pHandle, OMX_U32 nParam1); 1384 OMX_ERRORTYPE VIDDEC_DisablePort (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1); 1385 OMX_ERRORTYPE VIDDEC_EnablePort (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1); 1386 OMX_ERRORTYPE VIDDEC_HandleDataBuf_FromApp (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1387 OMX_ERRORTYPE VIDDEC_HandleDataBuf_FromDsp (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1388 OMX_ERRORTYPE VIDDEC_HandleFreeDataBuf (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1389 OMX_ERRORTYPE VIDDEC_LCML_Callback (TUsnCodecEvent event, void* argsCb [10]); 1390 OMX_ERRORTYPE VIDDEC_HandleFreeOutputBufferFromApp (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1391 OMX_ERRORTYPE VIDDEC_InitDSP_Mpeg4Dec (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1392 OMX_ERRORTYPE VIDDEC_InitDSP_Mpeg2Dec (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1393 OMX_ERRORTYPE VIDDEC_InitDSP_H264Dec (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1394 OMX_ERRORTYPE VIDDEC_InitDSP_WMVDec (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1395 #ifdef VIDDEC_SPARK_CODE 1396 OMX_ERRORTYPE VIDDEC_InitDSP_SparkDec (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1397 #endif 1398 OMX_ERRORTYPE VIDDEC_ReturnBuffers (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1, OMX_BOOL bRetDSP); 1399 OMX_ERRORTYPE VIDDEC_HandleCommandMarkBuffer(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1, OMX_PTR pCmdData); 1400 OMX_ERRORTYPE VIDDEC_HandleCommandFlush(VIDDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1, OMX_BOOL bPass); 1401 OMX_ERRORTYPE VIDDEC_Load_Defaults (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_S32 nPassing); 1402 OMX_U32 VIDDEC_GetRMFrecuency(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1403 OMX_ERRORTYPE VIDDEC_Handle_InvalidState (VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1404 1405 OMX_ERRORTYPE VIDDEC_CircBuf_Init(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex); 1406 OMX_ERRORTYPE VIDDEC_CircBuf_Flush(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex); 1407 OMX_ERRORTYPE VIDDEC_CircBuf_DeInit(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex); 1408 OMX_ERRORTYPE VIDDEC_CircBuf_Add(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_PTR pElement); 1409 OMX_ERRORTYPE VIDDEC_CircBuf_Remove(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_PTR* pElement); 1410 OMX_ERRORTYPE VIDDEC_CircBuf_Count(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex, OMX_U8* pCount); 1411 OMX_U8 VIDDEC_CircBuf_GetHead(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, VIDDEC_CBUFFER_TYPE nTypeIndex, VIDDEC_PORT_INDEX nPortIndex); 1412 OMX_ERRORTYPE VIDDEC_Propagate_Mark(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE *pBuffHead); 1413 OMX_ERRORTYPE VIDDEC_Queue_Init(VIDDEC_QUEUE_TYPE *queue, VIDDEC_QUEUE_TYPES type); 1414 OMX_ERRORTYPE VIDDEC_Queue_Flush(VIDDEC_QUEUE_TYPE *queue); 1415 OMX_ERRORTYPE VIDDEC_Queue_Add(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type); 1416 OMX_ERRORTYPE VIDDEC_Queue_Remove(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type); 1417 OMX_ERRORTYPE VIDDEC_Queue_Replace_Tail(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement, VIDDEC_QUEUE_TYPES type); 1418 OMX_ERRORTYPE VIDDEC_Queue_Get_Tail(VIDDEC_QUEUE_TYPE *queue, OMX_PTR pElement,VIDDEC_QUEUE_TYPES type); 1419 OMX_ERRORTYPE VIDDEC_Queue_Free(VIDDEC_QUEUE_TYPE *queue); 1420 #ifdef RESOURCE_MANAGER_ENABLED 1421 void VIDDEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData); 1422 #endif 1423 #ifdef ANDROID 1424 OMX_ERRORTYPE VIDDEC_SaveBuffer(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead); 1425 OMX_ERRORTYPE VIDDEC_CopyBuffer(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead); 1426 #endif 1427 OMX_ERRORTYPE VIDDEC_UnloadCodec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1428 OMX_ERRORTYPE VIDDEC_LoadCodec(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1429 OMX_ERRORTYPE VIDDEC_Set_SN_StreamType(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1430 OMX_ERRORTYPE VIDDEC_SetMpeg4_Parameters(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1431 1432 #ifdef VIDDEC_ACTIVATEPARSER 1433 OMX_ERRORTYPE VIDDEC_ParseVideo_WMV9_VC1( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead); 1434 OMX_ERRORTYPE VIDDEC_ParseVideo_WMV9_RCV( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead); 1435 OMX_ERRORTYPE VIDDEC_ParseHeader(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BUFFERHEADERTYPE *pBuffHead); 1436 OMX_ERRORTYPE VIDDEC_ParseVideo_MPEG4( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead); 1437 OMX_ERRORTYPE VIDDEC_ParseVideo_H264(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, 1438 OMX_BUFFERHEADERTYPE* pBuffHead,OMX_S32* nWidth, 1439 OMX_S32* nHeight, OMX_S32* nCropWidth, OMX_S32* nCropHeight, OMX_U32 nType); 1440 OMX_ERRORTYPE VIDDEC_ParseVideo_MPEG2( OMX_S32* nWidth, OMX_S32* nHeight, OMX_BUFFERHEADERTYPE *pBuffHead); 1441 OMX_U32 VIDDEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition); 1442 OMX_S32 VIDDEC_UVLC_dec(OMX_U32 *nPosition, OMX_U8* pBuffer); 1443 OMX_ERRORTYPE AddStateTransition(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate); 1444 OMX_ERRORTYPE RemoveStateTransition(VIDDEC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal); 1445 OMX_ERRORTYPE IncrementCount (OMX_U8 * pCounter, pthread_mutex_t *pMutex); 1446 OMX_ERRORTYPE DecrementCount (OMX_U8 * pCounter, pthread_mutex_t *pMutex); 1447 1448 #endif 1449 #endif 1450