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_WmaDecUtils.h
     30  *
     31  * This is an header file for an audio WMA Decoder that is fully
     32  * compliant with the Khronos OpenMAX 1.0 specification.
     33  * This the file that the application that uses OMX would include
     34  * in its code.
     35  *
     36  * @path $(CSLPATH)\
     37  *
     38  * @rev 1.0
     39  */
     40 /* --------------------------------------------------------------------------- */
     41 
     42 #ifndef OMX_WMADEC_UTILS__H
     43 #define OMX_WMADEC_UTILS__H
     44 #define OMX_WMADECODER_H
     45 #include <pthread.h>
     46 
     47 #include <OMX_TI_Common.h>
     48 #include <TIDspOmx.h>
     49 #include "LCML_DspCodec.h"
     50 #define _ERROR_PROPAGATION__
     51 
     52 #ifdef __PERF_INSTRUMENTATION__
     53 #include "perf.h"
     54 #endif
     55 
     56 #ifdef RESOURCE_MANAGER_ENABLED
     57 #include <ResourceManagerProxyAPI.h>
     58 #endif
     59 
     60 #include <OMX_Component.h>
     61 
     62 #ifndef ANDROID
     63     #define ANDROID
     64 #endif
     65 
     66 #ifdef ANDROID
     67     #undef LOG_TAG
     68     #define LOG_TAG "OMX_WMADEC"
     69 
     70 /* PV opencore capability custom parameter index */
     71     #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
     72 #endif
     73 
     74 #ifdef UNDER_CE
     75 #ifndef _OMX_EVENT_
     76 #define _OMX_EVENT_
     77 typedef struct OMX_Event {
     78     HANDLE event;
     79 } OMX_Event;
     80 #endif
     81 
     82 int OMX_CreateEvent(OMX_Event *event);
     83 int OMX_SignalEvent(OMX_Event *event);
     84 int OMX_WaitForEvent(OMX_Event *event);
     85 int OMX_DestroyEvent(OMX_Event *event);
     86 
     87 typedef struct OMXBufferStatus /*BUFFERSTATUS*/
     88 {
     89     DWORD EmptyBufferSent;
     90     DWORD FillBufferSent;
     91     DWORD EmptyBufferDone;
     92     DWORD FillBufferDone;
     93 } OMXBufferStatus;
     94 
     95 #endif
     96 
     97 /* PV opencore capability custom parameter index */
     98 #define PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX 0xFF7A347
     99 
    100 #ifndef ANDROID
    101 #define ANDROID
    102 #endif
    103 
    104 #define OBJECTTYPE_LC 2
    105 #define OBJECTTYPE_HE 5
    106 #define OBJECTTYPE_HE2 29
    107 
    108 
    109 /* ======================================================================= */
    110 /**
    111  * @def    WMADEC_COMPONENT_THREAD
    112  */
    113 /* ======================================================================= */
    114 #define EXIT_COMPONENT_THRD  10
    115 /* ======================================================================= */
    116 /**
    117  * @def    WMADEC_XXX_VER    Component version
    118  */
    119 /* ======================================================================= */
    120 #define  WMADEC_MAJOR_VER 0xF1
    121 #define  WMADEC_MINOR_VER 0xF2
    122 /* ======================================================================= */
    123 /**
    124  * @def    INPUT_WMADEC_BUFFER_SIZE   Default input buffer size
    125  *
    126  */
    127 /* ======================================================================= */
    128 #define INPUT_WMADEC_BUFFER_SIZE 16384
    129 
    130 /* ======================================================================= */
    131 /**
    132  * @def    OUTPUT_WMADEC_BUFFER_SIZE   Default output buffer size
    133  */
    134 /* ======================================================================= */
    135 #define OUTPUT_WMADEC_BUFFER_SIZE 40960
    136 /* ======================================================================= */
    137 /**
    138  * @def    NUM_WMADEC_INPUT_BUFFERS   Default number of input buffers
    139  */
    140 /* ======================================================================= */
    141 #define NUM_WMADEC_INPUT_BUFFERS 2
    142 /* ======================================================================= */
    143 /**
    144  * @def    NUM_WMADEC_OUTPUT_BUFFERS   Default number of output buffers
    145  */
    146 /* ======================================================================= */
    147 #ifdef UNDER_CE
    148 #define NUM_WMADEC_OUTPUT_BUFFERS 4
    149 #else
    150 #define NUM_WMADEC_OUTPUT_BUFFERS 4
    151 #endif
    152 /* ======================================================================= */
    153 /**
    154  * @def    NOT_USED    Defines a value for "don't care" parameters
    155  */
    156 /* ======================================================================= */
    157 #define NOT_USED 10
    158 /* ======================================================================= */
    159 /**
    160  * @def    NORMAL_BUFFER    Defines the flag value with all flags turned off
    161  */
    162 /* ======================================================================= */
    163 #define NORMAL_BUFFER 0
    164 /* ======================================================================= */
    165 /**
    166  * @def    OMX_WMADEC_DEFAULT_SEGMENT    Default segment ID for the LCML
    167  */
    168 /* ======================================================================= */
    169 #define OMX_WMADEC_DEFAULT_SEGMENT (0)
    170 /* ======================================================================= */
    171 /**
    172  * @def    OMX_WMADEC_SN_TIMEOUT    Timeout value for the socket node
    173  */
    174 /* ======================================================================= */
    175 #define OMX_WMADEC_SN_TIMEOUT (-1)
    176 /* ======================================================================= */
    177 /**
    178  * @def    OMX_WMADEC_SN_PRIORITY   Priority for the socket node
    179  */
    180 /* ======================================================================= */
    181 #define OMX_WMADEC_SN_PRIORITY (10)
    182 /* ======================================================================= */
    183 /**
    184  * @def    WMAD_TIMEOUT   Timeout value for the component thread
    185  */
    186 /* ======================================================================= */
    187 #define WMAD_TIMEOUT (1000) /* millisecs */
    188 /* ======================================================================= */
    189 /**
    190  * @def    NUM_WMADEC_OUTPUT_BUFFERS_DASF   Number of output buffers for DASF
    191  */
    192 /* ======================================================================= */
    193 #define NUM_WMADEC_OUTPUT_BUFFERS_DASF 2
    194 /* ======================================================================= */
    195 /**
    196  * @def    WMADEC_STREAM_COUNT   Number of streams
    197  */
    198 /* ======================================================================= */
    199 #define WMADEC_STREAM_COUNT 2
    200 /* ======================================================================= */
    201 /**
    202  * @def    WMADEC_DEFAULT_SAMPLING_FREQUENCY   Sampling frequency
    203  */
    204 /* ======================================================================= */
    205 #define WMADEC_DEFAULT_SAMPLING_FREQUENCY 8000
    206 /* ======================================================================= */
    207 /**
    208  * @def    WMADEC_MAX_NUM_OF_BUFS   Maximum number of buffers
    209  */
    210 /* ======================================================================= */
    211 #define MAX_NUM_OF_BUFS 10
    212 #define WMA_CPU 45
    213 /* ======================================================================= */
    214 /**
    215  * @def    WMADEC_DEFAULT_PACKETS_DWLO  Default Packets Number
    216  */
    217 /* ======================================================================= */
    218 #define WMADEC_DEFAULT_PACKETS_DWLO 178
    219 /* ======================================================================= */
    220 /**
    221  * @def    WMADEC_DEFAULT_PLAYDURATION_DWLO   Default Play Duration
    222  */
    223 /* ======================================================================= */
    224 #define WMADEC_DEFAULT_PLAYDURATION_DWLO 917760000
    225 /* ======================================================================= */
    226 /**
    227  * @def    WMADEC_DEFAULT_MAXPACKETSIZE   Default Maximum Packet Size
    228  */
    229 /* ======================================================================= */
    230 #define WMADEC_DEFAULT_MAXPACKETSIZE 349
    231 /* ======================================================================= */
    232 /**
    233  * @def    WMADEC_DEFAULT_STREAMTYPE_DATA1   Default Stream Data Type values
    234  */
    235 /* ======================================================================= */
    236 //Macros for WMA
    237 #define GetUnalignedWord( pb, w )               \
    238     (w) = ((OMX_U16) *(pb + 1) << 8) + *pb;
    239 
    240 #define GetUnalignedDword( pb, dw )             \
    241     (dw) = ((OMX_U32) *(pb + 3) << 24) +        \
    242         ((OMX_U32) *(pb + 2) << 16) +           \
    243         ((OMX_U16) *(pb + 1) << 8) + *pb;
    244 
    245 #define GetUnalignedWordEx( pb, w )     GetUnalignedWord( pb, w ); (pb) += sizeof(OMX_U16);
    246 #define GetUnalignedDwordEx( pb, dw )   GetUnalignedDword( pb, dw ); (pb) += sizeof(OMX_U32);
    247 #define LoadWORD( w, p )    GetUnalignedWordEx( p, w )
    248 #define LoadDWORD( dw, p )  GetUnalignedDwordEx( p, dw )
    249 
    250 
    251 #define WMADEC_DEFAULT_STREAMTYPE_DATA1 -127295936
    252 #define WMADEC_DEFAULT_STREAMTYPE_DATA2 23373
    253 #define WMADEC_DEFAULT_STREAMTYPE_DATA3 4559
    254 #define WMADEC_DEFAULT_STREAMTYPE_DATA40 168
    255 #define WMADEC_DEFAULT_STREAMTYPE_DATA41 253
    256 #define WMADEC_DEFAULT_STREAMTYPE_DATA42 0
    257 #define WMADEC_DEFAULT_STREAMTYPE_DATA43 128
    258 #define WMADEC_DEFAULT_STREAMTYPE_DATA44 95
    259 #define WMADEC_DEFAULT_STREAMTYPE_DATA45 92
    260 #define WMADEC_DEFAULT_STREAMTYPE_DATA46 68
    261 #define WMADEC_DEFAULT_STREAMTYPE_DATA47 43
    262 
    263 /* ======================================================================= */
    264 /**
    265  * @def    WMADEC_DEFAULT_TYPESPECIFIC    Default Specific Type
    266  */
    267 /* ======================================================================= */
    268 #define WMADEC_DEFAULT_TYPESPECIFIC 28
    269 /* ======================================================================= */
    270 /**
    271  * @def    WMADEC_DEFAULT_STREAMNUM     Default Stream Number
    272  */
    273 /* ======================================================================= */
    274 #define WMADEC_DEFAULT_STREAMNUM 1
    275 /* ======================================================================= */
    276 /**
    277  * @def    WMADEC_DEFAULT_FORMATTAG    Default Format tag
    278  */
    279 /* ======================================================================= */
    280 #define WMADEC_DEFAULT_FORMATTAG 353
    281 /* ======================================================================= */
    282 /**
    283  * @def    WMADEC_DEFAULT_SAMPLEPERSEC    Default samples per second
    284  */
    285 /* ======================================================================= */
    286 #define WMADEC_DEFAULT_SAMPLEPERSEC 8000
    287 /* ======================================================================= */
    288 /**
    289  * @def    WMADEC_DEFAULT_AVGBYTESPERSEC    Default average bytes per second
    290  */
    291 /* ======================================================================= */
    292 #define WMADEC_DEFAULT_AVGBYTESPERSEC 625
    293 /* ======================================================================= */
    294 /**
    295  * @def    WMADEC_DEFAULT_BLOCKALIGN    Default block alignment
    296  */
    297 /* ======================================================================= */
    298 #define WMADEC_DEFAULT_BLOCKALIGN 40
    299 /* ======================================================================= */
    300 /**
    301  * @def    WMADEC_DEFAULT_CHANNEL    Default channels number
    302  */
    303 /* ======================================================================= */
    304 #define WMADEC_DEFAULT_CHANNEL 1
    305 /* ======================================================================= */
    306 /**
    307  * @def    WMADEC_DEFAULT_VALIDBITSPERSAMPLE    Default valid bits per sample
    308  */
    309 /* ======================================================================= */
    310 #define WMADEC_DEFAULT_VALIDBITSPERSAMPLE 16
    311 /* ======================================================================= */
    312 /**
    313  * @def    WMADEC_DEFAULT_SIZEWAVEHEADER    Default wave header size
    314  */
    315 /* ======================================================================= */
    316 #define WMADEC_DEFAULT_SIZEWAVEHEADER 10
    317 /* ======================================================================= */
    318 /**
    319  * @def    WMADEC_DEFAULT_CHANNELMASK    Default channel mask
    320  */
    321 /* ======================================================================= */
    322 #define WMADEC_DEFAULT_CHANNELMASK 0
    323 /* ======================================================================= */
    324 /**
    325  * @def    WMADEC_DEFAULT_ENCODEOPTV    Default encode option
    326  */
    327 /* ======================================================================= */
    328 #define WMADEC_DEFAULT_ENCODEOPTV 0
    329 /* ======================================================================= */
    330 /**
    331  * @def    WMADEC_DEFAULT_VALIDBITSPERSAMPLE    Default valid bits per sample
    332  */
    333 /* ======================================================================= */
    334 #define WMADEC_DEFAULT_VALIDBITSPERSAMPLE 16
    335 /* ======================================================================= */
    336 /**
    337  * @def    WMADEC_DEFAULT_SAMPLEPERBLOCK    Default samples per block
    338  */
    339 /* ======================================================================= */
    340 #define WMADEC_DEFAULT_SAMPLEPERBLOCK 8704
    341 /**
    342  * @def    WMADEC_DEBUG   Turns debug messaging on and off
    343  */
    344 /* ======================================================================= */
    345 #undef WMADEC_DEBUG
    346 /* ======================================================================= */
    347 /**
    348  * @def    WMADEC_MEMCHECK   Turns memory messaging on and off
    349  */
    350 /* ======================================================================= */
    351 #undef WMADEC_MEMCHECK
    352 /* ======================================================================= */
    353 /**
    354  * @def    WMADEC_USN_DLL_NAME   USN DLL name
    355  */
    356 /* ======================================================================= */
    357 #ifdef UNDER_CE
    358 #define WMADEC_USN_DLL_NAME "\\windows\\usn.dll64P"
    359 #else
    360 #define WMADEC_USN_DLL_NAME "usn.dll64P"
    361 #endif
    362 /* ======================================================================= */
    363 /**
    364  * @def    WMADEC_DLL_NAME   WMA Decoder socket node dll name
    365  */
    366 /* ======================================================================= */
    367 #ifdef UNDER_CE
    368 #define WMADEC_DLL_NAME "\\windows\\wmadec_sn.dll64P"
    369 #else
    370 #define WMADEC_DLL_NAME "wmadec_sn.dll64P"
    371 #endif
    372 /* ======================================================================= */
    373 /**
    374  * @def    WMADEC_EPRINT   Error print macro
    375  */
    376 /* ======================================================================= */
    377 #ifndef UNDER_CE
    378 #define WMADEC_EPRINT LOGE
    379 #else
    380 #define WMADEC_EPRINT		  printf
    381 #endif
    382 /* ======================================================================= */
    383 /**
    384  * @def    WMADEC_DPRINT   Debug print macro
    385  */
    386 /* ======================================================================= */
    387 #ifndef UNDER_CE
    388 #ifdef  WMADEC_DEBUG
    389 #define WMADEC_DPRINT LOGI
    390 #else
    391 #define WMADEC_DPRINT(...)
    392 #endif
    393 
    394 #ifdef  WMADEC_MEMCHECK
    395 #define WMADEC_MEMPRINT(...)    fprintf(stderr,__VA_ARGS__)
    396 #else
    397 #define WMADEC_MEMPRINT(...)
    398 #endif
    399 
    400 
    401 #ifdef  WMADEC_DEBUG_MCP
    402 #define WMADEC_MCP_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
    403 #else
    404 #define WMADEC_MCP_DPRINT(...)
    405 #endif
    406 
    407 #else /*UNDER_CE*/
    408 #ifdef  WMADEC_DEBUG
    409 #define WMADEC_DPRINT(STR, ARG...) printf()
    410 #else
    411 #define WMADEC_DPRINT
    412 #endif
    413 /* ======================================================================= */
    414 /**
    415  * @def    WMADEC_MEMCHECK   Memory print macro
    416  */
    417 /* ======================================================================= */
    418 #ifdef WMADEC_MEMCHECK
    419 #define WMADEC_MEMPRINT(STR, ARG...) printf()
    420 #else
    421 #define WMADEC_MEMPRINT
    422 #endif
    423 
    424 #endif
    425 /* ======================================================================= */
    426 /**
    427  * @def    WMADEC_NUM_OF_PORTS   Number of ports
    428  */
    429 /* ======================================================================= */
    430 #define WMADEC_NUM_OF_PORTS 2
    431 /* ======================================================================= */
    432 /**
    433  *  W M A       T Y P E S
    434  */
    435 /* ======================================================================= */
    436 
    437 
    438 #define WAVE_FORMAT_MSAUDIO1  0x0160
    439 #define WAVE_FORMAT_WMAUDIO2  0x0161
    440 #define WAVE_FORMAT_WMAUDIO3  0x0162
    441 #define WAVE_FORMAT_WMAUDIO_LOSSLESS  0x0163
    442 #define WAVE_FORMAT_WMAUDIO2_ES  0x0165
    443 #define WAVE_FORMAT_WMASPDIF 0x164
    444 #define WAVE_FORMAT_WMAUDIO3_ES  0x0166
    445 #define WAVE_FORMAT_WMAUDIO_LOSSLESS_ES  0x0167
    446 #define WAVE_FORMAT_MSSPEECH  10
    447 
    448 
    449 /* According with the ASF Specification:*/
    450 #define WAVE_FORMAT_MSAUDIO              0x0161  /*Versions 7,8 and 9 Series*/
    451 #define WAVE_FORMAT_MSAUDIO_9            0x0162  /* 9 series                 */
    452 #define WAVE_FORMAT_MSAUDIO_9_LOOSELESS  0x0163  /* 9 series                  */
    453 
    454 /* ======================================================================= */
    455 /** COMP_PORT_TYPE  Port types
    456  *
    457  *  @param  INPUT_PORT                   Input port
    458  *
    459  *  @param  OUTPUT_PORT                  Output port
    460  */
    461 /*  ==================================================================== */
    462 typedef enum COMP_PORT_TYPE {
    463     INPUT_PORT = 0,
    464     OUTPUT_PORT
    465 }COMP_PORT_TYPE;
    466 /* ======================================================================= */
    467 /** StreamType  Stream types
    468  *
    469  *  @param  DMM                  DMM
    470  *
    471  *  @param  INSTRM               Input stream
    472  *
    473  *  @param  OUTSTRM              Output stream
    474  */
    475 /*  ==================================================================== */
    476 enum StreamType
    477     {
    478         DMM,
    479         INSTRM,
    480         OUTSTRM
    481     };
    482 
    483 typedef OMX_ERRORTYPE (*fpo)(OMX_HANDLETYPE);
    484 
    485 /* =================================================================================== */
    486 /**
    487  * Socket node input parameters.
    488  */
    489 /* ================================================================================== */
    490 typedef struct WMADEC_AudioCodecParams
    491 {
    492     unsigned long iSamplingRate;
    493     unsigned long iStrmId;
    494     unsigned short iAudioFormat;
    495 
    496 }WMADEC_AudioCodecParams;
    497 
    498 typedef enum {
    499     WMA_IAUDIO_BLOCK=0,
    500     WMA_IAUDIO_INTERLEAVED
    501 } WMAAUDIO_PcmFormat;
    502 
    503 
    504 #define WMA_MONO_CHANNEL                0x0001
    505 #define WMA_STEREO_INTERLEAVED          0x0002
    506 #define WMA_STEREO_NON_INTERLEAVED      0x0003
    507 #define WMA_MONO_DUPLICATED             0x0004
    508 
    509 typedef enum {
    510     WMA_IUALG_CMD_STOP          = 0,
    511     WMA_IUALG_CMD_PAUSE         = 1,
    512     WMA_IUALG_CMD_GETSTATUS     = 2,
    513     WMA_IUALG_CMD_SETSTATUS     = 3,
    514     WMA_IUALG_CMD_USERCMDSTART  = 100
    515 }WMA_IUALGUALG_Cmd;
    516 
    517 
    518 typedef struct {
    519     OMX_U16 bLastBuffer;
    520 }WMADEC_UAlgInBufParamStruct;
    521 
    522 typedef struct
    523 {
    524     OMX_U32      size;
    525     OMX_S32      iOutputFormat;
    526 } WMADEC_UALGParams;
    527 
    528 typedef struct {
    529     /* Number of frames in a buffer */
    530     unsigned long ulFrameCount;
    531     bool ulIsLastBuffer;
    532 }WMADEC_UAlgOutBufParamStruct;
    533 /* =================================================================================== */
    534 /**
    535  * WMA Buffer Header Type
    536  */
    537 /* ================================================================================== */
    538 typedef struct LCML_WMADEC_BUFHEADERTYPE {
    539     OMX_DIRTYPE eDir;
    540     OMX_BUFFERHEADERTYPE* buffer;
    541     WMADEC_UAlgInBufParamStruct *pIpParam;
    542     /* Output Parameter Information structure */
    543     WMADEC_UAlgOutBufParamStruct *pOpParam;
    544 }LCML_WMADEC_BUFHEADERTYPE;
    545 
    546 /* =================================================================================== */
    547 /**
    548  * Structure for buffer list
    549  */
    550 /* ================================================================================== */
    551 typedef struct _BUFFERLIST BUFFERLIST;
    552 struct _BUFFERLIST{
    553     OMX_U16 numBuffers;
    554     OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS]; /* records buffer header send by client */
    555     OMX_U32 bufferOwner[MAX_NUM_OF_BUFS];
    556     OMX_U32 bBufferPending[MAX_NUM_OF_BUFS];
    557     OMX_U8 EosFlagSent;
    558 };
    559 
    560 
    561 typedef struct PV_OMXComponentCapabilityFlagsType
    562 {
    563     ////////////////// OMX COMPONENT CAPABILITY RELATED MEMBERS (for opencore compatability)
    564     OMX_BOOL iIsOMXComponentMultiThreaded;
    565     OMX_BOOL iOMXComponentSupportsExternalOutputBufferAlloc;
    566     OMX_BOOL iOMXComponentSupportsExternalInputBufferAlloc;
    567     OMX_BOOL iOMXComponentSupportsMovableInputBuffers;
    568     OMX_BOOL iOMXComponentSupportsPartialFrames;
    569     OMX_BOOL iOMXComponentNeedsNALStartCode;
    570     OMX_BOOL iOMXComponentCanHandleIncompleteFrames;
    571 } PV_OMXComponentCapabilityFlagsType;
    572 /* =================================================================================== */
    573 /**
    574  *  RCA_HEADER. Rca data that goes to SN with the first data packet received from test app.
    575  */
    576 /* ================================================================================== */
    577 typedef struct RCA_HEADER
    578 {
    579     QWORD					iPackets;
    580     QWORD					iPlayDuration;
    581     OMX_U32 				iMaxPacketSize;
    582     WMADECGUID				iStreamType;
    583     OMX_U32					iTypeSpecific;
    584     OMX_U16					iStreamNum;
    585     OMX_U16					iFormatTag;
    586     OMX_U16					iChannel;
    587     OMX_U32					iSamplePerSec;
    588     OMX_U32					iAvgBytesPerSec;
    589     OMX_U16					iBlockAlign;
    590     OMX_U16					iValidBitsPerSample;
    591     OMX_U16					iNotUsed;
    592     OMX_U32					iSamplesPerBlock;
    593     OMX_U16					iEncodeOptV;
    594     OMX_U32					iNotUsed2;
    595     OMX_U8					iReplicatedDataSize;
    596     OMX_U32                 iPayload;
    597 } RCA_HEADER;
    598 /* =================================================================================== */
    599 /**
    600  * Component private data
    601  */
    602 /* ================================================================================== */
    603 typedef struct WMADEC_COMPONENT_PRIVATE
    604 {
    605     /** Input buffer list */
    606     BUFFERLIST *pInputBufferList;
    607 
    608     /** Number of input buffers at runtime */
    609     OMX_U32 nRuntimeInputBuffers;
    610 
    611     /** Number of output buffers at runtime */
    612     OMX_U32 nRuntimeOutputBuffers;
    613 
    614     /** Output buffer list */
    615     BUFFERLIST *pOutputBufferList;
    616 
    617     /** Structure of callback pointers */
    618     OMX_CALLBACKTYPE cbInfo;
    619     /** Handle for use with async callbacks */
    620 
    621     OMX_PORT_PARAM_TYPE sPortParam;
    622 
    623     /** Input port parameters */
    624     OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
    625 
    626     /** Output port parameters */
    627     OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
    628 
    629     /** This will contain info like how many buffers
    630         are there for input/output ports, their size etc, but not
    631         BUFFERHEADERTYPE POINTERS. */
    632     OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[WMADEC_NUM_OF_PORTS];
    633 
    634     /** WMA Component Parameters */
    635     OMX_AUDIO_PARAM_WMATYPE* wmaParams[WMADEC_NUM_OF_PORTS];
    636 
    637 
    638     /** This is component handle */
    639     OMX_COMPONENTTYPE* pHandle;
    640 
    641     /** Current state of this component */
    642     OMX_STATETYPE curState;
    643 
    644     /** The component thread handle */
    645     pthread_t ComponentThread;
    646 
    647     /** The pipes for sending buffers to the thread */
    648     int dataPipe[2];
    649 
    650     /** The pipes for sending buffers to the thread */
    651     int cmdPipe[2];
    652 
    653     /** The pipes for sending buffers to the thread */
    654     int cmdDataPipe[2];
    655 
    656     /** Set to indicate component is stopping */
    657     OMX_U32 bIsStopping;
    658 
    659     /** Flag set when the EOS marker is sent */
    660     OMX_U32 bIsEOFSent;
    661 
    662 
    663     /** LCML input buffers received */
    664     OMX_U32 lcml_nCntIp;
    665 
    666     /** LCML output buffers received */
    667     OMX_U32 lcml_nCntOpReceived;
    668 
    669 #ifdef __PERF_INSTRUMENTATION__
    670     PERF_OBJHANDLE pPERF, pPERFcomp;
    671     OMX_U32 nLcml_nCntIp;
    672     OMX_U32 nLcml_nCntOpReceived;
    673 #endif
    674 
    675     /** LCML Handle */
    676     OMX_HANDLETYPE pLcmlHandle;
    677 
    678     /** LCML Buffer Header */
    679     LCML_WMADEC_BUFHEADERTYPE *pLcmlBufHeader[2];
    680 
    681     /** Sampling frequency */
    682     int iWmaSamplingFrequeny;
    683 
    684     /** Number of channels */
    685     int iWmaChannels;
    686 
    687     /** Flag for DASF mode */
    688     int dasfmode;
    689 
    690     /** Flag set when port definitions are allocated */
    691     OMX_U32 bPortDefsAllocated;
    692 
    693     /** Flag set when component thread is started */
    694     OMX_U32 bCompThreadStarted;
    695 
    696     /** Mark data */
    697     OMX_PTR pMarkData;
    698 
    699     /** Mark buffer */
    700     OMX_MARKTYPE *pMarkBuf;
    701 
    702     /** Mark target component */
    703     OMX_HANDLETYPE hMarkTargetComponent;
    704 
    705     /** Flag set when buffer should not be queued to the DSP */
    706     OMX_U32 bBypassDSP;
    707 
    708 
    709     /** LCML stream attributes */
    710     LCML_STRMATTR *strmAttr;
    711 
    712     /** Component version */
    713     OMX_U32 nVersion;
    714 
    715     /** WMA Header Info */
    716     WMA_HeadInfo* pHeaderInfo;
    717 
    718     /** WMA Header Info */
    719     TI_OMX_DSP_DEFINITION* pDspDefinition;
    720 
    721     /** Flag set when LCML handle is opened */
    722     int bLcmlHandleOpened;
    723 
    724     /** Keeps track of the number of EmptyThisBuffer() calls */
    725     OMX_U32 nEmptyThisBufferCount;
    726 
    727     /** Keeps track of the number of EmptyBufferDone() calls */
    728     OMX_U32 nEmptyBufferDoneCount;
    729 
    730     /** Flag set when init params have been initialized */
    731     OMX_U32 bInitParamsInitialized;
    732 
    733     /** Stores input buffers while paused */
    734     OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS];
    735 
    736     /** Number of input buffers received while paused */
    737     OMX_U32 nNumInputBufPending;
    738 
    739     /** Stores output buffers while paused */
    740     OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS];
    741 
    742     /** Number of output buffers received while paused */
    743     OMX_U32 nNumOutputBufPending;
    744 
    745     /** Keeps track of the number of invalid frames that come from the LCML */
    746     OMX_U32 nInvalidFrameCount;
    747 
    748     /** Flags to control port enable command **/
    749     OMX_U32 bEnableCommandPending;
    750 
    751     /** Flag set when a disable command is pending */
    752     OMX_U32 bDisableCommandPending;
    753 
    754     /** Parameter for pending disable command */
    755     OMX_U32 bEnableCommandParam;
    756 
    757     /** Parameter for pending disable command */
    758     OMX_U32 bDisableCommandParam;
    759 
    760     /** Flag to set when socket node stop callback should not transition
    761         component to OMX_StateIdle */
    762     OMX_U32 bNoIdleOnStop;
    763 
    764     /** Flag set when idle command is pending */
    765     OMX_U32 bIdleCommandPending;
    766 
    767     /** Flag set when socket node is stopped */
    768     OMX_U32 bDspStoppedWhileExecuting;
    769 
    770     /** Number of outstanding FillBufferDone() calls */
    771     OMX_S32 nOutStandingFillDones;
    772 
    773     /** ID of stream */
    774     OMX_U32 streamID;
    775 
    776     /** Flag set when get status is pending */
    777     OMX_U32 bGetStatusPending;
    778 
    779     /** Pointer to the last output buffer header queued */
    780     OMX_BUFFERHEADERTYPE* LastOutputBufferHdrQueued;
    781 
    782     /** Pointer to WMADEC_AudioCodecParams */
    783     WMADEC_AudioCodecParams *pParams;
    784 
    785     /* Pointer to WMADEC_UALGParams */
    786     WMADEC_UALGParams *pDynParams;
    787 
    788     /* Device string */
    789     OMX_STRING* sDeviceString;
    790 
    791     /**Keep buffer tickcount*/
    792     OMX_U32 arrBufIndexTick[MAX_NUM_OF_BUFS];
    793 
    794     /** Keep buffer timestamps **/
    795     OMX_S64 arrBufIndex[MAX_NUM_OF_BUFS];
    796 
    797     /** Index to arrBufIndex[], used for input buffer timestamps */
    798     OMX_U8 IpBufindex;
    799 
    800     /** Index to arrBufIndex[], used for output buffer timestamps */
    801     OMX_U8 OpBufindex;
    802 
    803     /** Flag to flush SN after EOS in order to process more buffers after EOS**/
    804     OMX_U8 SendAfterEOS;
    805 
    806     OMX_U8 InputEosSet;
    807 
    808     OMX_BOOL bPreempted;
    809 
    810 #ifdef RESOURCE_MANAGER_ENABLED
    811     RMPROXY_CALLBACKTYPE rmproxyCallback;
    812 #endif
    813 
    814     /* Removing sleep() calls. Definition. */
    815 #ifndef UNDER_CE
    816     pthread_mutex_t AlloBuf_mutex;
    817     pthread_cond_t AlloBuf_threshold;
    818     OMX_U8 AlloBuf_waitingsignal;
    819 
    820     pthread_mutex_t InLoaded_mutex;
    821     pthread_cond_t InLoaded_threshold;
    822     OMX_U8 InLoaded_readytoidle;
    823 
    824     pthread_mutex_t InIdle_mutex;
    825     pthread_cond_t InIdle_threshold;
    826     OMX_U8 InIdle_goingtoloaded;
    827 
    828     pthread_mutex_t codecStop_mutex;
    829     pthread_cond_t codecStop_threshold;
    830     OMX_U8 codecStop_waitingsignal;
    831 
    832     pthread_mutex_t codecFlush_mutex;
    833     pthread_cond_t codecFlush_threshold;
    834     OMX_U8 codecFlush_waitingsignal;
    835 
    836     OMX_U8 nUnhandledFillThisBuffers;
    837     OMX_U8 nUnhandledEmptyThisBuffers;
    838     OMX_BOOL bFlushOutputPortCommandPending;
    839     OMX_BOOL bFlushInputPortCommandPending;
    840 
    841 #else
    842     OMX_Event AlloBuf_event;
    843     OMX_U8 AlloBuf_waitingsignal;
    844 
    845     OMX_Event InLoaded_event;
    846     OMX_U8 InLoaded_readytoidle;
    847 
    848     OMX_Event InIdle_event;
    849     OMX_U8 InIdle_goingtoloaded;
    850 #endif
    851     OMX_BOOL bIsInvalidState;
    852     void* PtrCollector[6];
    853     /* Removing sleep() calls. Definition. */
    854     OMX_BOOL bLoadedCommandPending;
    855     OMX_PARAM_COMPONENTROLETYPE componentRole;
    856     /** Count of number of buffers outstanding with bridge */
    857     OMX_U32 lcml_nIpBuf;
    858     /** Count of number of buffers outstanding with bridge */
    859     OMX_U32 lcml_nOpBuf;
    860     OMX_U32 app_nBuf;
    861     OMX_U32 num_Reclaimed_Op_Buff;
    862 
    863     PV_OMXComponentCapabilityFlagsType iPVCapabilityFlags;
    864     OMX_BOOL reconfigInputPort;
    865     OMX_BOOL reconfigOutputPort;
    866     OMX_BOOL bConfigData;
    867 
    868     OMX_AUDIO_PARAM_WMATYPE *wma_ip;
    869 
    870     OMX_AUDIO_PARAM_PCMMODETYPE *wma_op;
    871 
    872     OMX_U8 first_buffer;
    873 
    874     RCA_HEADER *rcaheader;
    875 
    876     struct OMX_TI_Debug dbg;
    877 
    878     OMX_BUFFERHEADERTYPE *lastout;
    879 
    880 } WMADEC_COMPONENT_PRIVATE;
    881 /* ===========================================================  */
    882 /**
    883  *  OMX_ComponentInit()  Initializes component
    884  *
    885  *
    886  *  @param hComp         OMX Handle
    887  *
    888  *  @return OMX_ErrorNone = Successful
    889  *          Other error code = fail
    890  *
    891  */
    892 /*================================================================== */
    893 
    894 OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
    895 
    896 /* ===========================================================  */
    897 /**
    898  *  WMADEC_StartComponentThread()  Starts component thread
    899  *
    900  *
    901  *  @param hComp         OMX Handle
    902  *
    903  *  @return OMX_ErrorNone = Successful
    904  *          Other error code = fail
    905  *
    906  */
    907 /*================================================================== */
    908 OMX_ERRORTYPE WMADEC_StartComponentThread(OMX_HANDLETYPE pHandle);
    909 
    910 /* ===========================================================  */
    911 /**
    912  *  WMADEC_StopComponentThread()  Stops component thread
    913  *
    914  *
    915  *  @param hComp         OMX Handle
    916  *
    917  *  @return OMX_ErrorNone = Successful
    918  *          Other error code = fail
    919  *
    920  */
    921 /*================================================================== */
    922 OMX_ERRORTYPE WMADEC_StopComponentThread(OMX_HANDLETYPE pHandle);
    923 
    924 /* ===========================================================  */
    925 /**
    926  *  WMADEC_FreeCompResources()  Frees allocated memory
    927  *
    928  *
    929  *  @param hComp         OMX Handle
    930  *
    931  *  @return OMX_ErrorNone = Successful
    932  *          Other error code = fail
    933  *
    934  */
    935 /*================================================================== */
    936 OMX_ERRORTYPE WMADEC_FreeCompResources(OMX_HANDLETYPE pComponent);
    937 
    938 /* ===========================================================  */
    939 /**
    940  *  WMADEC_GetCorresponding_LCMLHeader()  Returns LCML header
    941  * that corresponds to the given buffer
    942  *
    943  *  @param pComponentPrivate Component private data
    944  *
    945  *  @return OMX_ErrorNone = Successful
    946  *          Other error code = fail
    947  */
    948 /*================================================================== */
    949 OMX_ERRORTYPE WMADECGetCorresponding_LCMLHeader(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
    950                                                 OMX_U8 *pBuffer,
    951                                                 OMX_DIRTYPE eDir,
    952                                                 LCML_WMADEC_BUFHEADERTYPE **ppLcmlHdr);
    953 
    954 /* ===========================================================  */
    955 /**
    956  *  WMADEC_LCML_Callback() Callback from LCML
    957  *
    958  *  @param event     Codec Event
    959  *
    960  *  @param args      Arguments from LCML
    961  *
    962  *  @return OMX_ErrorNone = Successful
    963  *          Other error code = fail
    964  */
    965 /*================================================================== */
    966 OMX_ERRORTYPE WMADECLCML_Callback (TUsnCodecEvent event,void * args [10]);
    967 
    968 /* ===========================================================  */
    969 /**
    970  *  WMADEC_Fill_LCMLInitParams() Fills the parameters needed
    971  * to initialize the LCML
    972  *
    973  *  @param pHandle OMX Handle
    974  *
    975  *  @param plcml_Init LCML initialization parameters
    976  *
    977  *  @return OMX_ErrorNone = Successful
    978  *          Other error code = fail
    979  *
    980  */
    981 /*================================================================== */
    982 OMX_ERRORTYPE WMADECFill_LCMLInitParams(OMX_COMPONENTTYPE* pComponent,
    983                                         LCML_DSP *plcml_Init, OMX_U16 arr[]);
    984 
    985 
    986 /* ===========================================================  */
    987 /**
    988  *  WMADEC_GetBufferDirection() Returns direction of pBufHeader
    989  *
    990  *  @param pBufHeader        Buffer header
    991  *
    992  *  @param eDir              Buffer direction
    993  *
    994  *  @param pComponentPrivate Component private data
    995  *
    996  *  @return OMX_ErrorNone = Successful
    997  *          Other error code = fail
    998  */
    999 /*================================================================== */
   1000 OMX_ERRORTYPE WMADECGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir);
   1001 
   1002 
   1003 /* ===========================================================  */
   1004 /**
   1005  *  WMADECHandleCommand()  Handles commands sent via SendCommand()
   1006  *
   1007  *  @param pComponentPrivate Component private data
   1008  *
   1009  *  @return OMX_ErrorNone = Successful
   1010  *          Other error code = fail
   1011  *  @return OMX_ErrorNone = Successful
   1012  *          Other error code = fail
   1013  */
   1014 /*================================================================== */
   1015 OMX_U32 WMADECHandleCommand (WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1016 
   1017 /* ===========================================================  */
   1018 /**
   1019  *  WMADECFreeLCMLHandle()  Frees the handle to the LCML
   1020  *
   1021  *  @param pComponentPrivate Component private data
   1022  *
   1023  *  @return OMX_ErrorNone = Successful
   1024  *          Other error code = fail
   1025  *  @return OMX_ErrorNone = Successful
   1026  *          Other error code = fail
   1027  */
   1028 /*================================================================== */
   1029 OMX_ERRORTYPE WMADECFreeLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1030 
   1031 /* ===========================================================  */
   1032 /**
   1033  *  WMADECHandleDataBuf_FromApp()  Handles data buffers received
   1034  * from the IL Client
   1035  *
   1036  *  @param pComponentPrivate Component private data
   1037  *
   1038  *  @return OMX_ErrorNone = Successful
   1039  *          Other error code = fail
   1040  *  @return OMX_ErrorNone = Successful
   1041  *          Other error code = fail
   1042  */
   1043 /*================================================================== */
   1044 OMX_ERRORTYPE WMADECHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
   1045                                           WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1046 
   1047 
   1048 /* ===========================================================  */
   1049 /**
   1050  *  WMADECHandleDataBuf_FromLCML()  Handles data buffers received
   1051  * from LCML
   1052  *
   1053  *  @param pComponentPrivate Component private data
   1054  *
   1055  *  @return OMX_ErrorNone = Successful
   1056  *          Other error code = fail
   1057  *  @return OMX_ErrorNone = Successful
   1058  *          Other error code = fail
   1059  */
   1060 /*================================================================== */
   1061 OMX_ERRORTYPE WMADECHandleDataBuf_FromLCML(WMADEC_COMPONENT_PRIVATE* pComponentPrivate,
   1062                                            LCML_WMADEC_BUFHEADERTYPE* msgBuffer);
   1063 
   1064 
   1065 /* ===========================================================  */
   1066 /**
   1067  *  WMADEC_FreeLCMLHandle()  Frees the handle to the LCML
   1068  *
   1069  *
   1070  *  @return OMX_ErrorNone = Successful
   1071  *          Other error code = fail
   1072  */
   1073 /*================================================================== */
   1074 OMX_HANDLETYPE WMADECGetLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1075 
   1076 /* ===========================================================  */
   1077 /**
   1078  *  WMADEC_CleanupInitParams()  Starts component thread
   1079  *
   1080  *  @param pComponent        OMX Handle
   1081  *
   1082  *  @return OMX_ErrorNone = Successful
   1083  *          Other error code = fail
   1084  */
   1085 /*================================================================== */
   1086 OMX_ERRORTYPE WMADEC_CleanupInitParams(OMX_HANDLETYPE pComponent);
   1087 
   1088 /* ===========================================================  */
   1089 /**
   1090  *  WMADEC_SetPending()  Called when the component queues a buffer
   1091  * to the LCML
   1092  *
   1093  *  @param pComponentPrivate     Component private data
   1094  *
   1095  *  @param pBufHdr               Buffer header
   1096  *
   1097  *  @param eDir                  Direction of the buffer
   1098  *
   1099  *  @return None
   1100  */
   1101 /*================================================================== */
   1102 void WMADEC_SetPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
   1103                        OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
   1104 
   1105 /* ===========================================================  */
   1106 /**
   1107  *  WMADEC_ClearPending()  Called when a buffer is returned
   1108  * from the LCML
   1109  *
   1110  *  @param pComponentPrivate     Component private data
   1111  *
   1112  *  @param pBufHdr               Buffer header
   1113  *
   1114  *  @param eDir                  Direction of the buffer
   1115  *
   1116  *  @return None
   1117  */
   1118 /*================================================================== */
   1119 void WMADEC_ClearPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
   1120                          OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) ;
   1121 
   1122 /* ===========================================================  */
   1123 /**
   1124  *  WMADEC_CommandToIdle()  Called when the component is commanded
   1125  * to idle
   1126  *
   1127  *  @param pComponentPrivate     Component private data
   1128  *
   1129  *  @return OMX_ErrorNone = Successful
   1130  *          Other error code = fail
   1131  */
   1132 /*================================================================== */
   1133 OMX_ERRORTYPE WMADEC_CommandToIdle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1134 
   1135 /* ===========================================================  */
   1136 /**
   1137  *  WMADEC_CommandToIdle()  Called when the component is commanded
   1138  * to idle
   1139  *
   1140  *  @param pComponentPrivate     Component private data
   1141  *
   1142  *  @return OMX_ErrorNone = Successful
   1143  *          Other error code = fail
   1144  */
   1145 /*================================================================== */
   1146 OMX_ERRORTYPE WMADEC_CommandToLoaded(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1147 
   1148 /* ===========================================================  */
   1149 /**
   1150  *  WMADEC_CommandToExecuting()  Called when the component is commanded
   1151  * to executing
   1152  *
   1153  *  @param pComponentPrivate     Component private data
   1154  *
   1155  *  @return OMX_ErrorNone = Successful
   1156  *          Other error code = fail
   1157  */
   1158 /*================================================================== */
   1159 OMX_ERRORTYPE WMADEC_CommandToExecuting(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1160 
   1161 /* ===========================================================  */
   1162 /**
   1163  *  WMADEC_CommandToPause()  Called when the component is commanded
   1164  * to paused
   1165  *
   1166  *  @param pComponentPrivate     Component private data
   1167  *
   1168  *  @return OMX_ErrorNone = Successful
   1169  *          Other error code = fail
   1170  */
   1171 /*================================================================== */
   1172 OMX_ERRORTYPE WMADEC_CommandToPause(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1173 
   1174 /* ===========================================================  */
   1175 /**
   1176  *  WMADEC_CommandToWaitForResources()  Called when the component is commanded
   1177  * to WaitForResources
   1178  *
   1179  *  @param pComponentPrivate     Component private data
   1180  *
   1181  *  @return OMX_ErrorNone = Successful
   1182  *          Other error code = fail
   1183  */
   1184 /*================================================================== */
   1185 OMX_ERRORTYPE WMADEC_CommandToWaitForResources(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1186 
   1187 /* ===========================================================  */
   1188 /**
   1189  *  WMADEC_IsPending()
   1190  *
   1191  *
   1192  *  @param pComponentPrivate     Component private data
   1193  *
   1194  *  @return OMX_ErrorNone = Successful
   1195  *          Other error code = fail
   1196  */
   1197 /*================================================================== */
   1198 OMX_U32 WMADEC_IsPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
   1199 
   1200 /* ===========================================================  */
   1201 /**
   1202  *  WMADEC_Fill_LCMLInitParamsEx()  Fills the parameters needed
   1203  * to initialize the LCML without recreating the socket node
   1204  *
   1205  *  @param pComponent            OMX Handle
   1206  *
   1207  *  @return None
   1208  */
   1209 
   1210 /*================================================================== */
   1211 OMX_ERRORTYPE WMADECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport);
   1212 
   1213 /* ===========================================================  */
   1214 /**
   1215  *  WMADEC_IsValid() Returns whether a buffer is valid
   1216  *
   1217  *
   1218  *  @param pComponentPrivate     Component private data
   1219  *
   1220  *  @param pBuffer               Data buffer
   1221  *
   1222  *  @param eDir                  Buffer direction
   1223  *
   1224  *  @return OMX_True = Valid
   1225  *          OMX_False= Invalid
   1226  */
   1227 /*================================================================== */
   1228 OMX_U32 WMADEC_IsValid(WMADEC_COMPONENT_PRIVATE *pComponentPrivate,
   1229                        OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ;
   1230 /* ===========================================================  */
   1231 /**
   1232  *  WMADEC_TransitionToIdle() Transitions component to idle
   1233  *
   1234  *
   1235  *  @param pComponentPrivate     Component private data
   1236  *
   1237  *  @return OMX_ErrorNone = No error
   1238  *          OMX Error code = Error
   1239  */
   1240 /*================================================================== */
   1241 OMX_ERRORTYPE WMADEC_TransitionToIdle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate);
   1242 /* ===========================================================  */
   1243 /**
   1244  *  WMADEC_ComponentThread()  Component thread
   1245  *
   1246  *  @param pThreadData		Thread data
   1247  *
   1248  * @cbData		CallBack for ResourceManagerProxy
   1249  *  @return None
   1250  *
   1251  */
   1252 /*================================================================== */
   1253 void* WMADEC_ComponentThread (void* pThreadData);
   1254 
   1255 
   1256 /* ======================================================================= */
   1257 /** OMX_WMADEC_INDEXAUDIOTYPE  Defines the custom configuration settings
   1258  *                              for the component
   1259  *pHeaderInfo
   1260  *  @param  OMX_IndexCustomWMADECModeDasfConfig      Sets the DASF mode
   1261  *
   1262  *
   1263  */
   1264 /*  ==================================================================== */
   1265 typedef enum OMX_WMADEC_INDEXAUDIOTYPE {
   1266     OMX_IndexCustomWMADECModeDasfConfig = 0xFF000001,
   1267     OMX_IndexCustomWMADECHeaderInfoConfig,
   1268     OMX_IndexCustomWmaDecLowLatencyConfig,
   1269     OMX_IndexCustomWmaDecStreamIDConfig,
   1270     OMX_IndexCustomWmaDecDataPath,
   1271     OMX_IndexCustomDebug
   1272 }OMX_WMADEC_INDEXAUDIOTYPE;
   1273 
   1274 
   1275 /*  =========================================================================*/
   1276 /*  func    GetBits                                                          */
   1277 /*                                                                           */
   1278 /*  desc    Gets aBits number of bits from position aPosition of one buffer  */
   1279 /*            and returns the value in a TUint value.                        */
   1280 /*  =========================================================================*/
   1281 OMX_U32 WMADEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition);
   1282 
   1283 /*  =========================================================================*/
   1284 /*  func    WMADEC_Parser                                                    */
   1285 /*                                                                           */
   1286 /*  desc    Gets the info from the Buffer to build a RCA header              */
   1287 /*            and returns the RCA Header filled with the data.               */
   1288 /*@return OMX_ErrorNone = No error                                           */
   1289 /*          OMX Error code = Error                                           */
   1290 /*  =========================================================================*/
   1291 OMX_ERRORTYPE WMADEC_Parser(OMX_U8* pBuffer, RCA_HEADER *pStreamData, struct OMX_TI_Debug dbg);
   1292 
   1293 /*  =========================================================================*/
   1294 /*  func    WMADEC_HandleUSNError                                                                                    */
   1295 /*                                                                                                                                              */
   1296 /*  desc    Handles error messages returned by the dsp                                                        */
   1297 /*                                                                                                                                              */
   1298 /*@return n/a                                                                                                                           */
   1299 /*                                                                                                                                              */
   1300 /*  =========================================================================*/
   1301 void WMADEC_HandleUSNError (WMADEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg);
   1302 
   1303 #ifdef RESOURCE_MANAGER_ENABLED
   1304 void WMAD_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
   1305 #endif
   1306 
   1307 #endif
   1308 
   1309