Home | History | Annotate | Download | only in inc
      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