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 #ifndef OMX_AACENC_UTILS__H
     22 #define OMX_AACENC_UTILS__H
     23 
     24 #include <OMX_Component.h>
     25 #include <OMX_TI_Common.h>
     26 #include <OMX_TI_Debug.h>
     27 #include "LCML_DspCodec.h"
     28 #include "OMX_AacEncoder.h"
     29 
     30 #ifdef RESOURCE_MANAGER_ENABLED
     31 #include <ResourceManagerProxyAPI.h>
     32 #endif
     33 
     34 #define AACENC_MAJOR_VER 0x0001
     35 #define AACENC_MINOR_VER 0x0001
     36 #define NOT_USED 10
     37 #define NORMAL_BUFFER 0
     38 #define OMX_AACENC_DEFAULT_SEGMENT (0)
     39 #define OMX_AACENC_SN_TIMEOUT (1000)
     40 #define OMX_AACENC_SN_PRIORITY (10)
     41 #define OMX_AACENC_NUM_DLLS (2)
     42 #define AACENC_CPU_USAGE 45
     43 #define _ERROR_PROPAGATION__
     44 #define MPEG4AACENC_MAX_OUTPUT_FRAMES 24
     45 
     46 #ifndef ANDROID
     47     #define ANDROID
     48 #endif
     49 
     50 #ifdef ANDROID
     51     #undef LOG_TAG
     52     #define LOG_TAG "OMX_AACENC"
     53 
     54 /* PV opencore capability custom parameter index */
     55     #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
     56 #endif
     57 
     58 #ifdef __PERF_INSTRUMENTATION__
     59     #include "perf.h"
     60 #endif
     61 #include <OMX_Component.h>
     62 
     63 #define OMX_CONF_INIT_STRUCT(_s_, _name_)   \
     64     memset((_s_), 0x0, sizeof(_name_)); \
     65     (_s_)->nSize = sizeof(_name_);      \
     66     (_s_)->nVersion.s.nVersionMajor = AACENC_MAJOR_VER;  \
     67     (_s_)->nVersion.s.nVersionMinor = AACENC_MINOR_VER;  \
     68     (_s_)->nVersion.s.nRevision = 0x0001;      \
     69     (_s_)->nVersion.s.nStep = 0x0
     70 
     71 #define OMX_CONF_CHECK_CMD(_ptr1, _ptr2, _ptr3) \
     72 {                       \
     73     if(!_ptr1 || !_ptr2 || !_ptr3){     \
     74         OMXDBG_PRINT(stderr, ERROR, 4, 0, "%d :: Error bad parameter \n",__LINE__);\
     75         eError = OMX_ErrorBadParameter;     \
     76     goto EXIT;          \
     77     }                       \
     78 }
     79 
     80 #define OMX_CONF_SET_ERROR_BAIL(_eError, _eCode)\
     81 {                       \
     82     _eError = _eCode;               \
     83     goto OMX_CONF_CMD_BAIL;         \
     84 }
     85 
     86 #define OMX_CLOSE_PIPE(_pStruct_,err)\
     87     OMXDBG_PRINT(stderr, PRINT, 2, OMX_DBG_BASEMASK, "%d :: CLOSING PIPE \n",__LINE__);\
     88     err = close (_pStruct_);\
     89     if(0 != err && OMX_ErrorNone == eError){\
     90         eError = OMX_ErrorHardware;\
     91         OMXDBG_PRINT(stderr, ERROR, 4, 0, "%d :: Error while closing pipe\n",__LINE__);\
     92         goto EXIT;\
     93     }
     94 
     95 #define OMX_DPRINT_ADDRESS(_s_, _ptr_)  \
     96     OMXDBG_PRINT(stderr, PRINT, 2, 0, "%s = %p\n", _s_, _ptr_);
     97 
     98 
     99 #undef SWAT_ANALYSIS
    100 
    101 /* debug message */
    102 #undef AACENC_DEBUG
    103 #define AACENC_ERROR
    104 
    105 
    106 #ifndef UNDER_CE
    107 #ifdef  AACENC_ERROR
    108      #define AACENC_EPRINT(...) fprintf(stderr,__VA_ARGS__)
    109 #else
    110      #define AACENC_EPRINT(...)
    111 #endif /* AAC_ERROR*/
    112 
    113 
    114 #ifdef  AACENC_DEBUG
    115      #define AACENC_DPRINT(...) fprintf(stderr,__VA_ARGS__)
    116 #else
    117      #define AACENC_DPRINT(...)
    118 #endif
    119 
    120 #else /*UNDER_CE*/
    121 
    122 #ifdef  AACENC_DEBUG
    123  #define AACENC_DPRINT(STR, ARG...) printf()
    124 #else
    125 #endif
    126 
    127 #endif /*UNDER_CE*/
    128 
    129 /* ======================================================================= */
    130 /**
    131  * @def    AACENC_USN_DLL_NAME   USN DLL name
    132  */
    133 /* ======================================================================= */
    134 #ifdef UNDER_CE
    135 #define AACENC_USN_DLL_NAME "\\windows\\usn.dll64P"
    136 #else
    137 #define AACENC_USN_DLL_NAME "usn.dll64P"
    138 #endif
    139 
    140 /* ======================================================================= */
    141 /**
    142  * @def    AACENC_DLL_NAME   AAC Enc Encoder socket node DLL name
    143  */
    144 /* ======================================================================= */
    145 #ifdef UNDER_CE
    146 #define AACENC_DLL_NAME "\\windows\\mpeg4aacenc_sn.dll64P"
    147 #else
    148 #define AACENC_DLL_NAME "mpeg4aacenc_sn.dll64P"
    149 #endif
    150 
    151 typedef struct
    152 {
    153     OMX_BOOL bLastBuffer;
    154 }AACENC_UAlgInBufParamStruct;
    155 
    156 typedef struct
    157 {
    158     unsigned long unNumFramesEncoded;
    159     unsigned long unFrameSizes[MPEG4AACENC_MAX_OUTPUT_FRAMES];
    160 }AACENC_UAlgOutBufParamStruct;
    161 
    162 
    163 typedef struct PV_OMXComponentCapabilityFlagsType
    164 {
    165         ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability)
    166         OMX_BOOL iIsOMXComponentMultiThreaded;
    167         OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
    168         OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
    169         OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
    170         OMX_BOOL iOMXComponentSupportsPartialFrames;
    171         OMX_BOOL iOMXComponentNeedsNALStartCode;
    172         OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
    173 } PV_OMXComponentCapabilityFlagsType;
    174 
    175 /*This enum must not be changed.*/
    176 typedef enum COMP_PORT_TYPE
    177 {
    178     INPUT_PORT = 0,
    179     OUTPUT_PORT
    180 }COMP_PORT_TYPE;
    181 
    182 typedef enum
    183 {
    184     DIRECTION_INPUT,
    185     DIRECTION_OUTPUT
    186 }BUFFER_Dir;
    187 
    188 typedef struct BUFFS
    189 {
    190     char BufHeader;
    191     char Buffer;
    192 }BUFFS;
    193 
    194 typedef struct BUFFERHEADERTYPE_INFO
    195 {
    196     OMX_BUFFERHEADERTYPE* pBufHeader[MAX_NUM_OF_BUFS];
    197     BUFFS bBufOwner[MAX_NUM_OF_BUFS];
    198 }BUFFERHEADERTYPE_INFO;
    199 
    200 typedef OMX_ERRORTYPE (*fpo)(OMX_HANDLETYPE);
    201 
    202 typedef struct AACENC_AudioCodecParams
    203 {
    204     unsigned long  iSamplingRate;
    205     unsigned long  iStrmId;
    206     unsigned short iAudioFormat;
    207 }AACENC_AudioCodecParams;
    208 
    209 /* enum AACENC_BOOL_TYPE                        */
    210 /* brief Enumerated type for Boolean decision   */
    211 
    212 typedef enum
    213 {
    214     AACENC_FALSE = 0,     /*!< To indicate False  */
    215     AACENC_TRUE  = 1      /*!< To indicate True   */
    216 } AACENC_BOOL_TYPE;
    217 
    218 /*! \enum AACENC_OBJ_TYP  */
    219 /*! \brief enumerated type for output format */
    220 typedef enum
    221 {
    222   AACENC_OBJ_TYP_LC           = 2,   /*!< AAC Low Complexity  */
    223   AACENC_OBJ_TYP_HEAAC        = 5,   /*!< HE AAC              */
    224   AACENC_OBJ_TYP_PS           = 29   /*!< AAC LC + SBR + PS   */
    225 } AACENC_OBJ_TYP;
    226 
    227 /*! \enum  AACENC_TRANSPORT_TYPE */
    228 /*! \brief Enumerated type for output file format */
    229 typedef enum
    230 {
    231   AACENC_TT_RAW    = 0,              /*!< Raw Output Format   */
    232   AACENC_TT_ADIF   = 1,              /*!< ADIF File Format    */
    233   AACENC_TT_ADTS   = 2               /*!< ADTS File Format    */
    234 } AACENC_TRANSPORT_TYPE;
    235 
    236 /* ======================================================================= */
    237 /** MPEG4AACENC_UALGParams
    238  *
    239  * @param lOutputFormat - To set interleaved/Block format:Refer to IAUDIO_PcmFormat.
    240  * @param DownSampleSbr -
    241  */
    242 /* ==================================================================== */
    243 typedef struct
    244 {
    245     long size;           /* size of this structure */
    246     long bitRate;        /* Average bit rate in bits per second */
    247     long sampleRate;     /* Samplling frequency in Hz */
    248     long numChannels;    /* Number of Channels: IAUDIO_ChannelId */
    249 
    250 }MPEG4AUDENC_UALGdynamicparams;
    251 
    252 
    253 typedef struct MPEG4AACENC_UALGParams
    254 {
    255     int size;
    256     MPEG4AUDENC_UALGdynamicparams audenc_dynamicparams;
    257                                             /*!< generic encoder dynamic parameters  */
    258 
    259     /* For RESET Command */
    260     AACENC_BOOL_TYPE        useTns;         /*!< Flag for activating TNS feature     */
    261     AACENC_BOOL_TYPE        usePns;         /*!< Flag for activating PNS feature     */
    262 
    263     AACENC_OBJ_TYP          outObjectType;  /*!< Output Object Type LC/HE/HEv2     */
    264     AACENC_TRANSPORT_TYPE   outFileFormat;  /*!< Output File Format            */
    265 
    266 } MPEG4AACENC_UALGParams;
    267 
    268 typedef enum {
    269     IUALG_CMD_STOP          = 0,
    270     IUALG_CMD_PAUSE         = 1,
    271     IUALG_CMD_GETSTATUS     = 2,
    272     IUALG_CMD_SETSTATUS     = 3,
    273     IUALG_CMD_USERCMDSTART  = 100
    274 }IUALG_Cmd;
    275 
    276 typedef enum {
    277     IAUDIO_BLOCK=0,
    278     IAUDIO_INTERLEAVED
    279 } IAUDIO_AacFormat;
    280 
    281 typedef struct LCML_AACENC_BUFHEADERTYPE
    282 {
    283       BUFFER_Dir eDir;
    284       OMX_BUFFERHEADERTYPE* buffer;
    285       AACENC_UAlgInBufParamStruct *pIpParam;
    286       AACENC_UAlgOutBufParamStruct *pOpParam;
    287 }LCML_AACENC_BUFHEADERTYPE;
    288 
    289 
    290 
    291 typedef struct _BUFFERLIST BUFFERLIST;
    292 
    293 struct _BUFFERLIST
    294 {
    295     OMX_BUFFERHEADERTYPE sBufHdr;                   /* actual buffer header */
    296     OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS]; /* records buffer header send by client */
    297     OMX_U32 bufferOwner[MAX_NUM_OF_BUFS];
    298     OMX_U16 numBuffers;
    299     OMX_U32 bBufferPending[MAX_NUM_OF_BUFS];
    300     BUFFERLIST *pNextBuf;
    301     BUFFERLIST *pPrevBuf;
    302 };
    303 
    304 #ifdef UNDER_CE
    305     #ifndef _OMX_EVENT_
    306         #define _OMX_EVENT_
    307         typedef struct OMX_Event {
    308             HANDLE event;
    309         } OMX_Event;
    310     #endif
    311     int OMX_CreateEvent(OMX_Event *event);
    312     int OMX_SignalEvent(OMX_Event *event);
    313     int OMX_WaitForEvent(OMX_Event *event);
    314     int OMX_DestroyEvent(OMX_Event *event);
    315 #endif
    316 
    317 /* ======================================================================= */
    318 /**
    319  * pthread variable to indicate OMX returned all buffers to app
    320  */
    321 /* ======================================================================= */
    322 pthread_mutex_t bufferReturned_mutex;
    323 pthread_cond_t bufferReturned_condition;
    324 
    325 
    326 typedef struct AACENC_COMPONENT_PRIVATE
    327 {
    328     /** Array of pointers to BUFFERHEADERTYPE structues
    329        This pBufHeader[INPUT_PORT] will point to all the
    330        BUFFERHEADERTYPE structures related to input port,
    331        not just one structure. Same is for output port
    332        also. */
    333     OMX_BUFFERHEADERTYPE* pBufHeader[NUM_OF_PORTS];
    334 
    335     BUFFERHEADERTYPE_INFO BufInfo[NUM_OF_PORTS];
    336 
    337     OMX_CALLBACKTYPE cbInfo;
    338     /** Handle for use with async callbacks */
    339     OMX_PORT_PARAM_TYPE sPortParam;
    340 
    341     OMX_PRIORITYMGMTTYPE* sPriorityMgmt;
    342 
    343 #ifdef RESOURCE_MANAGER_ENABLED
    344     RMPROXY_CALLBACKTYPE rmproxyCallback;
    345 #endif
    346 
    347     OMX_BOOL bPreempted;
    348 
    349     OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
    350 
    351     OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
    352 
    353     OMX_U32 bIsBufferOwned[NUM_OF_PORTS];
    354     /** This will contain info like how many buffers
    355         are there for input/output ports, their size etc, but not
    356         BUFFERHEADERTYPE POINTERS. */
    357     OMX_U32 abc;
    358 
    359     OMX_U32 def;
    360 
    361     OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS];
    362 
    363     OMX_AUDIO_PARAM_AACPROFILETYPE* aacParams[NUM_OF_PORTS];
    364 
    365     OMX_AUDIO_PARAM_PCMMODETYPE* pcmParam[NUM_OF_PORTS];
    366 
    367     /** This is component handle */
    368     OMX_COMPONENTTYPE* pHandle;
    369 
    370     /** Current state of this component */
    371     OMX_STATETYPE curState;
    372 
    373     /** The component thread handle */
    374     pthread_t ComponentThread;
    375 
    376     /** The pipes for sending buffers to the thread */
    377     int dataPipe[2];
    378 
    379     /** The pipes for sending buffers to the thread */
    380     int cmdPipe[2];
    381     /** The pipes for sending buffers to the thread */
    382     int cmdDataPipe[2];
    383 
    384     /** Set to indicate component is stopping */
    385     OMX_U32 bIsStopping;
    386 
    387     /** Number of input buffers at runtime */
    388     OMX_U32 nRuntimeInputBuffers;
    389 
    390     /** Number of output buffers at runtime */
    391     OMX_U32 nRuntimeOutputBuffers;
    392 
    393     OMX_U32 bIsThreadstop;
    394 
    395     OMX_U32 bIsEOFSent;
    396 
    397     /** Count of number of buffers outstanding with bridge */
    398     OMX_U32 lcml_nIpBuf;
    399 
    400     OMX_BOOL CustomConfiguration;
    401 
    402 #ifdef __PERF_INSTRUMENTATION__
    403         PERF_OBJHANDLE pPERF, pPERFcomp;
    404         OMX_U32 nLcml_nCntIp;
    405         OMX_U32 nLcml_nCntOpReceived;
    406 #endif
    407 
    408     /** Count of number of buffers outstanding with bridge */
    409     OMX_U32 lcml_nOpBuf;
    410 
    411     OMX_U32 app_nBuf;
    412 
    413     OMX_U32 lcml_nCntIp;
    414 
    415     OMX_U32 lcml_nCntOpReceived;
    416 
    417     OMX_U32 lcml_nCntApp;
    418 
    419     OMX_U32 lcml_compID;
    420 
    421     OMX_U32 num_Reclaimed_Op_Buff;
    422 
    423     OMX_U32 num_Sent_Ip_Buff;
    424 
    425     OMX_U32 num_Op_Issued;
    426 
    427     OMX_HANDLETYPE pLcmlHandle;
    428 
    429     LCML_AACENC_BUFHEADERTYPE *pLcmlBufHeader[2];
    430 
    431     MPEG4AACENC_UALGParams* ptAlgDynParams;
    432 
    433     AACENC_AudioCodecParams* pParams;
    434 
    435     OMX_U16 ulSamplingRate;
    436 
    437     OMX_U16 unNumChannels;
    438 
    439     OMX_U32 unBitrate;
    440 
    441     OMX_U16 nObjectType;
    442 
    443     OMX_U32 bitRateMode;
    444 
    445     OMX_U16 File_Format;
    446 
    447     OMX_U32 dasfmode;
    448 
    449     OMX_U32 EmptybufferdoneCount;
    450 
    451     OMX_U32 EmptythisbufferCount;
    452 
    453     OMX_U32 FillbufferdoneCount;
    454 
    455     OMX_U32 FillthisbufferCount;
    456 
    457     OMX_U32 bPortDefsAllocated;
    458 
    459     OMX_U32 bCompThreadStarted;
    460 
    461     OMX_PTR pMarkData;
    462 
    463     OMX_MARKTYPE *pMarkBuf;
    464 
    465     OMX_HANDLETYPE hMarkTargetComponent;
    466 
    467     OMX_U32 bBypassDSP;
    468 
    469     BUFFERLIST *pInputBufferList;
    470 
    471     BUFFERLIST *pOutputBufferList;
    472 
    473     LCML_STRMATTR *strmAttr;
    474 
    475     OMX_U32 nVersion;
    476 
    477     OMX_STRING cComponentName;
    478 
    479     OMX_VERSIONTYPE ComponentVersion;
    480 
    481     OMX_U32 streamID;
    482 
    483     OMX_U32 bInputBufferHeaderAllocated;
    484     /** Stores input buffers while paused */
    485     OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS];
    486 
    487     /** Number of input buffers received while paused */
    488     OMX_U32 nNumInputBufPending;
    489 
    490     /** Stores output buffers while paused */
    491     OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS];
    492 
    493     /** Number of output buffers received while paused */
    494     OMX_U32 nNumOutputBufPending;
    495 
    496 
    497     OMX_U8 PendingInPausedBufs;
    498     OMX_BUFFERHEADERTYPE *pInBufHdrPausedPending[MAX_NUM_OF_BUFS];
    499     OMX_U8 PendingOutPausedBufs;
    500     OMX_BUFFERHEADERTYPE *pOutBufHdrPausedPending[MAX_NUM_OF_BUFS];
    501 
    502 
    503 
    504     OMX_U32 bPlayCompleteFlag;
    505 
    506     /** Flag set when a disable command is pending */
    507     OMX_U32 bDisableCommandPending;
    508 
    509     /** Parameter for pending disable command */
    510     OMX_U32 bDisableCommandParam;
    511 
    512     /** Flag set when a disable command is pending */
    513     OMX_U32 bEnableCommandPending;
    514 
    515     /** Parameter for pending disable command */
    516     OMX_U32 nEnableCommandParam;
    517 
    518     /** Flag to set when socket node stop callback should not transition
    519         component to OMX_StateIdle */
    520     OMX_U32 bNoIdleOnStop;
    521 
    522     /** Flag set when idle command is pending */
    523     /* OMX_U32 bIdleCommandPending; */
    524 
    525     /** Flag set when pause command is pending */
    526     OMX_U32 bPauseCommandPending;
    527 
    528     /** Flag set when socket node is stopped */
    529     OMX_U32 bDspStoppedWhileExecuting;
    530 
    531     /** Number of outstanding FillBufferDone() calls */
    532     OMX_S32 nOutStandingFillDones;
    533 
    534     /** Number of outstanding EmptyBufferDone() calls */
    535     OMX_S32 nOutStandingEmptyDones;
    536 
    537     OMX_BUFFERHEADERTYPE *LastOutputBufferHdrQueued;
    538 
    539 #ifndef UNDER_CE
    540     pthread_mutex_t AlloBuf_mutex;
    541     pthread_cond_t AlloBuf_threshold;
    542     OMX_U8 AlloBuf_waitingsignal;
    543 
    544     pthread_mutex_t codecStop_mutex;
    545     pthread_cond_t codecStop_threshold;
    546     OMX_U8 codecStop_waitingsignal;
    547 
    548     pthread_mutex_t codecFlush_mutex;
    549     pthread_cond_t codecFlush_threshold;
    550     OMX_U8 codecFlush_waitingsignal;
    551 
    552     pthread_mutex_t InLoaded_mutex;
    553     pthread_cond_t InLoaded_threshold;
    554     OMX_U8 InLoaded_readytoidle;
    555 
    556     pthread_mutex_t InIdle_mutex;
    557     pthread_cond_t InIdle_threshold;
    558     OMX_U8 InIdle_goingtoloaded;
    559 
    560     OMX_U8 nUnhandledFillThisBuffers;
    561     OMX_U8 nUnhandledEmptyThisBuffers;
    562     OMX_BOOL bFlushOutputPortCommandPending;
    563     OMX_BOOL bFlushInputPortCommandPending;
    564 
    565 #else
    566     OMX_Event AlloBuf_event;
    567     OMX_U8 AlloBuf_waitingsignal;
    568 
    569     OMX_Event InLoaded_event;
    570     OMX_U8 InLoaded_readytoidle;
    571 
    572     OMX_Event InIdle_event;
    573     OMX_U8 InIdle_goingtoloaded;
    574 
    575 
    576 #endif
    577     OMX_BOOL bLoadedCommandPending;
    578     OMX_BOOL bIsInvalidState;
    579     void* PtrCollector[6];
    580 
    581     OMX_BUFFERHEADERTYPE *LastOutbuf;
    582     OMX_PARAM_COMPONENTROLETYPE componentRole;
    583     OMX_U16 FramesPer_OutputBuffer;
    584 
    585     /* backup pointer for LCML */
    586     void* ptrLibLCML;
    587 
    588     OMX_BOOL bCodecDestroyed;
    589     OMX_BOOL bGotLCML;
    590 
    591     OMX_STRING* sDeviceString;
    592     OMX_BOOL bFirstOutputBuffer;
    593 
    594     /** Keep buffer timestamps **/
    595     OMX_S64 timestampBufIndex[MAX_NUM_OF_BUFS];
    596     /** Index to arrBufIndex[], used for input buffer timestamps */
    597     OMX_U8 IpBufindex;
    598     /** Index to arrBufIndex[], used for output buffer timestamps */
    599     OMX_U8 OpBufindex;
    600 
    601     /** Keep buffer tickcount **/
    602     OMX_U32 tickcountBufIndex[MAX_NUM_OF_BUFS];
    603 
    604     PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
    605 
    606     struct OMX_TI_Debug dbg;
    607 
    608     /* Reference count for pending state change requests */
    609     OMX_U32 nPendingStateChangeRequests;
    610     pthread_mutex_t mutexStateChangeRequest;
    611     pthread_cond_t StateChangeCondition;
    612 
    613 } AACENC_COMPONENT_PRIVATE;
    614 
    615 OMX_ERRORTYPE AACENCGetCorresponding_LCMLHeader(AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer,
    616                                                   OMX_DIRTYPE eDir,
    617                                                   LCML_AACENC_BUFHEADERTYPE **ppLcmlHdr);
    618 
    619 OMX_ERRORTYPE AACENCLCML_Callback(TUsnCodecEvent event,void * args [10]);
    620 
    621 OMX_ERRORTYPE AACENCFill_LCMLInitParams(OMX_HANDLETYPE pHandle,
    622                                           LCML_DSP *plcml_Init,OMX_U16 arr[]);
    623 
    624 OMX_ERRORTYPE AACENCGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir);
    625 
    626 OMX_U32 AACENCHandleCommand(AACENC_COMPONENT_PRIVATE *pComponentPrivate);
    627 
    628 OMX_ERRORTYPE AACENCHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
    629                                             AACENC_COMPONENT_PRIVATE *pComponentPrivate);
    630 
    631 int AACEnc_GetSampleRateIndexL( const int aRate);
    632 
    633 OMX_HANDLETYPE AACENCGetLCMLHandle(AACENC_COMPONENT_PRIVATE *pComponentPrivate);
    634 
    635 OMX_ERRORTYPE AACENC_CleanupInitParams(OMX_HANDLETYPE pHandle);
    636 
    637 void AACENC_SetPending(AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber);
    638 
    639 void AACENC_ClearPending(AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber) ;
    640 
    641 OMX_U32 AACENC_IsPending(AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
    642 
    643 /* ===========================================================  */
    644 /**
    645 *  AACENC_TransitionToIdle() Transitions component to idle
    646 *
    647 *
    648 *  @param pComponentPrivate     Component private data
    649 *
    650 *  @return OMX_ErrorNone = No error
    651 *          OMX Error code = Error
    652 */
    653 /*================================================================== */
    654 
    655 OMX_ERRORTYPE AACENC_TransitionToPause(AACENC_COMPONENT_PRIVATE *pComponentPrivate);
    656 
    657 OMX_ERRORTYPE AACENCFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent);
    658 
    659 OMX_ERRORTYPE AACENCWriteConfigHeader(AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr);
    660 
    661 #ifdef RESOURCE_MANAGER_ENABLED
    662 void AACENC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
    663 #endif
    664 
    665 #ifndef UNDER_CE
    666 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
    667 #else
    668 /*  WinCE Implicit Export Syntax */
    669 #define OMX_EXPORT __declspec(dllexport)
    670 OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
    671 #endif
    672 
    673 
    674 OMX_ERRORTYPE AACENC_StartComponentThread(OMX_HANDLETYPE pHandle);
    675 
    676 OMX_ERRORTYPE AACENC_StopComponentThread(OMX_HANDLETYPE pHandle);
    677 
    678 OMX_ERRORTYPE AACENC_FreeCompResources(OMX_HANDLETYPE pComponent);
    679 
    680 OMX_ERRORTYPE AddStateTransition(AACENC_COMPONENT_PRIVATE* pComponentPrivate);
    681 OMX_ERRORTYPE RemoveStateTransition(AACENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal);
    682 
    683 /*  =========================================================================*/
    684 /**  func    AACENC_HandleUSNError
    685  *
    686  *  desc    Handles error messages returned by the dsp
    687  *
    688  *@return n/a
    689  */
    690 /*  =========================================================================*/
    691 void AACENC_HandleUSNError (AACENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg);
    692 
    693 
    694 #endif
    695 
    696 
    697 /*=======================================================================*/
    698 /** @fn SignalIfAllBuffersAreReturned
    699  * @brief Sends pthread signal to indicate OMX has returned all buffers to app
    700  *
    701  * @param  none
    702  *
    703  * @Return none
    704  *
    705  */
    706 /*=======================================================================*/
    707 void SignalIfAllBuffersAreReturned(AACENC_COMPONENT_PRIVATE *pComponentPrivate);
    708 
    709 /* ====================================================================== */
    710 /*@AACENC_IncrementBufferCounterByOne() This function is used by the component
    711  * to atomically increment some input or output buffer counter
    712  *
    713  * @param mutex pointer to mutex for synchronizing the value change on
    714  *              the counter
    715  * @param counter the buffer counter to be changed
    716  *
    717  * @post the buffer counter's value will be incremented by one.
    718  * @return None
    719  */
    720 /* ====================================================================== */
    721 void AACENC_IncrementBufferCounterByOne(pthread_mutex_t* mutex, OMX_U32 *counter);
    722