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_G711Dec_Utils.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 header file with the utils necesary to for the G711_DEC component.
34 * in its code.
35 *
36 * @path $(CSLPATH)\
37 *
38 * @rev 0.1
39 */
40/* --------------------------------------------------------------------------- */
41
42#ifndef OMX_G711DEC_UTILS__H
43#define OMX_G711DEC_UTILS__H
44
45#include "LCML_DspCodec.h"
46#include <OMX_Component.h>
47#include <pthread.h>
48
49#ifdef RESOURCE_MANAGER_ENABLED
50#include <ResourceManagerProxyAPI.h>
51#endif
52
53
54/* ======================================================================= */
55/**
56 * @def    G711DEC_MAJOR_VER              Define value for "major" version
57 */
58/* ======================================================================= */
59#define  G711DEC_MAJOR_VER 0xF1
60
61/* ======================================================================= */
62/**
63 * @def    G711DEC_MINOR_VER              Define value for "minor" version
64 */
65/* ======================================================================= */
66#define  G711DEC_MINOR_VER 0xF2
67
68/* ======================================================================= */
69/**
70 * @def    NOT_USED                            Define a not used value
71 */
72/* ======================================================================= */
73#define NOT_USED 10
74
75/* ======================================================================= */
76/**
77 * @def    NORMAL_BUFFER                       Define a normal buffer value
78 */
79/* ======================================================================= */
80#define NORMAL_BUFFER 0
81
82/* ======================================================================= */
83/**
84 * @def    OMX_G711DEC_DEFAULT_SEGMENT        Define the default segment
85 */
86/* ======================================================================= */
87#define OMX_G711DEC_DEFAULT_SEGMENT (0)
88
89/* ======================================================================= */
90/**
91 * @def    OMX_G711DEC_SN_TIMEOUT            Define a value for SN Timeout
92 */
93/* ======================================================================= */
94#define OMX_G711DEC_SN_TIMEOUT (-1)
95
96/* ======================================================================= */
97/**
98 * @def    OMX_G711DEC_SN_PRIORITY           Define a value for SN Priority
99 */
100/* ======================================================================= */
101#define OMX_G711DEC_SN_PRIORITY (10)
102
103/* ======================================================================= */
104/**
105 * @def    OMX_G711DEC_CPU   TBD, 50MHz for the moment
106 */
107/* ======================================================================= */
108#define OMX_G711DEC_CPU (50)
109
110/* ======================================================================= */
111/**
112 * @def    G711DEC_USN_DLL_NAME             Path & Name of USN DLL to be used
113 *                                           at initialization
114 */
115/* ======================================================================= */
116#ifdef UNDER_CE
117#define G711DEC_USN_DLL_NAME "\\windows\\usn.dll64P"
118#else
119#define G711DEC_USN_DLL_NAME "usn.dll64P"
120#endif
121
122/* ======================================================================= */
123/**
124 * @def    G711DEC_USN_DLL_NAME             Path & Name of DLL to be useda
125 *                                           at initialization
126 */
127/* ======================================================================= */
128#ifdef UNDER_CE
129#define G711DEC_DLL_NAME "\\windows\\g711dec_sn.dll64P"
130#else
131#define G711DEC_DLL_NAME "g711dec_sn.dll64P"
132#endif
133
134
135
136/* ======================================================================= */
137/**
138 * @def    EXTRA_BUFFBYTES                Num of Extra Bytes to be allocated
139 */
140/* ======================================================================= */
141#define EXTRA_BUFFBYTES (256)
142
143/* ======================================================================= */
144/**
145 * @def    G711D_TIMEOUT   Default timeout used to come out of blocking calls
146 */
147/* ======================================================================= */
148#define G711D_TIMEOUT (1000) /* millisecs */
149
150/* ======================================================================= */
151/**
152 * @def    NUM_G711DEC_INPUT_BUFFERS              Number of Input Buffers
153 */
154/* ======================================================================= */
155#define NUM_G711DEC_INPUT_BUFFERS 1
156
157/* ======================================================================= */
158/**
159 * @def    NUM_G711DEC_OUTPUT_BUFFERS              Number of Output Buffers
160 */
161/* ======================================================================= */
162#define NUM_G711DEC_OUTPUT_BUFFERS 1
163
164/* ======================================================================= */
165/**
166 * @def    NUM_G711DEC_OUTPUT_BUFFERS_DASF         Number of Output Buffers
167 *                                                  on DASF mode
168 */
169/* ======================================================================= */
170#define NUM_G711DEC_OUTPUT_BUFFERS_DASF 2
171
172/* ======================================================================= */
173/**
174 * @def    OUTPUT_G711DEC_BUFFER_SIZE           Standart Output Buffer Size
175 */
176/* ======================================================================= */
177#define OUTPUT_G711DEC_BUFFER_SIZE 160
178
179/* ======================================================================= */
180/**
181 * @def    INPUT_G711DEC_BUFFER_SIZE             Standart Input Buffer Size
182 *
183 */
184/* ======================================================================= */
185#define INPUT_G711DEC_BUFFER_SIZE 80
186/* ========================================================================== */
187/**
188 * @def    RTP_Framesize                          Size in Bytes of determined
189 *                                               frame. Not change it
190 */
191/* ========================================================================== */
192#define RTP_Framesize 80
193/* ========================================================================== */
194/**
195 * @def    STD_GSMFRDEC_BUF_SIZE                  Standart Input Buffer Size
196 */
197/* ========================================================================== */
198#define STD_G711DEC_BUF_SIZE 80
199
200/* ======================================================================= */
201/**
202 * @def    STREAM_COUNT                         Stream Count value for
203 *                                              LCML init.
204 */
205/* ======================================================================= */
206#define STREAM_COUNT 2
207
208/* ======================================================================= */
209/**
210 * @def    INPUT_STREAM_ID                      Input Stream ID
211 */
212/* ======================================================================= */
213#define INPUT_STREAM_ID 0
214
215/* ======================================================================= */
216/**
217 * @def    MAX_NUM_OF_BUFS                      Max Num of Bufs Allowed
218 */
219/* ======================================================================= */
220#define MAX_NUM_OF_BUFS 10
221/*========================================================================*/
222/** DEBUG PRINT's MACROS
223 *@Memory check; printf's; component debug                                                           */
224/*========================================================================*/
225#undef G711DEC_DEBUG
226#undef G711DEC_PRINT
227#undef G711DEC_MEMCHECK
228/*========================================================================*/
229#define EXIT_COMPONENT_THRD  10
230void* ComponentThread (void* pThreadData);
231/*======================================================================*/
232#ifndef UNDER_CE
233#ifdef  G711DEC_DEBUG
234#define G711DEC_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
235#else
236#define G711DEC_DPRINT(...)
237#endif
238
239#ifdef  G711DEC_MEMCHECK
240#define G711DEC_MEMPRINT(...)    fprintf(stderr,__VA_ARGS__)
241#else
242#define G711DEC_MEMPRINT(...)
243#endif
244
245
246#ifdef  G711DEC_DEBUG_MCP
247#define G711DEC_MCP_DPRINT(...)    fprintf(stderr,__VA_ARGS__)
248#else
249#define G711DEC_MCP_DPRINT(...)
250#endif
251
252#else /*UNDER_CE*/
253#ifdef  G711DEC_DEBUG
254#define G711DEC_DPRINT(STR, ARG...) printf()
255#else
256#endif
257
258#ifdef G711DEC_MEMCHECK
259#define G711DEC_MEMPRINT(STR, ARG...) printf()
260#else
261#endif
262#ifdef UNDER_CE
263
264#ifdef DEBUG
265#define G711DEC_DPRINT   printf
266#define G711DEC_MEMPRINT   printf
267#else
268#define G711DEC_DPRINT
269#define G711DEC_MEMPRINT
270#endif
271
272#endif  /*UNDER_CE*/
273
274#endif
275/**************************************************************/
276#ifdef  G711DEC_PRINT
277#define G711DEC_PRINT(...)    printf(stderr,__VA_ARGS__)
278#else
279#define G711DEC_PRINT(...)
280#endif
281
282/* ======================================================================= */
283/**
284 * @def    WMADEC_MEMDEBUG   Enable memory leaks debuf info
285 */
286/* ======================================================================= */
287#undef G711DEC_MEMDEBUG
288
289/* ======================================================================= */
290/**
291 * @def  CACHE_ALIGNMENT                           Buffer Cache Alignment
292 */
293/* ======================================================================= */
294#define CACHE_ALIGNMENT 128
295
296/* ======================================================================= */
297/**
298 * @def    NUM_OF_PORTS                       Number of Comunication Port
299 */
300/* ======================================================================= */
301#define NUM_OF_PORTS 2
302
303
304/* ======================================================================= */
305/**
306 *  M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES
307 */
308/* ======================================================================= */
309
310#define OMX_NBCONF_INIT_STRUCT(_s_, _name_)     \
311    memset((_s_), 0x0, sizeof(_name_));         \
312    (_s_)->nSize = sizeof(_name_);              \
313    (_s_)->nVersion.s.nVersionMajor = 0x1;      \
314    (_s_)->nVersion.s.nVersionMinor = 0x0;      \
315    (_s_)->nVersion.s.nRevision = 0x0;          \
316    (_s_)->nVersion.s.nStep = 0x0
317
318#define G711D_OMX_MALLOC(_pStruct_, _sName_)                        \
319    _pStruct_ = (_sName_*)newmalloc(sizeof(_sName_));               \
320    if(_pStruct_ == NULL){                                          \
321        printf("***********************************\n");            \
322        printf("%d :: Malloc Failed\n",__LINE__);                   \
323        printf("***********************************\n");            \
324        eError = OMX_ErrorInsufficientResources;                    \
325        goto EXIT;                                                  \
326    }                                                               \
327    memset(_pStruct_,0,sizeof(_sName_));                            \
328    G711DEC_MEMPRINT("%d :: Malloced = %p\n",__LINE__,_pStruct_);
329
330#define G711D_OMX_MALLOC_SIZE(_ptr_, _size_,_name_)             \
331    _ptr_ = (_name_ *)newmalloc(_size_);                        \
332    if(_ptr_ == NULL){                                          \
333        printf("***********************************\n");        \
334        printf("%d :: Malloc Failed\n",__LINE__);               \
335        printf("***********************************\n");        \
336        eError = OMX_ErrorInsufficientResources;                \
337        goto EXIT;                                              \
338    }                                                           \
339    memset(_ptr_,0,_size_);                                     \
340    G711DEC_MEMPRINT("%d :: Malloced = %p\n",__LINE__,_ptr_);
341
342#define OMX_G711DECMEMFREE_STRUCT(_pStruct_)                    \
343    if(_pStruct_ != NULL){                                      \
344    G711DEC_MEMPRINT("%d :: [FREE] %p\n",__LINE__,_pStruct_);   \
345        newfree(_pStruct_);                                     \
346        _pStruct_ = NULL;                                       \
347    }
348
349#define OMX_NBCLOSE_PIPE(_pStruct_,err)                         \
350    G711DEC_DPRINT("%d :: CLOSING PIPE \n",__LINE__);           \
351    err = close (_pStruct_);                                    \
352    if(0 != err && OMX_ErrorNone == eError){                    \
353        eError = OMX_ErrorHardware;                             \
354        printf("%d :: Error while closing pipe\n",__LINE__);    \
355        goto EXIT;                                              \
356    }
357
358/* ======================================================================= */
359/** G711DEC_COMP_PORT_TYPE  Port Type
360 *
361 *  @param  G711DEC_INPUT_PORT                   Port Type Input
362 *
363 *  @param  G711DEC_OUTPUT_PORT                  Port Type Output
364 *
365 */
366/*  ==================================================================== */
367typedef enum G711DEC_COMP_PORT_TYPE {
368    G711DEC_INPUT_PORT = 0,
369    G711DEC_OUTPUT_PORT
370}G711DEC_COMP_PORT_TYPE;
371
372/* ======================================================================= */
373/** G711DEC_StreamType  StreamType
374 *
375 *  @param  G711DEC_DMM                  Stream Type DMM
376 *
377 *  @param  G711DEC_INSTRM               Stream Type Input
378 *
379 *  @param  G711DEC_OUTSTRM             Stream Type Output
380 */
381/*  ==================================================================== */
382enum G711DEC_StreamType
383    {
384        G711DEC_DMM,
385        G711DEC_INSTRM,
386        G711DEC_OUTSTRM
387    };
388
389/* ======================================================================= */
390/** G711DEC_BUFFER_Dir  Direction of the Buffer
391 *
392 *  @param  G711DEC_DIRECTION_INPUT              Direction Input
393 *
394 *  @param  G711DEC_DIRECTION_INPUT              Direction Output
395 */
396/*  ==================================================================== */
397typedef enum {
398    G711DEC_DIRECTION_INPUT,
399    G711DEC_DIRECTION_OUTPUT
400}G711DEC_BUFFER_Dir;
401
402
403/* =================================================================================== */
404/**
405 *
406 */
407/* ================================================================================== */
408typedef struct G711DEC_FTYPES{
409    OMX_S16     FrameSizeType;
410    OMX_S16     NmuNLvl;
411    OMX_S16     NoiseLp;
412    OMX_S16     dBmNoise;
413    OMX_S16     plc;
414}G711DEC_FTYPES;
415/* =================================================================================== */
416/**
417 * Socket node input parameters.
418 */
419/* ================================================================================== */
420typedef struct G711DEC_AudioCodecParams
421{
422    unsigned long iSamplingRate;
423    unsigned long iStrmId;
424    unsigned short iAudioFormat;
425}G711DEC_AudioCodecParams;
426
427/* =================================================================================== */
428/**
429 * Socket node alg parameters..
430 */
431/* ================================================================================== */
432typedef struct {
433    unsigned long usEndOfFile;
434    unsigned long usFrameLost;
435}G711DEC_UAlgInBufParamStruct;
436
437/* ========================================================================== */
438/**
439 * Socket node alg parameters..
440 * frameType @ Type of packaging per frame number
441 * usLastFrame @ End of decoding
442 */
443/* ========================================================================== */
444typedef struct G711DEC_FrameStruct{
445    unsigned long   frameType; /* 0: voice frame (80 bytes), 1: SID frame (22 bytes), 2: No Data (0 bytes), 3: Frame lost */
446    unsigned long   usLastFrame;
447} G711DEC_FrameStruct;
448
449typedef struct G711DEC_ParamStruct{
450    unsigned long int usNbFrames;
451    G711DEC_FrameStruct *pParamElem;
452} G711DEC_ParamStruct;
453
454/* =================================================================================== */
455/**
456 * LCML_G711DEC_BUFHEADERTYPE
457 */
458/* ================================================================================== */
459typedef struct LCML_G711DEC_BUFHEADERTYPE {
460    G711DEC_BUFFER_Dir eDir;
461    OMX_BUFFERHEADERTYPE* buffer;
462    G711DEC_UAlgInBufParamStruct *pIpParam;
463    G711DEC_FrameStruct *pFrameParam;
464    G711DEC_ParamStruct *pBufferParam;
465    DMM_BUFFER_OBJ* pDmmBuf;
466}LCML_G711DEC_BUFHEADERTYPE;
467
468#ifndef UNDER_CE
469
470OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
471
472#else
473/* =================================================================================== */
474/**
475 *   OMX_EXPORT                                           WinCE Implicit Export Syntax
476 */
477/* ================================================================================== */
478#define OMX_EXPORT __declspec(dllexport)
479
480OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
481
482#endif
483
484OMX_ERRORTYPE G711DEC_StartComponentThread(OMX_HANDLETYPE pHandle);
485OMX_ERRORTYPE G711DEC_StopComponentThread(OMX_HANDLETYPE pHandle);
486OMX_ERRORTYPE G711DEC_FreeCompResources(OMX_HANDLETYPE pComponent);
487
488typedef struct _G711DEC_BUFFERLIST G711DEC_BUFFERLIST;
489
490/* =================================================================================== */
491/**
492 * Structure for buffer list
493 */
494/* ================================================================================== */
495struct _G711DEC_BUFFERLIST{
496    OMX_BUFFERHEADERTYPE *pBufHdr[MAX_NUM_OF_BUFS]; /* records buffer header send by client */
497    OMX_U32 bufferOwner[MAX_NUM_OF_BUFS];
498    OMX_U32 bBufferPending[MAX_NUM_OF_BUFS];
499    OMX_U32 numBuffers;
500};
501
502/* =================================================================================== */
503/**
504 * G711ENC_PORT_TYPE Structure for PortFormat details
505 */
506/* =================================================================================== */
507typedef struct G711DEC_PORT_TYPE {
508    OMX_HANDLETYPE hTunnelComponent;
509    OMX_U32 nTunnelPort;
510    OMX_BUFFERSUPPLIERTYPE eSupplierSetting;
511    OMX_U8 nBufferCnt;
512    OMX_AUDIO_PARAM_PORTFORMATTYPE* pPortFormat;
513} G711DEC_PORT_TYPE;
514
515OMX_ERRORTYPE OMX_DmmMap(DSP_HPROCESSOR ProcHandle, int size,
516                         void* pArmPtr, DMM_BUFFER_OBJ* pDmmBuf);
517OMX_ERRORTYPE OMX_DmmUnMap(DSP_HPROCESSOR ProcHandle, void* pMapPtr,
518                           void* pResPtr);
519/* =================================================================================== */
520/**
521 * Component private data
522 */
523/* ================================================================================== */
524typedef struct G711DEC_COMPONENT_PRIVATE
525{
526#ifdef UNDER_CE
527    OMX_BUFFERHEADERTYPE* pBufHeader[NUM_OF_PORTS];
528#endif
529
530    /** Structure of callback pointers */
531    OMX_CALLBACKTYPE cbInfo;
532
533    G711DEC_PORT_TYPE *pCompPort[NUM_OF_PORTS];
534
535    /** Handle for use with async callbacks */
536    OMX_PORT_PARAM_TYPE sPortParam;
537
538    /** Input port parameters */
539    OMX_AUDIO_PARAM_PORTFORMATTYPE sInPortFormat;
540
541    /** Output port parameters */
542    OMX_AUDIO_PARAM_PORTFORMATTYPE sOutPortFormat;
543
544    /** This will contain info like how many buffers
545        are there for input/output ports, their size etc, but not
546        BUFFERHEADERTYPE POINTERS. */
547    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[NUM_OF_PORTS];
548
549    /** G711 Component Parameters */
550    OMX_AUDIO_PARAM_PCMMODETYPE* g711Params[NUM_OF_PORTS];
551
552    /** This is component handle */
553    OMX_COMPONENTTYPE* pHandle;
554
555    /** Current state of this component */
556    OMX_STATETYPE curState;
557
558    /** The component thread handle */
559    pthread_t ComponentThread;
560
561    /** The pipes for sending buffers to the thread */
562    int dataPipe[2];
563
564    /** The pipes for sending buffers to the thread */
565    int cmdPipe[2];
566
567    /** The pipes for sending buffers to the thread */
568    int cmdDataPipe[2];
569
570    /** Set to indicate component is stopping */
571    OMX_U32 bIsStopping;
572
573    /** Flag set when the EOS marker is sent */
574    OMX_U32 bIsEOFSent;
575
576    /** Count of number of buffers outstanding with bridge */
577    OMX_U32 lcml_nIpBuf;
578
579    /** Count of number of buffers outstanding with bridge */
580    OMX_U32 lcml_nOpBuf;
581
582    /** Number of Buffers In the Application*/
583    OMX_U32 app_nBuf;
584
585    /** LCML Number Input Buffer Received*/
586    OMX_U32 lcml_nCntIp;
587
588    /** LCML Number Output Buffer Received*/
589    OMX_U32 lcml_nCntOpReceived;
590
591    /** Num Reclaimed OutPut Buff    */
592    OMX_U32 num_Reclaimed_Op_Buff;
593
594    /** Num Sent Input Buff   */
595    OMX_U32 num_Sent_Ip_Buff;
596
597    /** Num Sent Output Buff Issued   */
598    OMX_U32 num_Op_Issued;
599
600    /** LCML Handle */
601    OMX_HANDLETYPE pLcmlHandle;
602
603    /** LCML Buffer Header */
604    LCML_G711DEC_BUFHEADERTYPE *pLcmlBufHeader[2];
605
606    /** Flag for G711 mode */
607    OMX_S16 iG711Mode;
608
609    /** Flag for DASF mode */
610    OMX_S16 dasfmode;
611
612    /** Flag for ACDN mode */
613    OMX_S16 acdnmode;
614
615    /** Flag for frame size type mode */
616    OMX_S16 fsizemode;
617    /** Flag for fram type mode */
618    OMX_S16 ftype;
619    /** Flag for Noise Level NMU */
620    OMX_S16 nmulevel;
621    /** Flag for Noise LP  */
622    OMX_S16 noiselp;
623    /** Flag for Noise level in dBm */
624    OMX_S16 dbmnoise;
625    /** Flag for Noise level in dBm */
626    OMX_S16 packetlostc;
627
628    /** Writing pipe Used for DSP_RENDERING_ON */
629    int fdwrite;
630
631    /** Reading pipe Used for DSP_RENDERING_ON */
632    int fdread;
633
634    /* ID stream ID*/
635    OMX_U32 streamID;
636
637    /* Flag for Port Defs Allocated*/
638    OMX_U32 bPortDefsAllocated;
639
640    /* Flag for Component Thread Started*/
641    OMX_U32 bCompThreadStarted;
642
643    /** Mark data */
644    OMX_PTR pMarkData;
645
646    /** Mark buffer */
647    OMX_MARKTYPE *pMarkBuf;
648
649    /** Mark target component */
650    OMX_HANDLETYPE hMarkTargetComponent;
651
652    /** Flag set when buffer should not be queued to the DSP */
653    OMX_U32 bBypassDSP;
654
655    /** Input buffer list */
656    G711DEC_BUFFERLIST *pInputBufferList;
657
658    /** Output buffer list */
659    G711DEC_BUFFERLIST *pOutputBufferList;
660
661    /** LCML stream attributes */
662    LCML_STRMATTR *strmAttr;
663
664    /** Component version */
665    OMX_U32 nVersion;
666
667    /** Play Complete Flag */
668    OMX_U32 bPlayCompleteFlag;
669
670    /** Number of Bytes holding to be sent*/
671    OMX_U32 nHoldLength;
672
673    /** Pointer to the data holding to be sent*/
674    OMX_U8* pHoldBuffer;
675
676    /** Flag set when LCML handle is opened */
677    OMX_S16 bLcmlHandleOpened;
678
679    /** Keeps track of the number of nFillThisBufferCount() calls */
680    OMX_U32 nFillThisBufferCount;
681
682    /** Keeps track of the number of nFillBufferDoneCount() calls */
683    OMX_U32 nFillBufferDoneCount;
684
685    /** Keeps track of the number of nEmptyThisBufferCount() calls */
686    OMX_U32 nEmptyThisBufferCount;
687
688    /** Keeps track of the number of nEmptyBufferDoneCount() calls */
689    OMX_U32 nEmptyBufferDoneCount;
690
691    /** Parameters for the Audio Codec */
692    G711DEC_AudioCodecParams *pParams;
693
694    /** Flag for Init Params Initialized */
695    OMX_U32 bInitParamsInitialized;
696
697    /** Flag for bIdleCommandPending */
698    OMX_U32 bIdleCommandPending;
699
700    /** Array of Input Buffers that are pending to sent due State = Idle */
701    OMX_BUFFERHEADERTYPE *pInputBufHdrPending[MAX_NUM_OF_BUFS];
702
703    /** Number of Input Buffers that are pending to sent due State = Idle */
704    OMX_U32 nNumInputBufPending;
705
706    /** Array of Output Buffers that are pending to sent due State = Idle */
707    OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[MAX_NUM_OF_BUFS];
708
709    /** Number of Output Buffers that are pending to sent due State = Idle */
710    OMX_U32 nNumOutputBufPending;
711
712    /** Flag for Reenabling Ports*/
713    OMX_U32 bJustReenabled;
714
715    /** Flag for Invalid Frame Count*/
716    OMX_U32 nInvalidFrameCount;
717
718    /** Flag for Writes While Paused   */
719    OMX_U32 nDataWritesWhilePaused;
720
721    /** Flag for bDisableCommandPending*/
722    OMX_U32 bDisableCommandPending;
723
724    /** Flag for bDisableCommandParam*/
725    OMX_U32 bDisableCommandParam;
726
727    /** Flag for Enabling the port*/
728    OMX_U32 bEnableCommandPending;
729
730    /** Flag for Enabling the port*/
731    OMX_U32 bEnableCommandParam;
732
733    /** Flag to set when socket node stop callback should not transition
734        component to OMX_StateIdle */
735    OMX_U32 bNoIdleOnStop;
736
737    /** Flag set when socket node is stopped */
738    OMX_U32 bDspStoppedWhileExecuting;
739
740    /** Number of outstanding FillBufferDone() calls */
741    OMX_S32 nOutStandingFillDones;
742
743    /** Stop Codec Command Sent Flag*/
744    OMX_U8 bStopSent;
745
746    OMX_BOOL bLoadedCommandPending;
747
748    OMX_PARAM_COMPONENTROLETYPE componentRole;
749
750    /* Device string */
751    OMX_STRING* sDeviceString;
752    /* Removing sleep() calls. Definition. */
753#ifndef UNDER_CE
754    pthread_mutex_t AlloBuf_mutex;
755    pthread_cond_t AlloBuf_threshold;
756    OMX_U8 AlloBuf_waitingsignal;
757
758    pthread_mutex_t InLoaded_mutex;
759    pthread_cond_t InLoaded_threshold;
760    OMX_U8 InLoaded_readytoidle;
761
762    pthread_mutex_t InIdle_mutex;
763    pthread_cond_t InIdle_threshold;
764    OMX_U8 InIdle_goingtoloaded;
765#else
766    OMX_Event AlloBuf_event;
767    OMX_U8 AlloBuf_waitingsignal;
768
769    OMX_Event InLoaded_event;
770    OMX_U8 InLoaded_readytoidle;
771
772    OMX_Event InIdle_event;
773    OMX_U8 InIdle_goingtoloaded;
774#endif
775    /**************************/
776    OMX_U8 nUnhandledFillThisBuffers;
777
778    /**Keep buffer tickcount*/
779    OMX_U32 arrBufIndexTick[MAX_NUM_OF_BUFS];
780
781    /** Keep buffer timestamps **/
782    OMX_U32 arrBufIndex[MAX_NUM_OF_BUFS];
783
784    /** Index to arrBufIndex[], used for input buffer timestamps */
785    OMX_U8 IpBufindex;
786
787    /** Index to arrBufIndex[], used for output buffer timestamps */
788    OMX_U8 OpBufindex;
789
790    /** Number of input buffers at runtime **/
791    OMX_U32 nRuntimeInputBuffers;
792
793    /** Pointer to RM callback **/
794#ifdef RESOURCE_MANAGER_ENABLED
795    RMPROXY_CALLBACKTYPE rmproxyCallback;
796#endif
797
798    OMX_BOOL bPreempted;
799
800
801} G711DEC_COMPONENT_PRIVATE;
802
803typedef enum OMX_G711DEC_INDEXAUDIOTYPE {
804    OMX_IndexCustomG711DecModeAcdnConfig = 0xFF000001,
805    OMX_IndexCustomG711DecModeDasfConfig,
806    OMX_IndexCustomG711DecHeaderInfoConfig,
807    OMX_IndexCustomG711DecFrameParams,
808    OMX_IndexCustomG711DecDataPath
809}OMX_G711DEC_INDEXAUDIOTYPE;
810
811#ifdef RESOURCE_MANAGER_ENABLED
812/*========================================================================*/
813/** RESOURCE MANAGER CALLBACK                                                                    */
814/*=======================================================================*/
815void G711DEC_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
816/* ========================================================================*/
817#endif
818
819OMX_ERRORTYPE G711DECGetCorresponding_LCMLHeader(OMX_U8 *pBuffer,
820                                                 OMX_DIRTYPE eDir,
821                                                 LCML_G711DEC_BUFHEADERTYPE **ppLcmlHdr);
822/***********CALLBACK EVENT TO SN**********/
823OMX_ERRORTYPE G711DECLCML_Callback (TUsnCodecEvent event,void * args [10]);
824
825OMX_ERRORTYPE G711DECFill_LCMLInitParams(OMX_HANDLETYPE pHandle,
826                                         LCML_DSP *plcml_Init,OMX_U16 arr[]);
827
828OMX_ERRORTYPE G711DECGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir);
829
830OMX_U32 G711DECHandleCommand (G711DEC_COMPONENT_PRIVATE *pComponentPrivate);
831
832OMX_ERRORTYPE G711DECHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
833                                           G711DEC_COMPONENT_PRIVATE *pComponentPrivate);
834
835OMX_ERRORTYPE G711DECHandleDataBuf_FromLCML(G711DEC_COMPONENT_PRIVATE* pComponentPrivate,
836                                            LCML_G711DEC_BUFHEADERTYPE* msgBuffer);
837
838void  AddHeader(BYTE **pFileBuf);
839void  ResetPtr(BYTE **pFileBuf);
840
841OMX_HANDLETYPE G711DECGetLCMLHandle();
842OMX_ERRORTYPE G711DECFreeLCMLHandle();
843OMX_ERRORTYPE G711DEC_CleanupInitParams(OMX_HANDLETYPE pComponent);
844
845void G711DEC_SetPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
846void G711DEC_ClearPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) ;
847
848OMX_U32 G711DEC_IsPending(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
849OMX_ERRORTYPE G711DECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent);
850OMX_U32 G711DEC_IsValid(G711DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ;
851OMX_ERRORTYPE G711DEC_TransitionToIdle(G711DEC_COMPONENT_PRIVATE *pComponentPrivate);
852
853#endif /* OMX_G711DECODER_H*/
854