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_AmrDecoder.h 30 * 31 * This is an header file for an audio PCM decoder that is fully 32 * compliant with the OMX Audio specification. 33 * This the file that the application that uses OMX would include 34 * in its code. 35 * 36 * @path $(CSLPATH)\ 37 * 38 * @rev 0.1 39 */ 40 /* --------------------------------------------------------------------------- */ 41 42 #ifndef OMX_AMRDECODER_H 43 #define OMX_AMRDECODER_H 44 45 #include "LCML_DspCodec.h" 46 #include <OMX_Component.h> 47 #include <pthread.h> 48 #include <OMX_TI_Debug.h> 49 #include <cutils/log.h> 50 51 #ifdef RESOURCE_MANAGER_ENABLED 52 #include <ResourceManagerProxyAPI.h> 53 #endif 54 55 #ifdef __PERF_INSTRUMENTATION__ 56 #include "perf.h" 57 #endif 58 59 #ifdef DSP_RENDERING_ON 60 #include <AudioManagerAPI.h> 61 #endif 62 63 64 #ifndef ANDROID 65 #define ANDROID 66 #endif 67 68 #ifdef ANDROID 69 #undef LOG_TAG 70 #define LOG_TAG "OMX_NBAMRDEC" 71 72 /* PV opencore capability custom parameter index */ 73 #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347 74 #endif 75 76 77 /* ======================================================================= */ 78 /** 79 * @def EXTRA_BUFFBYTES Num of Extra Bytes to be allocated 80 */ 81 /* ======================================================================= */ 82 #define EXTRA_BUFFBYTES (256) 83 84 /* ======================================================================= */ 85 /** 86 * @def NBAMRD_TIMEOUT Default timeout used to come out of blocking calls 87 */ 88 /* ======================================================================= */ 89 #define NBAMRD_TIMEOUT (1000) /* millisecs */ 90 91 /* ======================================================================= */ 92 /** 93 * @def NUM_NBAMRDEC_INPUT_BUFFERS Number of Input Buffers 94 */ 95 /* ======================================================================= */ 96 #define NUM_NBAMRDEC_INPUT_BUFFERS 1 97 98 /* ======================================================================= */ 99 /** 100 * @def NUM_NBAMRDEC_OUTPUT_BUFFERS Number of Output Buffers 101 */ 102 /* ======================================================================= */ 103 #define NUM_NBAMRDEC_OUTPUT_BUFFERS 2 104 105 /* ======================================================================= */ 106 /** 107 * @def NUM_NBAMRDEC_OUTPUT_BUFFERS_DASF Number of Output Buffers 108 * on DASF mode 109 */ 110 /* ======================================================================= */ 111 #define NUM_NBAMRDEC_OUTPUT_BUFFERS_DASF 2 112 113 /* ======================================================================= */ 114 /** 115 * @def OUTPUT_NBAMRDEC_BUFFER_SIZE Standart Output Buffer Size 116 */ 117 /* ======================================================================= */ 118 #define OUTPUT_NBAMRDEC_BUFFER_SIZE 320 119 /* ======================================================================= */ 120 /** 121 * @def INPUT_NBAMRDEC_BUFFER_SIZE_MIME Mime Input Buffer Size 122 */ 123 /* ======================================================================= */ 124 #define INPUT_NBAMRDEC_BUFFER_SIZE_MIME 34 125 126 /* ======================================================================= */ 127 /** 128 * @def INPUT_BUFF_SIZE_EFR Input Buffer Size EFR 129 */ 130 /* ======================================================================= */ 131 #define INPUT_BUFF_SIZE_EFR 120 132 133 /* @def INPUT_NBAMRDEC_BUFFER_SIZE_MIME IF2 Input Buffer Size*/ 134 /* ======================================================================= */ 135 #define INPUT_NBAMRDEC_BUFFER_SIZE_IF2 32 136 137 138 /* ======================================================================= */ 139 /** 140 * @def STD_NBAMRDEC_BUF_SIZE Standart Input Buffer Size 141 */ 142 /* ======================================================================= */ 143 #define STD_NBAMRDEC_BUF_SIZE 118 144 145 /* ======================================================================= */ 146 /** 147 * @def FRAME_SIZE_x Size in Bytes of determined 148 * frame. 149 */ 150 /* ======================================================================= */ 151 #define FRAME_SIZE_13 13 152 #define FRAME_SIZE_19 19 153 #define FRAME_SIZE_26 26 154 #define FRAME_SIZE_31 31 155 #define FRAME_SIZE_14 14 156 #define FRAME_SIZE_16 16 157 #define FRAME_SIZE_18 18 158 #define FRAME_SIZE_20 20 159 #define FRAME_SIZE_21 21 160 #define FRAME_SIZE_27 27 161 #define FRAME_SIZE_32 32 162 #define FRAME_SIZE_6 6 163 #define FRAME_SIZE_1 1 164 #define FRAME_SIZE_0 0 165 166 /* ======================================================================= */ 167 /** 168 * @def STREAM_COUNT Stream Count value for 169 * LCML init. 170 */ 171 /* ======================================================================= */ 172 #define STREAM_COUNT 2 173 174 /* ======================================================================= */ 175 /** 176 * @def INPUT_STREAM_ID Input Stream ID 177 */ 178 /* ======================================================================= */ 179 #define INPUT_STREAM_ID 0 180 181 182 183 /* ======================================================================= */ 184 /** 185 * @def NBAMRDEC_SAMPLING_FREQUENCY Sampling Frequency 186 */ 187 /* ======================================================================= */ 188 #define NBAMRDEC_SAMPLING_FREQUENCY 8000 189 190 /* ======================================================================= */ 191 /** 192 * @def NBAMRDEC_CPU_LOAD CPU Load in MHz 193 */ 194 /* ======================================================================= */ 195 #define NBAMRDEC_CPU_LOAD 10 196 197 /* ======================================================================= */ 198 /** 199 * @def MAX_NUM_OF_BUFS Max Num of Bufs Allowed 200 */ 201 /* ======================================================================= */ 202 #define MAX_NUM_OF_BUFS 12 203 /* ======================================================================= */ 204 /** 205 * @def IP_BUFFERSIZE Input Port Buffer Size 206 */ 207 /* ======================================================================= */ 208 #define IP_BUFFERSIZE 4096 209 /* ======================================================================= */ 210 /** 211 * @def NUM_MIME_BYTES_ARRAY amrMimeBytes array size 212 */ 213 /* ======================================================================= */ 214 #define NUM_MIME_BYTES_ARRAY 16 215 /* ======================================================================= */ 216 /** 217 * @def NUM_IF2_BYTES_ARRAY amrIF2Bytes array size 218 */ 219 /* ======================================================================= */ 220 #define NUM_IF2_BYTES_ARRAY 16 221 222 /* ======================================================================= */ 223 /** 224 * @def NBAMRDEC_DEBUGMEM Turns memory leaks messaging on and off. 225 * APP_DEBUGMEM must be defined in Test App in order to get 226 * this functionality On. 227 */ 228 /* ======================================================================= */ 229 #undef NBAMRDEC_DEBUGMEM 230 /*#define NBAMRDEC_DEBUGMEM*/ 231 232 233 /*#define AMRDEC_DEBUG*/ 234 #undef AMRDEC_DEBUG 235 #undef AMRDEC_MEMCHECK 236 237 238 #ifndef UNDER_CE 239 240 #define AMRDEC_EPRINT(...) __android_log_print(ANDROID_LOG_VERBOSE, __FILE__,"%s %d:: ERROR ",__FUNCTION__, __LINE__);\ 241 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, __VA_ARGS__);\ 242 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, "\n"); 243 244 #ifdef AMRDEC_DEBUG 245 #define AMRDEC_DPRINT(...) __android_log_print(ANDROID_LOG_VERBOSE, __FILE__,"%s %d:: ",__FUNCTION__, __LINE__);\ 246 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, __VA_ARGS__);\ 247 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, "\n"); 248 #else 249 #define AMRDEC_DPRINT(...) 250 #endif 251 252 #ifdef AMRDEC_MEMCHECK 253 #define AMRDEC_MEMPRINT(...) fprintf(stderr,__VA_ARGS__) 254 #else 255 #define AMRDEC_MEMPRINT(...) 256 #endif 257 258 259 #ifdef AMRDEC_DEBUG_MCP 260 #define AMRDEC_MCP_DPRINT(...) __android_log_print(ANDROID_LOG_VERBOSE, __FILE__,"%s %d:: MCP ",__FUNCTION__, __LINE__);\ 261 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, __VA_ARGS__);\ 262 __android_log_print(ANDROID_LOG_VERBOSE, __FILE__, "\n"); 263 #else 264 #define AMRDEC_MCP_DPRINT(...) 265 #endif 266 #else /*UNDER_CE*/ 267 #define AMRDEC_EPRINT printf 268 #ifdef AMRDEC_DEBUG 269 #define AMRDEC_DPRINT(STR, ARG...) printf() 270 #else 271 #endif 272 273 #ifdef AMRDEC_MEMCHECK 274 #define AMRDEC_MEMPRINT(STR, ARG...) printf() 275 #else 276 #endif 277 #ifdef UNDER_CE 278 279 #ifdef DEBUG 280 #define AMRDEC_DPRINT printf 281 #define AMRDEC_MEMPRINT printf 282 283 #else 284 #define AMRDEC_DPRINT 285 #define AMRDEC_MEMPRINT 286 #endif 287 288 #endif //UNDER_CE 289 290 #endif 291 292 293 /* ======================================================================= */ 294 /** 295 * @def CACHE_ALIGNMENT Buffer Cache Alignment 296 */ 297 /* ======================================================================= */ 298 #define CACHE_ALIGNMENT 128 299 300 /* ======================================================================= */ 301 /** 302 * @def NUM_OF_PORTS Number of Comunication Port 303 */ 304 /* ======================================================================= */ 305 #define NUM_OF_PORTS 2 306 307 /* ======================================================================= */ 308 /** 309 * @def _ERROR_PROPAGATION__ Allow Logic to Detec Arm Errors 310 */ 311 /* ======================================================================= */ 312 #define _ERROR_PROPAGATION__ 313 314 /* ======================================================================= */ 315 /** 316 * pthread variable to indicate OMX returned all buffers to app 317 */ 318 /* ======================================================================= */ 319 pthread_mutex_t bufferReturned_mutex; 320 pthread_cond_t bufferReturned_condition; 321 322 /* ======================================================================= */ 323 /** NBAMRDEC_COMP_PORT_TYPE Port Type 324 * 325 * @param NBAMRDEC_INPUT_PORT Port Type Input 326 * 327 * @param NBAMRDEC_OUTPUT_PORT Port Type Output 328 * 329 */ 330 /* ==================================================================== */ 331 typedef enum NBAMRDEC_COMP_PORT_TYPE { 332 NBAMRDEC_INPUT_PORT = 0, 333 NBAMRDEC_OUTPUT_PORT 334 }NBAMRDEC_COMP_PORT_TYPE; 335 336 /* ======================================================================= */ 337 /** NBAMRDEC_StreamType StreamType 338 * 339 * @param NBAMRDEC_DMM Stream Type DMM 340 * 341 * @param NBAMRDEC_INSTRM Stream Type Input 342 * 343 * @param NBAMRDEC_OUTSTRM Stream Type Output 344 */ 345 /* ==================================================================== */ 346 enum NBAMRDEC_StreamType 347 { 348 NBAMRDEC_DMM, 349 NBAMRDEC_INSTRM, 350 NBAMRDEC_OUTSTRM 351 }; 352 353 /* ======================================================================= */ 354 /** NBAMRDEC_DecodeType Decode Type Mode 355 * 356 * @param NBAMR OMX_AUDIO_AMRDTX 357 * 358 * @param NBAMRDEC_EFR OMX_AUDIO_AMRDTX as EFR 359 */ 360 /* ==================================================================== */ 361 enum NBAMRDEC_DecodeType 362 { 363 NBAMR, 364 NBAMRDEC_EFR 365 }; 366 367 /* ======================================================================= */ 368 /** NBAMRDEC_MimeMode Mime Mode 369 * 370 * @param NBAMRDEC_FORMATCONFORMANCE Mime Mode and IF2 Off 371 * 372 * @param NBAMRDEC_MIMEMODE Mime Mode On 373 */ 374 /* ==================================================================== */ 375 enum NBAMRDEC_MimeMode { 376 NBAMRDEC_FORMATCONFORMANCE, 377 NBAMRDEC_MIMEMODE, 378 NBAMRDEC_IF2, 379 NBAMRDEC_PADMIMEMODE 380 }; 381 382 /* ======================================================================= */ 383 /** NBAMRDEC_BUFFER_Dir Direction of the Buffer 384 * 385 * @param NBAMRDEC_DIRECTION_INPUT Direction Input 386 * 387 * @param NBAMRDEC_DIRECTION_INPUT Direction Output 388 */ 389 /* ==================================================================== */ 390 typedef enum { 391 NBAMRDEC_DIRECTION_INPUT, 392 NBAMRDEC_DIRECTION_OUTPUT 393 }NBAMRDEC_BUFFER_Dir; 394 395 /* =================================================================================== */ 396 /** 397 * Buffer Information. 398 */ 399 /* ================================================================================== */ 400 typedef struct BUFFS 401 { 402 OMX_S8 BufHeader; 403 OMX_S8 Buffer; 404 }BUFFS; 405 406 /* =================================================================================== */ 407 /** 408 * NBAMR Buffer Header Type Info. 409 */ 410 /* ================================================================================== */ 411 typedef struct BUFFERHEADERTYPE_INFO 412 { 413 OMX_BUFFERHEADERTYPE* pBufHeader[MAX_NUM_OF_BUFS]; 414 BUFFS bBufOwner[MAX_NUM_OF_BUFS]; 415 }BUFFERHEADERTYPE_INFO; 416 417 /* ======================================================================= */ 418 /** LCML_MimeMode modes 419 * 420 * @param MODE_MIME Mode MIME 421 * 422 * @param MODE_NONMIME Mode NONMIME 423 */ 424 /* ==================================================================== */ 425 typedef enum { 426 MODE_MIME, 427 MODE_NONMIME 428 }LCML_MimeMode; 429 430 /* =================================================================================== */ 431 /** 432 * Socket node input parameters. 433 */ 434 /* ================================================================================== */ 435 typedef struct AMRDEC_AudioCodecParams 436 { 437 unsigned long iSamplingRate; 438 unsigned long iStrmId; 439 unsigned short iAudioFormat; 440 }AMRDEC_AudioCodecParams; 441 442 /* =================================================================================== */ 443 /** 444 * Socket node alg parameters.. 445 */ 446 /* ================================================================================== */ 447 /*typedef struct { 448 449 unsigned long usEndOfFile; 450 unsigned long usFrameLost; 451 }AMRDEC_UAlgInBufParamStruct;*/ 452 453 typedef struct { 454 unsigned long int usLastFrame; 455 unsigned long int usFrameLost; 456 }NBAMRDEC_FrameStruct; 457 458 typedef struct{ 459 unsigned long int usNbFrames; 460 NBAMRDEC_FrameStruct *pParamElem; 461 }NBAMRDEC_ParamStruct; 462 463 /* =================================================================================== */ 464 /** 465 * LCML_NBAMRDEC_BUFHEADERTYPE 466 */ 467 /* ================================================================================== */ 468 typedef struct LCML_NBAMRDEC_BUFHEADERTYPE { 469 NBAMRDEC_BUFFER_Dir eDir; 470 OMX_BUFFERHEADERTYPE* buffer; 471 NBAMRDEC_FrameStruct *pFrameParam; 472 NBAMRDEC_ParamStruct *pBufferParam; 473 DMM_BUFFER_OBJ* pDmmBuf; 474 }LCML_NBAMRDEC_BUFHEADERTYPE; 475 476 #ifndef UNDER_CE 477 478 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 479 480 #else 481 /* =================================================================================== */ 482 /** 483 * OMX_EXPORT WinCE Implicit Export Syntax 484 */ 485 /* ================================================================================== */ 486 #define OMX_EXPORT __declspec(dllexport) 487 488 OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp); 489 490 #endif 491 492 OMX_ERRORTYPE NBAMRDEC_StartComponentThread(OMX_HANDLETYPE pHandle); 493 OMX_ERRORTYPE NBAMRDEC_StopComponentThread(OMX_HANDLETYPE pHandle); 494 OMX_ERRORTYPE NBAMRDEC_FreeCompResources(OMX_HANDLETYPE pComponent); 495 496 /* =================================================================================== */ 497 /** 498 * Instrumentation info 499 */ 500 /* ================================================================================== */ 501 502 typedef struct _NBAMRDEC_BUFFERLIST NBAMRDEC_BUFFERLIST; 503 504 /* =================================================================================== */ 505 /** 506 * Structure for buffer list 507 */ 508 /* ================================================================================== */ 509 struct _NBAMRDEC_BUFFERLIST{ 510 OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS]; /* records buffer header send by client */ 511 OMX_U32 bufferOwner[MAX_NUM_OF_BUFS]; 512 OMX_U32 bBufferPending[MAX_NUM_OF_BUFS]; 513 OMX_U16 numBuffers; 514 }; 515 516 #ifdef UNDER_CE 517 #ifndef _OMX_EVENT_ 518 #define _OMX_EVENT_ 519 typedef struct OMX_Event { 520 HANDLE event; 521 } OMX_Event; 522 #endif 523 #endif 524 525 typedef struct PV_OMXComponentCapabilityFlagsType 526 { 527 ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability) 528 OMX_BOOL iIsOMXComponentMultiThreaded; 529 OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc; 530 OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc; 531 OMX_BOOL iOMXComponentSupportsMovableInputBuffers; 532 OMX_BOOL iOMXComponentSupportsPartialFrames; 533 OMX_BOOL iOMXComponentNeedsNALStartCode; 534 OMX_BOOL iOMXComponentCanHandleIncompleteFrames; 535 } PV_OMXComponentCapabilityFlagsType; 536 537 /* =================================================================================== */ 538 /* 539 * NBAMRDEC_BUFDATA 540 */ 541 /* =================================================================================== */ 542 typedef struct NBAMRDEC_BUFDATA { 543 OMX_U8 nFrames; 544 }NBAMRDEC_BUFDATA; 545 546 /* =================================================================================== */ 547 /** 548 * Component private data 549 */ 550 /* ================================================================================== */ 551 typedef struct AMRDEC_COMPONENT_PRIVATE 552 { 553 /** Array of pointers to BUFFERHEADERTYPE structues 554 This pBufHeader[NBAMRDEC_INPUT_PORT] will point to all the 555 BUFFERHEADERTYPE structures related to input port, 556 not just one structure. Same is for output port 557 also. */ 558 559 #ifdef __PERF_INSTRUMENTATION__ 560 PERF_OBJHANDLE pPERF, pPERFcomp; 561 OMX_U32 nLcml_nCntIp; 562 OMX_U32 nLcml_nCntOpReceived; 563 #endif 564 565 OMX_BUFFERHEADERTYPE* pBufHeader[NUM_OF_PORTS]; 566 567 BUFFERHEADERTYPE_INFO BufInfo[NUM_OF_PORTS]; 568 569 /** Structure of callback pointers */ 570 OMX_CALLBACKTYPE cbInfo; 571 572 /** Handle for use with async callbacks */ 573 OMX_PORT_PARAM_TYPE sPortParam; 574 575 /** Input port parameters */ 576 OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat; 577 578 /** Output port parameters */ 579 OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat; 580 581 /** This will contain info like how many buffers 582 are there for input/output ports, their size etc, but not 583 BUFFERHEADERTYPE POINTERS. */ 584 OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS]; 585 586 /** NBAMR Component Parameters */ 587 OMX_AUDIO_PARAM_AMRTYPE* amrParams[NUM_OF_PORTS]; /*amrParams[Output] = OMX_AUDIO_PARAM_PCMMODETYPE*/ 588 589 /** This is component handle */ 590 OMX_COMPONENTTYPE* pHandle; 591 592 /** Current state of this component */ 593 OMX_STATETYPE curState; 594 595 /** The component thread handle */ 596 pthread_t ComponentThread; 597 598 /** The pipes for sending buffers to the thread */ 599 int dataPipe[2]; 600 601 /** The pipes for sending buffers to the thread */ 602 int cmdPipe[2]; 603 604 /** The pipes for sending buffers to the thread */ 605 int cmdDataPipe[2]; 606 607 /** Set to indicate component is stopping */ 608 OMX_U32 bIsStopping; 609 610 /** Count of number of buffers outstanding with bridge */ 611 OMX_U32 lcml_nIpBuf; 612 613 /** Count of number of buffers outstanding with bridge */ 614 OMX_U32 lcml_nOpBuf; 615 616 /** Number of Buffers In the Application*/ 617 OMX_U32 app_nBuf; 618 619 /** LCML Number Input Buffer Received*/ 620 OMX_U32 lcml_nCntIp; 621 622 /** LCML Number Output Buffer Received*/ 623 OMX_U32 lcml_nCntOpReceived; 624 625 /** Num Reclaimed OutPut Buff */ 626 OMX_U32 num_Reclaimed_Op_Buff; 627 628 /** LCML Handle */ 629 OMX_HANDLETYPE pLcmlHandle; 630 631 /** LCML Buffer Header */ 632 LCML_NBAMRDEC_BUFHEADERTYPE *pLcmlBufHeader[2]; 633 634 /** Flag for mime mode */ 635 OMX_S16 iAmrMimeFlag; 636 637 /** Sampling Frequeny */ 638 OMX_S16 iAmrSamplingFrequeny; 639 640 /** Number of channels */ 641 OMX_U32 iAmrChannels; 642 643 /** Flag for Amr mode */ 644 OMX_S16 iAmrMode; 645 646 /** Flag for DASF mode */ 647 OMX_S16 dasfmode; 648 649 /** Flag for mime mode */ 650 OMX_S16 mimemode; 651 652 /** Flag for ACDN mode */ 653 OMX_S16 acdnmode; 654 655 /** Writing pipe Used for DSP_RENDERING_ON */ 656 int fdwrite; 657 658 /** Reading pipe Used for DSP_RENDERING_ON */ 659 int fdread; 660 661 /* ID stream ID*/ 662 OMX_U32 streamID; 663 664 /* Flag for Port Defs Allocated*/ 665 OMX_U32 bPortDefsAllocated; 666 667 /* Flag for Component Thread Started*/ 668 OMX_U32 bCompThreadStarted; 669 670 /** Mark data */ 671 OMX_PTR pMarkData; 672 673 /** Mark buffer */ 674 OMX_MARKTYPE *pMarkBuf; 675 676 /** Mark target component */ 677 OMX_HANDLETYPE hMarkTargetComponent; 678 679 /** Flag set when buffer should not be queued to the DSP */ 680 OMX_U32 bBypassDSP; 681 682 /** Input buffer list */ 683 NBAMRDEC_BUFFERLIST *pInputBufferList; 684 685 /** Output buffer list */ 686 NBAMRDEC_BUFFERLIST *pOutputBufferList; 687 688 /** LCML stream attributes */ 689 LCML_STRMATTR *strmAttr; 690 691 /** Component version */ 692 OMX_U32 nVersion; 693 694 /** Play Complete Flag */ 695 OMX_U32 bPlayCompleteFlag; 696 697 /** NBAMR Mime Bytes */ 698 OMX_U32 amrMimeBytes[NUM_MIME_BYTES_ARRAY]; 699 700 /**NBAMR IF2 Bytes**/ 701 OMX_U32 amrIF2Bytes[NUM_IF2_BYTES_ARRAY]; 702 703 /** Number of Bytes holding to be sent*/ 704 OMX_U32 nHoldLength; 705 706 /** Pointer to the data holding to be sent*/ 707 OMX_U8* pHoldBuffer; 708 709 /** Flag set when LCML handle is opened */ 710 OMX_S16 bLcmlHandleOpened; 711 712 /** Keeps track of the number of nFillThisBufferCount() calls */ 713 OMX_U32 nFillThisBufferCount; 714 715 /** Keeps track of the number of nFillBufferDoneCount() calls */ 716 OMX_U32 nFillBufferDoneCount; 717 718 /** Keeps track of the number of nEmptyThisBufferCount() calls */ 719 OMX_U32 nEmptyThisBufferCount; 720 721 /** Keeps track of the number of nEmptyBufferDoneCount() calls */ 722 OMX_U32 nEmptyBufferDoneCount; 723 724 /** Parameters for the Audio Codec */ 725 AMRDEC_AudioCodecParams *pParams; 726 727 /** Flag for Init Params Initialized */ 728 OMX_U32 bInitParamsInitialized; 729 730 /** Flag for bIdleCommandPending */ 731 /* OMX_U32 bIdleCommandPending; */ 732 733 /** Array of Input Buffers that are pending to sent due State = Idle */ 734 OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS]; 735 736 /** Number of Input Buffers that are pending to sent due State = Idle */ 737 OMX_U32 nNumInputBufPending; 738 739 /** Array of Output Buffers that are pending to sent due State = Idle */ 740 OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS]; 741 742 /** Number of Output Buffers that are pending to sent due State = Idle */ 743 OMX_U32 nNumOutputBufPending; 744 745 /** Flag for bDisableCommandPending*/ 746 OMX_U32 bDisableCommandPending; 747 748 OMX_U32 bEnableCommandPending; 749 750 /** Flag for bDisableCommandParam*/ 751 OMX_U32 bDisableCommandParam; 752 753 OMX_U32 bEnableCommandParam; 754 755 /** Flag to set when socket node stop callback should not transition 756 component to OMX_StateIdle */ 757 OMX_U32 bNoIdleOnStop; 758 759 /** Number of outstanding FillBufferDone() calls */ 760 OMX_U32 nOutStandingFillDones; 761 762 /** Stop Codec Command Sent Flag*/ 763 OMX_U8 bStopSent; 764 765 OMX_U32 nRuntimeInputBuffers; 766 767 OMX_U32 nRuntimeOutputBuffers; 768 769 /* Removing sleep() calls. Definition. */ 770 #ifndef UNDER_CE 771 pthread_mutex_t AlloBuf_mutex; 772 pthread_cond_t AlloBuf_threshold; 773 OMX_U8 AlloBuf_waitingsignal; 774 775 pthread_mutex_t codecStop_mutex; 776 pthread_cond_t codecStop_threshold; 777 OMX_U8 codecStop_waitingsignal; 778 779 pthread_mutex_t InLoaded_mutex; 780 pthread_cond_t InLoaded_threshold; 781 OMX_U8 InLoaded_readytoidle; 782 783 pthread_mutex_t InIdle_mutex; 784 pthread_cond_t InIdle_threshold; 785 OMX_U8 InIdle_goingtoloaded; 786 787 OMX_S8 nUnhandledFillThisBuffers; 788 OMX_S8 nUnhandledEmptyThisBuffers; 789 OMX_BOOL bFlushOutputPortCommandPending; 790 OMX_BOOL bFlushInputPortCommandPending; 791 #else 792 OMX_Event AlloBuf_event; 793 OMX_U8 AlloBuf_waitingsignal; 794 795 OMX_Event InLoaded_event; 796 OMX_U8 InLoaded_readytoidle; 797 798 OMX_Event InIdle_event; 799 OMX_U8 InIdle_goingtoloaded; 800 #endif 801 /* Removing sleep() calls. Definition. */ 802 803 OMX_U8 PendingPausedBufs; 804 OMX_BUFFERHEADERTYPE *pOutputBufHdrPausedPending[MAX_NUM_OF_BUFS]; 805 806 OMX_BUFFERHEADERTYPE *LastOutbuf; 807 808 OMX_BOOL bIsInvalidState; 809 OMX_STRING* sDeviceString; 810 811 void* ptrLibLCML; 812 813 /** Circular array to keep buffer timestamps */ 814 OMX_S64 arrBufIndex[MAX_NUM_OF_BUFS]; 815 /** Circular array to keep buffer nTickCounts */ 816 OMX_S64 arrTickCount[MAX_NUM_OF_BUFS]; 817 /** Index to arrBufIndex[], used for input buffer timestamps */ 818 OMX_U8 IpBufindex; 819 /** Index to arrBufIndex[], used for output buffer timestamps */ 820 OMX_U8 OpBufindex; 821 822 /** Flag to flush SN after EOS in order to process more buffers after EOS**/ 823 OMX_U8 SendAfterEOS; 824 825 /** Flag to mark the first sent buffer**/ 826 OMX_U8 first_buff; 827 /** First Time Stamp sent **/ 828 OMX_TICKS first_TS; 829 830 /** Temporal time stamp **/ 831 OMX_TICKS temp_TS; 832 833 OMX_BOOL bLoadedCommandPending; 834 835 OMX_PARAM_COMPONENTROLETYPE componentRole; 836 837 /** Pointer to port priority management structure */ 838 OMX_PRIORITYMGMTTYPE* pPriorityMgmt; 839 840 #ifdef RESOURCE_MANAGER_ENABLED 841 RMPROXY_CALLBACKTYPE rmproxyCallback; 842 #endif 843 844 OMX_BOOL bPreempted; 845 OMX_BOOL bFrameLost; 846 847 /** Flag to mark RTSP**/ 848 OMX_U8 using_rtsp; 849 850 PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags; 851 852 struct OMX_TI_Debug dbg; 853 854 /** Indicate when first output buffer received from DSP **/ 855 OMX_U32 first_output_buf_rcv; 856 857 } AMRDEC_COMPONENT_PRIVATE; 858 859 typedef enum OMX_NBAMRDEC_INDEXAUDIOTYPE { 860 OMX_IndexCustomNbAmrDecModeEfrConfig = 0xFF000001, 861 OMX_IndexCustomNbAmrDecModeAmrConfig, 862 OMX_IndexCustomNbAmrDecModeAcdnConfig, 863 OMX_IndexCustomNbAmrDecModeDasfConfig, 864 OMX_IndexCustomNbAmrDecModeMimeConfig, 865 OMX_IndexCustomNbAmrDecHeaderInfoConfig, 866 OMX_IndexCustomNbAmrDecStreamIDConfig, 867 OMX_IndexCustomNbAmrDecDataPath, 868 OMX_IndexCustomNbAmrDecNextFrameLost, 869 OMX_IndexCustomDebug 870 }OMX_NBAMRDEC_INDEXAUDIOTYPE; 871 872 /*=======================================================================*/ 873 /*! @fn SignalIfAllBuffersAreReturned 874 875 * @brief Sends pthread signal to indicate OMX has returned all buffers to app 876 877 * @param none 878 879 * @Return void 880 881 */ 882 /*=======================================================================*/ 883 void SignalIfAllBuffersAreReturned(AMRDEC_COMPONENT_PRIVATE *pComponentPrivate); 884 885 #endif /* OMX_AMRDECODER_H */ 886