1 2 /* 3 * Copyright (C) Texas Instruments - http://www.ti.com/ 4 * 5 * This library is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU Lesser General Public 7 * License as published by the Free Software Foundation; either 8 * version 2.1 of the License, or (at your option) any later version. 9 * 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this library; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20 */ 21 /* ============================================================================= 22 * Texas Instruments OMAP(TM) Platform Software 23 * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24 * 25 * Use of this software is controlled by the terms and conditions found 26 * in the license agreement under which this software has been supplied. 27 * ============================================================================ */ 28 /** 29 * @file OMX_AacDec_Utils.h 30 * 31 * This is an header file for an audio AAC decoder that is fully 32 * compliant with the OMX Audio specification. 33 * This the file is used internally by the component 34 * in its code. 35 * 36 * @path $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\aac_dec\inc\ 37 * 38 * @rev 1.0 39 */ 40 /* --------------------------------------------------------------------------- */ 41 #ifndef OMX_AACDEC_UTILS__H 42 #define OMX_AACDEC_UTILS__H 43 44 #include <OMX_Component.h> 45 #include <OMX_TI_Common.h> 46 #include <OMX_TI_Debug.h> 47 #include "LCML_DspCodec.h" 48 #include <pthread.h> 49 #include <sched.h> 50 51 #ifdef RESOURCE_MANAGER_ENABLED 52 #include <ResourceManagerProxyAPI.h> 53 #endif 54 55 #ifdef UNDER_CE 56 #include <windows.h> 57 #include <oaf_osal.h> 58 #include <omx_core.h> 59 #include <stdlib.h> 60 #endif 61 #ifndef UNDER_CE 62 #define AUDIO_MANAGER 63 #else 64 #undef AUDIO_MANAGER 65 #endif 66 67 #ifdef __PERF_INSTRUMENTATION__ 68 #include "perf.h" 69 #endif 70 71 #ifndef ANDROID 72 #define ANDROID 73 #endif 74 75 #ifdef ANDROID 76 /* Log for Android system*/ 77 #undef LOG_TAG 78 #define LOG_TAG "OMX_AACDEC" 79 80 /* PV opencore capability custom parameter index */ 81 #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347 82 #endif 83 84 #define OBJECTTYPE_LC 2 85 #define OBJECTTYPE_LTP 4 86 #define OBJECTTYPE_HE 5 87 #define OBJECTTYPE_HE2 29 88 89 #define EXIT_COMPONENT_THRD 10 90 91 92 /* ======================================================================= */ 93 /** 94 * @def AAC_DEC__XXX_VER Component version 95 */ 96 /* ======================================================================= */ 97 #define AACDEC_MAJOR_VER 1 98 #define AACDEC_MINOR_VER 1 99 /* ======================================================================= */ 100 /** 101 * @def NOT_USED_AACDEC Defines a value for "don't care" parameters 102 */ 103 /* ======================================================================= */ 104 #define NOT_USED_AACDEC 0 105 /* ======================================================================= */ 106 /** 107 * @def NORMAL_BUFFER_AACDEC Defines the flag value with all flags turned off 108 */ 109 /* ======================================================================= */ 110 #define NORMAL_BUFFER_AACDEC 0 111 /* ======================================================================= */ 112 /** 113 * @def OMX_AACDEC_DEFAULT_SEGMENT Default segment ID for the LCML 114 */ 115 /* ======================================================================= */ 116 #define OMX_AACDEC_DEFAULT_SEGMENT (0) 117 /* ======================================================================= */ 118 /** 119 * @def OMX_AACDEC_SN_TIMEOUT Timeout value for the socket node 120 */ 121 /* ======================================================================= */ 122 #define OMX_AACDEC_SN_TIMEOUT (-1) 123 /* ======================================================================= */ 124 /** 125 * @def OMX_AACDEC_SN_PRIORITY Priority for the socket node 126 */ 127 /* ======================================================================= */ 128 #define OMX_AACDEC_SN_PRIORITY (10) 129 /* ======================================================================= */ 130 /** 131 * @def OMX_AACDEC_NUM_DLLS number of DLL's 132 */ 133 /* ======================================================================= */ 134 #define OMX_AACDEC_NUM_DLLS (2) 135 136 #define AACDEC_BUFHEADER_VERSION 0x1 137 /* ======================================================================= */ 138 /** 139 ** Default timeout used to come out of blocking calls* 140 * 141 */ 142 /* ======================================================================= */ 143 #define AACD_TIMEOUT (1000) /* millisecs */ 144 145 /* ======================================================================= */ 146 /** 147 * Wince #define 148 * 149 */ 150 /* ======================================================================= */ 151 #ifdef UNDER_CE 152 #define sleep Sleep 153 #endif 154 /* ======================================================================= */ 155 /** 156 * @def AACDEC_USN_DLL_NAME USN DLL name 157 */ 158 /* ======================================================================= */ 159 #ifdef UNDER_CE 160 #define AACDEC_USN_DLL_NAME "\\windows\\usn.dll64P" 161 #else 162 #define AACDEC_USN_DLL_NAME "usn.dll64P" 163 #endif 164 165 /* ======================================================================= */ 166 /** 167 * @def AACDEC_DLL_NAME AAC Dec Decoder socket node DLL name 168 */ 169 /* ======================================================================= */ 170 #ifdef UNDER_CE 171 #define AACDEC_DLL_NAME "\\windows\\mpeg4aacdec_sn.dll64P" 172 #else 173 #define AACDEC_DLL_NAME "mpeg4aacdec_sn.dll64P" 174 #endif 175 176 #define DONT_CARE 0 177 178 /* ======================================================================= */ 179 /** 180 * @def AACDEC_CPU_USAGE for Resource Mannager (MHZ) 181 */ 182 /* ======================================================================= */ 183 #define AACDEC_CPU_USAGE 50 184 185 186 /* ======================================================================= */ 187 /** 188 * @def AACDEC_SBR_CONTENT flag detection 189 */ 190 /* ======================================================================= */ 191 192 #define AACDEC_SBR_CONTENT 0x601 193 194 195 /* ======================================================================= */ 196 /** 197 * @def AACDEC_PS_CONTENT flag detection 198 */ 199 /* ======================================================================= */ 200 201 #define AACDEC_PS_CONTENT 0x602 202 203 204 /* ======================================================================= */ 205 /** 206 * @def AACDEC_DEBUG Debug print macro 207 */ 208 /* ======================================================================= */ 209 210 #undef AACDEC_DEBUG 211 #define _ERROR_PROPAGATION__ 212 213 #ifdef UNDER_CE 214 215 /* ======================================================================= */ 216 /** 217 * @def DEBUG Memory print macro 218 */ 219 /* ======================================================================= */ 220 #if DEBUG 221 #define AACDEC_DPRINT printf 222 #define AACDEC_MEMPRINT printf 223 #define AACDEC_STATEPRINT printf 224 #define AACDEC_BUFPRINT printf 225 #define AACDEC_MEMPRINT printf 226 #define AACDEC_EPRINT printf 227 #else 228 #define AACDEC_DPRINT 229 #define AACDEC_MEMPRINT 230 #define AACDEC_STATEPRINT 231 #define AACDEC_BUFPRINT 232 #define AACDEC_MEMPRINT 233 #define AACDEC_EPRINT 234 #endif 235 236 #else /* for Linux */ 237 238 #ifdef AACDEC_DEBUG 239 #define AACDEC_DPRINT printf 240 #undef AACDEC_BUFPRINT printf 241 #undef AACDEC_MEMPRINT printf 242 #define AACDEC_STATEPRINT printf 243 #else 244 #define AACDEC_DPRINT(...) 245 #endif 246 247 #ifdef AACDEC_STATEDETAILS 248 #define AACDEC_STATEPRINT printf 249 #else 250 #define AACDEC_STATEPRINT(...) 251 #endif 252 253 #ifdef AACDEC_BUFDETAILS 254 #define AACDEC_BUFPRINT printf 255 #else 256 #define AACDEC_BUFPRINT(...) 257 #endif 258 259 #ifdef AACDEC_MEMDETAILS 260 #define AACDEC_MEMPRINT(...) fprintf(stdout, "%s %d:: ",__FUNCTION__, __LINE__); \ 261 fprintf(stdout, __VA_ARGS__); \ 262 fprintf(stdout, "\n"); 263 #else 264 #define AACDEC_MEMPRINT(...) 265 #endif 266 267 #define AACDEC_EPRINT ALOGE 268 269 #endif 270 271 272 /* ======================================================================= */ 273 /** 274 * @def AACDEC_OMX_ERROR_EXIT Exit print and return macro 275 */ 276 /* ======================================================================= */ 277 #define AACDEC_OMX_ERROR_EXIT(_e_, _c_, _s_) \ 278 _e_ = _c_; \ 279 OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n**************** OMX ERROR ************************\n"); \ 280 OMXDBG_PRINT(stderr, ERROR, 4, 0, "%d : Error Name: %s : Error Num = %x",__LINE__, _s_, _e_); \ 281 OMXDBG_PRINT(stderr, ERROR, 4, 0, "\n**************** OMX ERROR ************************\n"); \ 282 goto EXIT; 283 284 /* ======================================================================= */ 285 /** 286 * @def AACDEC_OMX_CONF_CHECK_CMD Command check Macro 287 */ 288 /* ======================================================================= */ 289 #define AACDEC_OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3) \ 290 { \ 291 if(!_ptr1 || !_ptr2 || !_ptr3){ \ 292 eError = OMX_ErrorBadParameter; \ 293 goto EXIT; \ 294 } \ 295 } 296 297 /* ======================================================================= */ 298 /** 299 * @def OMX_CONF_INIT_STRUCT Macro to Initialise the structure variables 300 */ 301 /* ======================================================================= */ 302 #define OMX_CONF_INIT_STRUCT(_s_, _name_) \ 303 memset((_s_), 0x0, sizeof(_name_)); \ 304 (_s_)->nSize = sizeof(_name_); \ 305 (_s_)->nVersion.s.nVersionMajor = 1; \ 306 (_s_)->nVersion.s.nVersionMinor = 1; \ 307 (_s_)->nVersion.s.nRevision = 0x0; \ 308 (_s_)->nVersion.s.nStep = 0x0 309 310 /* ======================================================================= */ 311 /** 312 * @def AACDEC_BUFDETAILS Turns buffer messaging on and off 313 */ 314 /* ======================================================================= */ 315 #undef AACDEC_BUFDETAILS 316 /* ======================================================================= */ 317 /** 318 * @def AACDEC_STATEDETAILS Turns state messaging on and off 319 */ 320 /* ======================================================================= */ 321 #undef AACDEC_STATEDETAILS 322 /* ======================================================================= */ 323 /** 324 * @def AACDEC_MEMDETAILS Turns memory messaging on and off 325 */ 326 /* ======================================================================= */ 327 #undef AACDEC_MEMDETAILS 328 329 #define AACDEC_OUTPUT_PORT 1 330 #define AACDEC_INPUT_PORT 0 331 #define AACDEC_APP_ID 100 332 #define MAX_NUM_OF_BUFS_AACDEC 15 333 #define PARAMETRIC_STEREO_AACDEC 1 334 #define NON_PARAMETRIC_STEREO_AACDEC 0 335 /* ======================================================================= */ 336 /** 337 * @def NUM_OF_PORTS_AACDEC Number of ports 338 */ 339 /* ======================================================================= */ 340 #define NUM_OF_PORTS_AACDEC 2 341 /* ======================================================================= */ 342 /** 343 * @def STREAM_COUNT_AACDEC Number of streams 344 */ 345 /* ======================================================================= */ 346 #define STREAM_COUNT_AACDEC 2 347 348 /** Default timeout used to come out of blocking calls*/ 349 350 /* ======================================================================= */ 351 /** 352 * @def AACD_NUM_INPUT_BUFFERS Default number of input buffers 353 * 354 */ 355 /* ======================================================================= */ 356 #define AACD_NUM_INPUT_BUFFERS 4 357 /* ======================================================================= */ 358 /** 359 * @def AACD_NUM_OUTPUT_BUFFERS Default number of output buffers 360 * 361 */ 362 /* ======================================================================= */ 363 #define AACD_NUM_OUTPUT_BUFFERS 4 364 365 /* ======================================================================= */ 366 /** 367 * @def AACD_INPUT_BUFFER_SIZE Default input buffer size 368 * 369 */ 370 /* ======================================================================= */ 371 #define AACD_INPUT_BUFFER_SIZE 1536*4 372 /* ======================================================================= */ 373 /** 374 * @def AACD_OUTPUT_BUFFER_SIZE Default output buffer size 375 * 376 */ 377 /* ======================================================================= */ 378 #define AACD_OUTPUT_BUFFER_SIZE 8192*2 379 /* ======================================================================= */ 380 /** 381 * @def AACD_SAMPLING_FREQUENCY Sampling frequency 382 */ 383 /* ======================================================================= */ 384 #define AACD_SAMPLING_FREQUENCY 44100 385 386 /* ======================================================================= */ 387 /** 388 * @def AACDec macros for MONO,STEREO_INTERLEAVED,STEREO_NONINTERLEAVED 389 */ 390 /* ======================================================================= */ 391 /*#define AACD_STEREO_INTERLEAVED_STREAM 2 392 #define AACD_STEREO_NONINTERLEAVED_STREAM 3*/ 393 /* ======================================================================= */ 394 /** 395 * @def AACDec macros for MONO,STEREO_INTERLEAVED,STEREO_NONINTERLEAVED 396 */ 397 /* ======================================================================= */ 398 /* Stream types supported*/ 399 #define MONO_STREAM_AACDEC 1 400 #define STEREO_INTERLEAVED_STREAM_AACDEC 2 401 #define STEREO_NONINTERLEAVED_STREAM_AACDEC 3 402 403 /* ======================================================================= */ 404 /** 405 * pthread variable to indicate OMX returned all buffers to app 406 */ 407 /* ======================================================================= */ 408 pthread_mutex_t bufferReturned_mutex; 409 pthread_cond_t bufferReturned_condition; 410 411 /** 412 * 413 * AAC Decoder Profile:0 - MAIN, 1 - LC, 2 - SSR, 3 - LTP. 414 */ 415 typedef enum { 416 EProfileMain, 417 EProfileLC, 418 EProfileSSR, 419 EProfileLTP 420 }AACProfile; 421 /* ======================================================================= */ 422 /** COMP_PORT_TYPE_AACDEC Port types 423 * 424 * @param INPUT_PORT_AACDEC Input port 425 * 426 * @param OUTPUT_PORT_AACDEC Output port 427 */ 428 /* ==================================================================== */ 429 /*This enum must not be changed. */ 430 typedef enum COMP_PORT_TYPE_AACDEC { 431 INPUT_PORT_AACDEC = 0, 432 OUTPUT_PORT_AACDEC 433 }COMP_PORT_TYPE_AACDEC; 434 /* ======================================================================= */ 435 /** OMX_INDEXAUDIOTYPE_AACDEC Defines the custom configuration settings 436 * for the component 437 * 438 * @param OMX_IndexCustomMode16_24bit_AACDEC Sets the 16/24 mode 439 * 440 * @param OMX_IndexCustomModeProfile_AACDEC Sets the Profile mode 441 * 442 * @param OMX_IndexCustomModeSBR_AACDEC Sets the SBR mode 443 * 444 * @param OMX_IndexCustomModeDasfConfig_AACDEC Sets the DASF mode 445 * 446 * @param OMX_IndexCustomModeRAW_AACDEC Sets the RAW mode 447 * 448 * @param OMX_IndexCustomModePS_AACDEC Sets the ParametricStereo mode 449 * 450 */ 451 /* ==================================================================== */ 452 typedef enum OMX_INDEXAUDIOTYPE_AACDEC { 453 OMX_IndexCustomAacDecHeaderInfoConfig = 0xFF000001, 454 OMX_IndexCustomAacDecStreamIDConfig, 455 OMX_IndexCustomAacDecDataPath, 456 OMX_IndexCustomDebug 457 }OMX_INDEXAUDIOTYPE_AACDEC; 458 459 /* ======================================================================= */ 460 /** IAUDIO_PcmFormat: This value is used by DSP. 461 * 462 * @param IAUDIO_BLOCK: It is used in DASF mode. 463 * 464 * @param IAUDIO_INTERLEAVED: It specifies interleaved format of SN. 465 */ 466 /* ==================================================================== */ 467 typedef enum { 468 EAUDIO_BLOCK =0, 469 EAUDIO_INTERLEAVED 470 }TAUDIO_AacFormat; 471 472 /* ======================================================================= */ 473 /** IAUDIO_PcmFormat: This value is used by DSP. 474 * 475 * @param IAUDIO_BLOCK: It is used in DASF mode. 476 * 477 * @param IAUDIO_INTERLEAVED: It specifies interleaved format of SN. 478 */ 479 /* ==================================================================== */ 480 typedef enum { 481 IAUDIO_BLOCK=0, 482 IAUDIO_INTERLEAVED 483 } IAUDIO_PcmFormat; 484 /* ======================================================================= */ 485 /** MPEG4AACDEC_UALGParams 486 * 487 * @param lOutputFormat - To set interleaved/Block format:Refer to IAUDIO_AacFormat. 488 * @param DownSampleSbr - 489 */ 490 /* ==================================================================== */ 491 typedef struct { 492 OMX_U32 size; 493 long lOutputFormat; 494 long DownSampleSbr; 495 long iEnablePS; 496 long lSamplingRateIdx; 497 long bRawFormat; 498 long dualMonoMode; 499 } MPEG4AACDEC_UALGParams; 500 501 /* ======================================================================= */ 502 /** IUALG_Cmd_AAC_DEC: This enum type describes the standard set of commands that 503 * will be passed to iualg control API at DSP. This enum is taken as it is from 504 * DSP side USN source code. 505 * 506 * @param IUALG_CMD_STOP: This command indicates that higher layer framework 507 * has received a stop command and no more process API will be called for the 508 * current data stream. The iualg layer is expected to ensure that all processed 509 * output as is put in the output IUALG_Buf buffers and the state of all buffers 510 * changed as to free or DISPATCH after this function call. 511 * 512 * @param IUALG_CMD_PAUSE: This command indicates that higher layer framework 513 * has received a PAUSE command on the current data stream. The iualg layer 514 * can change the state of some of its output IUALG_Bufs to DISPATCH to enable 515 * high level framework to use the processed data until the command was received. 516 * 517 * @param IUALG_CMD_GETSTATUS: This command indicates that some algo specific 518 * status needs to be returned to the framework. The pointer to the status 519 * structure will be in IALG_status * variable passed to the control API. 520 * The interpretation of the content of this pointer is left to IUALG layer. 521 * 522 * @param IUALG_CMD_SETSTATUS: This command indicates that some algo specific 523 * status needs to be set. The pointer to the status structure will be in 524 * IALG_status * variable passed to the control API. The interpretation of the 525 * content of this pointer is left to IUALG layer. 526 * 527 * @param IUALG_CMD_USERCMDSTART: The algorithm specific control commands can 528 * have the enum type set from this number. 529 */ 530 /* ==================================================================== */ 531 532 typedef enum { 533 IUALG_CMD_STOP = 0, 534 IUALG_CMD_PAUSE = 1, 535 IUALG_CMD_GETSTATUS = 2, 536 IUALG_CMD_SETSTATUS = 3, 537 IUALG_CMD_USERCMDSTART_AACDEC = 100 538 }IUALG_Cmd_AAC_DEC; 539 540 typedef enum{ 541 IAAC_WARN_DATA_CORRUPT = 0x0804 542 }IAAC_WARN_MSG; 543 544 #ifdef UNDER_CE 545 #ifndef _OMX_EVENT_ 546 #define _OMX_EVENT_ 547 typedef struct OMX_Event { 548 HANDLE event; 549 } OMX_Event; 550 #endif 551 int OMX_CreateEvent(OMX_Event *event); 552 int OMX_SignalEvent(OMX_Event *event); 553 int OMX_WaitForEvent(OMX_Event *event); 554 int OMX_DestroyEvent(OMX_Event *event); 555 #endif 556 557 /* ======================================================================= */ 558 /** IUALG_PCMDCmd: This enum specifies the command to DSP. 559 * 560 * @param IULAG_CMD_SETSTREAMTYPE: Specifies the stream type to be sent to DSP. 561 */ 562 /* ==================================================================== */ 563 typedef enum { 564 IULAG_CMD_SETSTREAMTYPE = IUALG_CMD_USERCMDSTART_AACDEC 565 }IUALG_PCMDCmd; 566 567 /* ======================================================================= */ 568 /** AACDEC_UAlgInBufParamStruct: This struct is passed with input buffers that 569 * are sent to DSP. 570 */ 571 /* ==================================================================== */ 572 typedef struct { 573 /* Set to 1 if buffer is last buffer */ 574 unsigned short bLastBuffer; 575 unsigned short bConcealBuffer; 576 }AACDEC_UAlgInBufParamStruct; 577 578 /* ======================================================================= */ 579 /** USN_AudioCodecParams: This contains the information which does to Codec 580 * on DSP 581 * are sent to DSP. 582 */ 583 /* ==================================================================== */ 584 typedef struct USN_AudioCodecParams{ 585 /* Specifies the sample frequency */ 586 unsigned long ulSamplingFreq; 587 /* Specifies the UUID */ 588 unsigned long unUUID; 589 /* Specifies the audio format */ 590 unsigned short unAudioFormat; 591 }USN_AudioCodecParams; 592 593 /* ======================================================================= */ 594 /** AACDEC_UAlgOutBufParamStruct: This is passed with output buffer to DSP. 595 */ 596 /* ==================================================================== */ 597 typedef struct { 598 unsigned long ulFrameCount; 599 unsigned long isLastBuffer; 600 }AACDEC_UAlgOutBufParamStruct; 601 602 typedef struct AACDEC_UALGParams{ 603 unsigned long lOutputFormat; 604 unsigned long lMonoToStereoCopy; 605 } AACDEC_UALGParams; 606 607 /* ======================================================================= */ 608 /** AACD_LCML_BUFHEADERTYPE: This is LCML buffer header which is sent to LCML 609 * for both input and output buffers. 610 */ 611 /* ==================================================================== */ 612 typedef struct AACD_LCML_BUFHEADERTYPE { 613 /* Direction whether input or output buffer */ 614 OMX_DIRTYPE eDir; 615 /* Pointer to OMX Buffer Header */ 616 OMX_BUFFERHEADERTYPE *pBufHdr; 617 /* Other parameters, may be useful for enhancements */ 618 void *pOtherParams[10]; 619 /* Input Parameter Information structure */ 620 AACDEC_UAlgInBufParamStruct *pIpParam; 621 /* Output Parameter Information structure */ 622 AACDEC_UAlgOutBufParamStruct *pOpParam; 623 }AACD_LCML_BUFHEADERTYPE; 624 625 /* Component Port Context */ 626 typedef struct AUDIODEC_PORT_TYPE { 627 /* Used in tunneling, this is handle of tunneled component */ 628 OMX_HANDLETYPE hTunnelComponent; 629 /* Port which has to be tunneled */ 630 OMX_U32 nTunnelPort; 631 /* Buffer Supplier Information */ 632 OMX_BUFFERSUPPLIERTYPE eSupplierSetting; 633 /* Number of buffers */ 634 OMX_U8 nBufferCnt; 635 /* Port format information */ 636 OMX_AUDIO_PARAM_PORTFORMATTYPE* pPortFormat; 637 } AUDIODEC_PORT_TYPE; 638 639 640 /* ======================================================================= */ 641 /** AAC_DEC_BUFFERLIST: This contains information about a buffer's owner whether 642 * it is application or component, number of buffers owned etc. 643 * 644 * @see OMX_BUFFERHEADERTYPE 645 */ 646 /* ==================================================================== */ 647 struct AAC_DEC_BUFFERLIST{ 648 /* Array of pointer to OMX buffer headers */ 649 OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS_AACDEC]; 650 /* Array that tells about owner of each buffer */ 651 OMX_U32 bufferOwner[MAX_NUM_OF_BUFS_AACDEC]; 652 /* Tracks pending buffers */ 653 OMX_U32 bBufferPending[MAX_NUM_OF_BUFS_AACDEC]; 654 /* Number of buffers */ 655 OMX_U32 numBuffers; 656 }; 657 658 typedef struct AAC_DEC_BUFFERLIST AACDEC_BUFFERLIST; 659 660 typedef struct PV_OMXComponentCapabilityFlagsType 661 { 662 ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability) 663 OMX_BOOL iIsOMXComponentMultiThreaded; 664 OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; 665 OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; 666 OMX_BOOL iOMXComponentSupportsMovableInputBuffers; 667 OMX_BOOL iOMXComponentSupportsPartialFrames; 668 OMX_BOOL iOMXComponentNeedsNALStartCode; 669 OMX_BOOL iOMXComponentCanHandleIncompleteFrames; 670 } PV_OMXComponentCapabilityFlagsType; 671 672 /* ======================================================================= */ 673 /** AACDEC_COMPONENT_PRIVATE: This is the major and main structure of the 674 * component which contains all type of information of buffers, ports etc 675 * contained in the component. 676 * 677 * @see OMX_BUFFERHEADERTYPE 678 * @see OMX_AUDIO_PARAM_PORTFORMATTYPE 679 * @see OMX_PARAM_PORTDEFINITIONTYPE 680 * @see AACD_LCML_BUFHEADERTYPE 681 * @see OMX_PORT_PARAM_TYPE 682 * @see OMX_PRIORITYMGMTTYPE 683 * @see AUDIODEC_PORT_TYPE 684 * @see AACDEC_BUFFERLIST 685 * @see LCML_STRMATTR 686 * @see 687 */ 688 /* ==================================================================== */ 689 690 typedef struct AACDEC_COMPONENT_PRIVATE 691 { 692 693 OMX_CALLBACKTYPE cbInfo; 694 /** Handle for use with async callbacks */ 695 OMX_PORT_PARAM_TYPE* sPortParam; 696 /* Input port information */ 697 OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat; 698 /* Output port information */ 699 OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat; 700 /* Buffer owner information */ 701 OMX_U32 bIsBufferOwned[NUM_OF_PORTS_AACDEC]; 702 703 /** This will contain info like how many buffers 704 are there for input/output ports, their size etc, but not 705 BUFFERHEADERTYPE POINTERS. */ 706 OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS_AACDEC]; 707 /* Contains information that come from application */ 708 OMX_AUDIO_PARAM_AACPROFILETYPE* aacParams; 709 710 OMX_AUDIO_PARAM_PCMMODETYPE* pcmParams; 711 712 /** This is component handle */ 713 OMX_COMPONENTTYPE* pHandle; 714 715 /** Current state of this component */ 716 OMX_STATETYPE curState; 717 718 /** The component thread handle */ 719 pthread_t ComponentThread; 720 721 /** The pipes for sending buffers to the thread */ 722 int dataPipe[2]; 723 724 /** The pipes for sending buffers to the thread */ 725 int cmdPipe[2]; 726 727 /** The pipes for sending command data to the thread */ 728 int cmdDataPipe[2]; 729 730 /** Set to indicate component is stopping */ 731 OMX_U32 bIsEOFSent; 732 733 /** Count of number of buffers outstanding with bridge */ 734 OMX_U32 lcml_nIpBuf; 735 736 /** Count of number of buffers outstanding with bridge */ 737 OMX_U32 lcml_nOpBuf; 738 739 /** Counts of number of input buffers sent to LCML */ 740 OMX_U32 lcml_nCntIp; 741 /** Counts of number of input buffers received from LCML */ 742 OMX_U32 lcml_nCntIpRes; 743 /** Counts of number of output buffers sent to LCML */ 744 OMX_U32 lcml_nCntOp; 745 /** Counts of number of output buffers received from LCML */ 746 OMX_U32 lcml_nCntOpReceived; 747 /** Counts of number of buffers sent to App */ 748 OMX_U32 lcml_nCntApp; 749 /** Counts of number of buffers received from App */ 750 OMX_U32 app_nBuf; 751 752 OMX_U32 lcml_compID; 753 /** Counts of number of output buffers reclaimed from lcml */ 754 OMX_U32 num_Reclaimed_Op_Buff; 755 /** Counts of number of input buffers sent to lcml */ 756 OMX_U32 num_Sent_Ip_Buff; 757 /** Counts of number of output buffers sent to lcml */ 758 OMX_U32 num_Op_Issued; 759 /** Holds the value of dasf mode, 1: DASF mode or 0: File Mode */ 760 OMX_U32 dasfmode; 761 762 /** This is LCML handle */ 763 OMX_HANDLETYPE pLcmlHandle; 764 765 /** ID stream ID**/ 766 OMX_U32 streamID; 767 /** Contains pointers to LCML Buffer Headers */ 768 AACD_LCML_BUFHEADERTYPE *pLcmlBufHeader[2]; 769 770 #ifdef __PERF_INSTRUMENTATION__ 771 PERF_OBJHANDLE pPERF, pPERFcomp; 772 OMX_U32 nLcml_nCntIp; 773 OMX_U32 nLcml_nCntOpReceived; 774 #endif 775 776 /** Tells whether buffers on ports have been allocated */ 777 OMX_U32 bPortDefsAllocated; 778 /** Tells whether component thread has started */ 779 OMX_U32 bCompThreadStarted; 780 /** Marks the buffer data */ 781 OMX_PTR pMarkData; 782 /** Marks the buffer */ 783 OMX_MARKTYPE *pMarkBuf; 784 /** Marks the target component */ 785 OMX_HANDLETYPE hMarkTargetComponent; 786 /** Flag to track when input buffer's filled length is 0 */ 787 OMX_U32 bBypassDSP; 788 /** Input port enable flag */ 789 OMX_U32 ipPortEnableFlag; 790 /** Input port disble flag */ 791 OMX_U32 ipPortDisableFlag; 792 /** Pointer to port parameter structure */ 793 OMX_PORT_PARAM_TYPE* pPortParamType; 794 /** Pointer to port priority management structure */ 795 OMX_PRIORITYMGMTTYPE* pPriorityMgmt; 796 797 #ifdef RESOURCE_MANAGER_ENABLED 798 RMPROXY_CALLBACKTYPE rmproxyCallback; 799 #endif 800 801 OMX_BOOL bPreempted; 802 803 804 /** Contains the port related info of both the ports */ 805 AUDIODEC_PORT_TYPE *pCompPort[NUM_OF_PORTS_AACDEC]; 806 /* Checks whether or not buffer were allocated by appliction */ 807 OMX_U32 bufAlloced; 808 /** Flag to check about execution of component thread */ 809 OMX_U16 bExitCompThrd; 810 /** Pointer to list of input buffers */ 811 AACDEC_BUFFERLIST *pInputBufferList; 812 /** Pointer to list of output buffers */ 813 AACDEC_BUFFERLIST *pOutputBufferList; 814 /** it is used for component's create phase arguments */ 815 LCML_STRMATTR *strmAttr; 816 /** Contains the version information */ 817 OMX_U32 nVersion; 818 819 /** Number of input buffers at runtime */ 820 OMX_U32 nRuntimeInputBuffers; 821 822 /** Number of output buffers at runtime */ 823 OMX_U32 nRuntimeOutputBuffers; 824 825 /** Parameters being passed to the SN */ 826 USN_AudioCodecParams *pParams; 827 828 /** Dynamic Parameters being passed to the SN */ 829 MPEG4AACDEC_UALGParams * AACDEC_UALGParam; 830 831 OMX_U16 framemode; 832 833 OMX_STRING cComponentName; 834 835 OMX_VERSIONTYPE ComponentVersion; 836 837 OMX_U32 nOpBit; 838 OMX_U32 parameteric_stereo; 839 OMX_U32 dualMonoMode; 840 OMX_U32 SBR; 841 OMX_U32 RAW; 842 OMX_U32 nFillThisBufferCount; 843 OMX_U32 nFillBufferDoneCount; 844 OMX_U32 nEmptyThisBufferCount; 845 OMX_U32 nEmptyBufferDoneCount; 846 OMX_U32 bInitParamsInitialized; 847 AACDEC_BUFFERLIST *pInputBufferListQueue; 848 AACDEC_BUFFERLIST *pOutputBufferListQueue; 849 /** To store input buffers recieved while in paused state **/ 850 OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS_AACDEC]; 851 OMX_U32 nNumInputBufPending; 852 853 /** To store out buffers received while in puased state **/ 854 OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS_AACDEC]; 855 OMX_U32 nNumOutputBufPending; 856 857 /** Flags to control port disable command **/ 858 OMX_U32 bDisableCommandPending; 859 OMX_U32 bDisableCommandParam; 860 /** Flags to control port enable command **/ 861 OMX_U32 bEnableCommandPending; 862 OMX_U32 bEnableCommandParam; 863 864 OMX_U32 nInvalidFrameCount; 865 OMX_U32 numPendingBuffers; 866 OMX_U32 bNoIdleOnStop; 867 OMX_U32 bDspStoppedWhileExecuting; 868 /* bIdleCommandPending;*/ 869 OMX_S32 nOutStandingFillDones; 870 OMX_BOOL bIsInvalidState; 871 OMX_STRING* sDeviceString; 872 #ifndef UNDER_CE 873 pthread_mutex_t AlloBuf_mutex; 874 pthread_cond_t AlloBuf_threshold; 875 OMX_U8 AlloBuf_waitingsignal; 876 877 pthread_mutex_t InLoaded_mutex; 878 pthread_cond_t InLoaded_threshold; 879 OMX_U8 InLoaded_readytoidle; 880 881 pthread_mutex_t InIdle_mutex; 882 pthread_cond_t InIdle_threshold; 883 OMX_U8 InIdle_goingtoloaded; 884 885 pthread_mutex_t codecStop_mutex; 886 pthread_cond_t codecStop_threshold; 887 OMX_U8 codecStop_waitingsignal; 888 889 pthread_mutex_t codecFlush_mutex; 890 pthread_cond_t codecFlush_threshold; 891 OMX_U8 codecFlush_waitingsignal; 892 893 OMX_U32 nUnhandledFillThisBuffers; 894 OMX_U32 nHandledFillThisBuffers; 895 OMX_U32 nUnhandledEmptyThisBuffers; 896 OMX_U32 nHandledEmptyThisBuffers; 897 OMX_BOOL bFlushOutputPortCommandPending; 898 OMX_BOOL bFlushInputPortCommandPending; 899 #else 900 OMX_Event AlloBuf_event; 901 OMX_U8 AlloBuf_waitingsignal; 902 903 OMX_Event InLoaded_event; 904 OMX_U8 InLoaded_readytoidle; 905 906 OMX_Event InIdle_event; 907 OMX_U8 InIdle_goingtoloaded; 908 #endif 909 910 OMX_BOOL bLoadedCommandPending; 911 OMX_PARAM_COMPONENTROLETYPE *componentRole; 912 913 OMX_U8 PendingInPausedBufs; 914 OMX_BUFFERHEADERTYPE *pInBufHdrPausedPending[MAX_NUM_OF_BUFS_AACDEC]; 915 OMX_U8 PendingOutPausedBufs; 916 OMX_BUFFERHEADERTYPE *pOutBufHdrPausedPending[MAX_NUM_OF_BUFS_AACDEC]; 917 918 /** Keep buffer timestamps **/ 919 OMX_S64 arrBufIndex[MAX_NUM_OF_BUFS_AACDEC]; 920 /**Keep buffer tickcount*/ 921 OMX_U32 arrBufIndexTick[MAX_NUM_OF_BUFS_AACDEC]; 922 923 /** Index to arrBufIndex[] and arrBufIndexTick[], used for input buffer timestamps */ 924 OMX_U8 IpBufindex; 925 /** Index to arrBufIndex[] and arrBufIndexTick[], used for input buffer timestamps */ 926 OMX_U8 OpBufindex; 927 928 /** Flag to flush SN after EOS in order to process more buffers after EOS**/ 929 OMX_U8 SendAfterEOS; 930 931 /** Flag to mark the first sent buffer**/ 932 OMX_U8 first_buff; 933 /** First Time Stamp sent **/ 934 OMX_TICKS first_TS; 935 /** Temporal time stamp **/ 936 OMX_TICKS temp_TS; 937 938 PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags; 939 OMX_BOOL bConfigData; 940 OMX_BOOL reconfigInputPort; 941 OMX_BOOL reconfigOutputPort; 942 OMX_U8 OutPendingPR; 943 944 struct OMX_TI_Debug dbg; 945 946 /** Indicate when first output buffer received from DSP **/ 947 OMX_U32 first_output_buf_rcv; 948 949 } AACDEC_COMPONENT_PRIVATE; 950 951 /* ================================================================================= * */ 952 /** 953 * OMX_ComponentInit() function is called by OMX Core to initialize the component 954 * with default values of the component. Before calling this function OMX_Init 955 * must have been called. 956 * 957 * @param *hComp This is component handle allocated by the OMX core. 958 * 959 * @pre OMX_Init should be called by application. 960 * 961 * @post Component has initialzed with default values. 962 * 963 * @return OMX_ErrorNone = Successful Inirialization of the component\n 964 * OMX_ErrorInsufficientResources = Not enough memory 965 * 966 * @see AacDec_StartCompThread() 967 */ 968 /* ================================================================================ * */ 969 #ifndef UNDER_CE 970 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 971 #else 972 /* WinCE Implicit Export Syntax */ 973 #define OMX_EXPORT __declspec(dllexport) 974 /* =========================================================== */ 975 /** 976 * OMX_ComponentInit() Initializes component 977 * 978 * 979 * @param hComp OMX Handle 980 * 981 * @return OMX_ErrorNone = Successful 982 * Other error code = fail 983 * 984 */ 985 /*================================================================== */ 986 OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 987 #endif 988 989 /* ================================================================================= * */ 990 /** 991 * AacDec_StartCompThread() starts the component thread. This is internal 992 * function of the component. 993 * 994 * @param pHandle This is component handle allocated by the OMX core. 995 * 996 * @pre None 997 * 998 * @post None 999 * 1000 * @return OMX_ErrorNone = Successful Inirialization of the component\n 1001 * OMX_ErrorInsufficientResources = Not enough memory 1002 * 1003 * @see None 1004 */ 1005 /* ================================================================================ * */ 1006 OMX_ERRORTYPE AacDec_StartCompThread(OMX_HANDLETYPE pHandle); 1007 /* ================================================================================= * */ 1008 /** 1009 * AACDEC_Fill_LCMLInitParams() fills the LCML initialization structure. 1010 * 1011 * @param pHandle This is component handle allocated by the OMX core. 1012 * 1013 * @param plcml_Init This structure is filled and sent to LCML. 1014 * 1015 * @pre None 1016 * 1017 * @post None 1018 * 1019 * @return OMX_ErrorNone = Successful Inirialization of the LCML struct. 1020 * OMX_ErrorInsufficientResources = Not enough memory 1021 * 1022 * @see None 1023 */ 1024 /* ================================================================================ * */ 1025 OMX_ERRORTYPE AACDEC_Fill_LCMLInitParams(OMX_HANDLETYPE pHandle, LCML_DSP *plcml_Init, OMX_U16 arr[]); 1026 /* ================================================================================= * */ 1027 /** 1028 * AACDEC_GetBufferDirection() function determines whether it is input buffer or 1029 * output buffer. 1030 * 1031 * @param *pBufHeader This is pointer to buffer header whose direction needs to 1032 * be determined. 1033 * 1034 * @param *eDir This is output argument which stores the direction of buffer. 1035 * 1036 * @pre None 1037 * 1038 * @post None 1039 * 1040 * @return OMX_ErrorNone = Successful processing. 1041 * OMX_ErrorBadParameter = In case of invalid buffer 1042 * 1043 * @see None 1044 */ 1045 /* ================================================================================ * */ 1046 OMX_ERRORTYPE AACDEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, 1047 OMX_DIRTYPE *eDir); 1048 /* ================================================================================= * */ 1049 /** 1050 * AACDEC_LCML_Callback() function is callback which is called by LCML whenever 1051 * there is an even generated for the component. 1052 * 1053 * @param event This is event that was generated. 1054 * 1055 * @param arg This has other needed arguments supplied by LCML like handles 1056 * etc. 1057 * 1058 * @pre None 1059 * 1060 * @post None 1061 * 1062 * @return OMX_ErrorNone = Successful processing. 1063 * OMX_ErrorInsufficientResources = Not enough memory 1064 * 1065 * @see None 1066 */ 1067 /* ================================================================================ * */ 1068 OMX_ERRORTYPE AACDEC_LCML_Callback (TUsnCodecEvent event,void * args [10]); 1069 /* ================================================================================= * */ 1070 /** 1071 * AACDEC_HandleCommand() function handles the command sent by the application. 1072 * All the state transitions, except from nothing to loaded state, of the 1073 * component are done by this function. 1074 * 1075 * @param pComponentPrivate This is component's private date structure. 1076 * 1077 * @pre None 1078 * 1079 * @post None 1080 * 1081 * @return OMX_ErrorNone = Successful processing. 1082 * OMX_ErrorInsufficientResources = Not enough memory 1083 * OMX_ErrorHardware = Hardware error has occured lile LCML failed 1084 * to do any said operartion. 1085 * 1086 * @see None 1087 */ 1088 /* ================================================================================ * */ 1089 OMX_U32 AACDEC_HandleCommand (AACDEC_COMPONENT_PRIVATE *pComponentPrivate); 1090 /* ================================================================================= * */ 1091 /** 1092 * AACDEC_HandleDataBuf_FromApp() function handles the input and output buffers 1093 * that come from the application. It is not direct function wich gets called by 1094 * the application rather, it gets called eventually. 1095 * 1096 * @param *pBufHeader This is the buffer header that needs to be processed. 1097 * 1098 * @param *pComponentPrivate This is component's private date structure. 1099 * 1100 * @pre None 1101 * 1102 * @post None 1103 * 1104 * @return OMX_ErrorNone = Successful processing. 1105 * OMX_ErrorInsufficientResources = Not enough memory 1106 * OMX_ErrorHardware = Hardware error has occured lile LCML failed 1107 * to do any said operartion. 1108 * 1109 * @see None 1110 */ 1111 /* ================================================================================ * */ 1112 OMX_ERRORTYPE AACDEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader, 1113 AACDEC_COMPONENT_PRIVATE *pComponentPrivate); 1114 /* ================================================================================= * */ 1115 /** 1116 * AACDEC_GetLCMLHandle() function gets the LCML handle and interacts with LCML 1117 * by using this LCML Handle. 1118 * 1119 * @param *pBufHeader This is the buffer header that needs to be processed. 1120 * 1121 * @param *pComponentPrivate This is component's private date structure. 1122 * 1123 * @pre None 1124 * 1125 * @post None 1126 * 1127 * @return OMX_HANDLETYPE = Successful loading of LCML library. 1128 * OMX_ErrorHardware = Hardware error has occured. 1129 * 1130 * @see None 1131 */ 1132 /* ================================================================================ * */ 1133 OMX_HANDLETYPE AACDEC_GetLCMLHandle(AACDEC_COMPONENT_PRIVATE* pComponentPrivate); 1134 /* ================================================================================= * */ 1135 /** 1136 * AACDEC_GetCorresponding_LCMLHeader() function gets the corresponding LCML 1137 * header from the actual data buffer for required processing. 1138 * 1139 * @param *pBuffer This is the data buffer pointer. 1140 * 1141 * @param eDir This is direction of buffer. Input/Output. 1142 * 1143 * @param *AACD_LCML_BUFHEADERTYPE This is pointer to LCML Buffer Header. 1144 * 1145 * @pre None 1146 * 1147 * @post None 1148 * 1149 * @return OMX_ErrorNone = Successful Inirialization of the component\n 1150 * OMX_ErrorHardware = Hardware error has occured. 1151 * 1152 * @see None 1153 */ 1154 /* ================================================================================ * */ 1155 OMX_ERRORTYPE AACDEC_GetCorresponding_LCMLHeader(AACDEC_COMPONENT_PRIVATE* pComponentPrivate, 1156 OMX_U8 *pBuffer, 1157 OMX_DIRTYPE eDir, 1158 AACD_LCML_BUFHEADERTYPE **ppLcmlHdr); 1159 /* ================================================================================= * */ 1160 /** 1161 * AACDEC_FreeCompResources() function frees the component resources. 1162 * 1163 * @param pComponent This is the component handle. 1164 * 1165 * @pre None 1166 * 1167 * @post None 1168 * 1169 * @return OMX_ErrorNone = Successful Inirialization of the component\n 1170 * OMX_ErrorHardware = Hardware error has occured. 1171 * 1172 * @see None 1173 */ 1174 /* ================================================================================ * */ 1175 OMX_ERRORTYPE AACDEC_FreeCompResources(OMX_HANDLETYPE pComponent); 1176 /* ================================================================================= * */ 1177 /** 1178 * AACDEC_CleanupInitParams() function frees only the initialization time 1179 * memories allocated. For example, it will not close pipes, it will not free the 1180 * memory allocated to the buffers etc. But it does free the memory of buffers 1181 * utilized by the LCML etc. It is basically subset of AACDEC_FreeCompResources() 1182 * function. 1183 * 1184 * @param pComponent This is the component handle. 1185 * 1186 * @pre None 1187 * 1188 * @post None 1189 * 1190 * @return OMX_ErrorNone = Successful Inirialization of the component\n 1191 * 1192 * @see None 1193 */ 1194 /* ================================================================================ * */ 1195 void AACDEC_CleanupInitParams(OMX_HANDLETYPE pComponent); 1196 /* ================================================================================= * */ 1197 /** 1198 * AACDEC_CleanupInitParamsEx() function frees only the initialization time 1199 * memories allocated. For example, it will not close pipes, it will not free the 1200 * memory allocated to the buffers etc. But it does free the memory of buffers 1201 * utilized by the LCML etc. It is basically subset of AACDEC_FreeCompResources() 1202 * function. Called while port disable when port reconfiguration takes place. 1203 * 1204 * @param pComponent This is the component handle. 1205 * 1206 * @pre None 1207 * 1208 * @post None 1209 * 1210 * @return OMX_ErrorNone = Successful Inirialization of the component\n 1211 * 1212 * @see None 1213 */ 1214 /* ================================================================================ * */ 1215 void AACDEC_CleanupInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport); 1216 /* =========================================================== */ 1217 /** 1218 * AACDEC_SetPending() Called when the component queues a buffer 1219 * to the LCML 1220 * 1221 * @param pComponentPrivate Component private data 1222 * 1223 * @param pBufHdr Buffer header 1224 * 1225 * @param eDir Direction of the buffer 1226 * 1227 * @return None 1228 */ 1229 /*================================================================== */ 1230 void AACDEC_SetPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber); 1231 /* =========================================================== */ 1232 /** 1233 * AACDEC_ClearPending() Called when a buffer is returned 1234 * from the LCML 1235 * 1236 * @param pComponentPrivate Component private data 1237 * 1238 * @param pBufHdr Buffer header 1239 * 1240 * @param eDir Direction of the buffer 1241 * 1242 * @return None 1243 */ 1244 /*================================================================== */ 1245 void AACDEC_ClearPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) ; 1246 /* =========================================================== */ 1247 /** 1248 * AACDEC_IsPending() 1249 * 1250 * 1251 * @param pComponentPrivate Component private data 1252 * 1253 * @return OMX_ErrorNone = Successful 1254 * Other error code = fail 1255 */ 1256 /*================================================================== */ 1257 OMX_U32 AACDEC_IsPending(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir); 1258 /* =========================================================== */ 1259 /** 1260 * AACDECFill_LCMLInitParamsEx() Fills the parameters needed 1261 * to initialize the LCML without recreating the socket node 1262 * 1263 * @param pComponent OMX Handle 1264 * 1265 * @return None 1266 */ 1267 1268 /*================================================================== */ 1269 OMX_ERRORTYPE AACDECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport); 1270 /* =========================================================== */ 1271 /** 1272 * AACDEC_IsValid() 1273 * 1274 * 1275 * @param pComponentPrivate Component private data 1276 * 1277 * @return OMX_ErrorNone = Successful 1278 * Other error code = fail 1279 */ 1280 /*================================================================== */ 1281 OMX_U32 AACDEC_IsValid(AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ; 1282 1283 #ifdef RESOURCE_MANAGER_ENABLED 1284 void AACDEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData); 1285 #endif 1286 /*=======================================================================*/ 1287 /*! @fn AACDec_GetSampleRateIndexL 1288 1289 * @brief Gets the sample rate index 1290 1291 * @param aRate : Actual Sampling Freq 1292 1293 * @Return Index 1294 1295 */ 1296 /*=======================================================================*/ 1297 int AACDec_GetSampleRateIndexL( const int aRate); 1298 int AACDec_GetSampleRatebyIndex( const int index); 1299 void* AACDEC_ComponentThread (void* pThreadData); 1300 1301 OMX_U32 AACDEC_ParseHeader(OMX_BUFFERHEADERTYPE* pBufHeader, 1302 AACDEC_COMPONENT_PRIVATE *pComponentPrivate); 1303 1304 /* =========================================================================*/ 1305 /* func GetBits */ 1306 /* */ 1307 /* desc Gets aBits number of bits from position aPosition of one buffer */ 1308 /* and returns the value in a TUint value. */ 1309 /* =========================================================================*/ 1310 OMX_U32 AACDEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition); 1311 1312 /* =========================================================================*/ 1313 /* func AACDEC_HandleUSNError 1314 * 1315 * desc Handles error messages returned by the dsp 1316 * 1317 * @Return n/a 1318 * 1319 * =========================================================================*/ 1320 void AACDEC_HandleUSNError (AACDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg); 1321 1322 /*=======================================================================*/ 1323 /*! @fn SignalIfAllBuffersAreReturned 1324 * @brief Sends pthread signal to indicate OMX has returned all buffers to app 1325 * @param none 1326 * @Return void 1327 */ 1328 /*=======================================================================*/ 1329 void SignalIfAllBuffersAreReturned(AACDEC_COMPONENT_PRIVATE *pComponentPrivate); 1330 1331 #endif 1332