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_G722Enc_Utils.h
30 *
31 * This header file contains data and function prototypes for G722 ENCODER OMX
32 *
33 * @path  $(OMAPSW_MPU)\linux\audio\src\openmax_il\g722_enc\inc
34 *
35 * @rev  0.1
36 */
37/* -----------------------------------------------------------------------------
38 *!
39 *! Revision History
40 *! ===================================
41 *! Date         Author(s)            Version  Description
42 *! ---------    -------------------  -------  ---------------------------------
43 *! 08-Mar-2007  A.Donjon             0.1      Code update for G722 ENCODER
44 *!
45 *!
46 * ================================================================================= */
47
48
49#include <OMX_Component.h>
50#include "LCML_DspCodec.h"
51#include "OMX_G722Encoder.h"
52
53#define NEWSENDCOMMAND_MEMORY 123
54/*#endif*/
55
56#include <TIDspOmx.h>
57
58/* ComponentThread constant */
59#define EXIT_COMPONENT_THRD  10
60/* ======================================================================= */
61/**
62 * @def    G722ENC_XXX_VER    Component version
63 */
64/* ======================================================================= */
65#define G722ENC_MAJOR_VER 1
66#define G722ENC_MINOR_VER 1
67
68/* ======================================================================= */
69/**
70 * @def    NOT_USED    Defines a value for "don't care" parameters
71 */
72/* ======================================================================= */
73#define NOT_USED 10
74
75/* ======================================================================= */
76/**
77 * @def    NORMAL_BUFFER    Defines the flag value with all flags turned off
78 */
79/* ======================================================================= */
80#define NORMAL_BUFFER 0
81
82/* ======================================================================= */
83/**
84 * @def    OMX_G722ENC_DEFAULT_SEGMENT    Default segment ID for the LCML
85 */
86/* ======================================================================= */
87#define OMX_G722ENC_DEFAULT_SEGMENT (0)
88
89
90/* ======================================================================= */
91/**
92 * @def    OMX_G722ENC_SN_TIMEOUT    Timeout value for the socket node
93 */
94/* ======================================================================= */
95#define OMX_G722ENC_SN_TIMEOUT (-1)
96
97/* ======================================================================= */
98/**
99 * @def    OMX_G722ENC_SN_PRIORITY   Priority for the socket node
100 */
101/* ======================================================================= */
102#define OMX_G722ENC_SN_PRIORITY (10)
103
104/* ======================================================================= */
105/**
106 * @def    G722ENC_TIMEOUT_MILLISECONDS   Timeout value for the component thread
107 */
108/* ======================================================================= */
109#define G722ENC_TIMEOUT_MILLISECONDS (1000)
110
111/* ======================================================================= */
112/**
113 * @def    G722ENC_CACHE_ALIGN_MALLOC   Value to add to the size needed to
114 *                                     malloc to ensure cache alignment
115 */
116/* ======================================================================= */
117#define G722ENC_CACHE_ALIGN_MALLOC 256
118
119/* ======================================================================= */
120/**
121 * @def    G722ENC_CACHE_ALIGN_OFFSET   Value to add to the pointer returned
122 *                                     by malloc to ensure cache alignment
123 */
124/* ======================================================================= */
125#define G722ENC_CACHE_ALIGN_OFFSET 128
126
127/* ======================================================================= */
128/**
129 * @def    G722ENC_MAX_NUM_OF_BUFS   Maximum number of buffers
130 */
131/* ======================================================================= */
132#define G722ENC_MAX_NUM_OF_BUFS 10
133
134
135/* ======================================================================= */
136/**
137 * @def    USN_DLL_NAME   Path to the USN
138 */
139/* ======================================================================= */
140#ifdef UNDER_CE
141#define USN_DLL_NAME "\\windows\\usn.dll64P"
142#else
143#define USN_DLL_NAME "usn.dll64P"
144#endif
145/* ======================================================================= */
146/**
147 * @def    G722ENC_DLL_NAME   Path to the G722ENC SN
148 */
149/* ======================================================================= */
150#ifdef UNDER_CE
151#define G722ENC_DLL_NAME "\\windows\\g722enc_sn.dll64P"
152#else
153#define G722ENC_DLL_NAME "g722enc_sn.dll64P"
154#endif
155/* ======================================================================= */
156/**
157 * @def    DONT_CARE   Don't care value for the LCML initialization params
158 */
159/* ======================================================================= */
160#define DONT_CARE 0
161
162
163/* ======================================================================= */
164/**
165 * @def    G722ENC_DEBUG   Turns debug messaging on and off
166 */
167/* ======================================================================= */
168#undef G722ENC_DEBUG
169/*#define G722ENC_DEBUG*/
170
171/* ======================================================================= */
172/**
173 * @def    G722ENC_MEMCHECK   Turns memory messaging on and off
174 */
175/* ======================================================================= */
176#undef G722ENC_MEMCHECK     /* try to avoid the time out due to print message */
177
178
179/* ======================================================================= */
180/**
181 * @def    G722ENC_DPRINT   Debug print macro
182 */
183/* ======================================================================= */
184
185#ifndef UNDER_CE /* Linux definitions */
186#ifdef  G722ENC_DEBUG
187#define G722ENC_DPRINT(...)    fprintf(stdout,__VA_ARGS__)
188#else
189#define G722ENC_DPRINT(...)
190#endif
191
192#ifdef  G722ENC_MEMCHECK
193#define G722ENC_MEMPRINT(...)    fprintf(stdout,__VA_ARGS__)
194#else
195#define G722ENC_MEMPRINT(...)
196#endif
197
198#else
199#ifdef  G722ENC_DEBUG
200#define G722ENC_DPRINT(STR, ARG...) printf()
201#else
202#endif
203
204/* ======================================================================= */
205/**
206 * @def    G722ENC_MEMCHECK   Memory print macro
207 */
208/* ======================================================================= */
209#ifdef G722ENC_MEMCHECK
210#define G722ENC_MEMPRINT(STR, ARG...) printf()
211#else
212#endif
213#define G722ENC_DPRINT   printf
214#define G722ENC_MEMPRINT   printf
215
216#endif
217
218#ifdef UNDER_CE
219
220#ifdef DEBUG
221#define G722ENC_DPRINT   printf
222#define G722ENC_MEMPRINT   printf
223
224#else
225#define G722ENC_DPRINT
226#define G722ENC_MEMPRINT
227#endif
228
229#endif
230
231
232/* ======================================================================= */
233/**
234 * @def    G722ENC_NUM_OF_PORTS   Number of ports
235 */
236/* ======================================================================= */
237#define G722ENC_NUM_OF_PORTS 2
238
239/* ======================================================================= */
240/**
241 * @def    G722ENC_NUM_STREAMS   Number of streams
242 */
243/* ======================================================================= */
244#define G722ENC_NUM_STREAMS 2
245
246/* ======================================================================= */
247/**
248 * @def    G722ENC_NUM_INPUT_DASF_BUFFERS   Number of input buffers
249 */
250/* ======================================================================= */
251#define G722ENC_NUM_INPUT_DASF_BUFFERS 2
252
253
254/* ======================================================================= */
255/**
256 * @def    G722ENC_AM_DEFAULT_RATE   Default audio manager rate
257 */
258/* ======================================================================= */
259#define G722ENC_AM_DEFAULT_RATE 48000
260
261/* ======================================================================= */
262/**
263 * @def    G722ENC_SAMPLE_RATE      G722ENC SN sampling frequency
264 */
265/* ======================================================================= */
266#define G722ENC_SAMPLE_RATE 16000
267
268/* ======================================================================= */
269/**
270 *  M A C R O S FOR MALLOC and MEMORY FREE and CLOSING PIPES
271 */
272/* ======================================================================= */
273
274#define OMX_G722CONF_INIT_STRUCT(_s_, _name_)   \
275    memset((_s_), 0x0, sizeof(_name_));         \
276    (_s_)->nSize = sizeof(_name_);              \
277    (_s_)->nVersion.s.nVersionMajor = 0x1;      \
278    (_s_)->nVersion.s.nVersionMinor = 0x1;      \
279    (_s_)->nVersion.s.nRevision = 0x0;          \
280    (_s_)->nVersion.s.nStep = 0x0
281
282#define OMX_G722MEMFREE_STRUCT(_pStruct_)                           \
283    if(_pStruct_ != NULL)                                           \
284    {                                                               \
285        G722ENC_MEMPRINT("%d :: [FREE] %p\n", __LINE__, _pStruct_); \
286        free(_pStruct_);                                            \
287        _pStruct_ = NULL;                                           \
288    }
289
290#define OMX_G722CLOSE_PIPE(_pStruct_,err)                       \
291    G722ENC_DPRINT("%d :: CLOSING PIPE \n", __LINE__);          \
292    err = close (_pStruct_);                                    \
293    if(0 != err && OMX_ErrorNone == eError)                     \
294    {                                                           \
295        eError = OMX_ErrorHardware;                             \
296        printf("%d :: Error while closing pipe\n", __LINE__);   \
297        goto EXIT;                                              \
298    }
299
300#define OMX_G722MALLOC_STRUCT(_pStruct_, _sName_)                   \
301    _pStruct_ = (_sName_*)malloc(sizeof(_sName_));                  \
302    if(_pStruct_ == NULL)                                           \
303    {                                                               \
304        printf("***********************************\n");            \
305        printf("%d :: Malloc Failed\n", __LINE__);                  \
306        printf("***********************************\n");            \
307        eError = OMX_ErrorInsufficientResources;                    \
308        goto EXIT;                                                  \
309    }                                                               \
310    memset(_pStruct_,0,sizeof(_sName_));                            \
311    G722ENC_MEMPRINT("%d :: [ALLOC] %p\n", __LINE__, _pStruct_);
312/* ======================================================================= */
313/** G722ENC_STREAM_TYPE  Values for create phase params
314 *
315 *  @param  G722ENCSTREAMDMM             Indicates DMM
316 *
317 *  @param  G722ENCSTREAMINPUT           Sets input stream
318 *
319 *  @param  G722ENCSTREAMOUTPUT          Sets output stream
320 *
321 */
322/*  ==================================================================== */
323typedef enum {
324    G722ENCSTREAMDMM,
325    G722ENCSTREAMINPUT,
326    G722ENCSTREAMOUTPUT
327} G722ENC_STREAM_TYPE;
328
329/* ======================================================================= */
330/** IUALG_Cmd  Values for create phase params
331 *
332 *  @param  IULAG_CMD_STOP               Socket node stop command
333 *
334 *  @param  IULAG_CMD_PAUSE              Socket node pause command
335 *
336 *  @param  IULAG_CMD_GETSTATUS          Socket node get status command.
337 *
338 *  @param  IULAG_CMD_SETSTATUS          Socket node set status command.
339 *
340 *  @param  IUALG_CMD_USERCMDSTART       Socket node start command.
341 *
342 */
343/*  ==================================================================== */
344typedef enum {
345    IULAG_CMD_STOP          = 0,
346    IULAG_CMD_PAUSE         = 1,
347    IULAG_CMD_GETSTATUS     = 2,
348    IULAG_CMD_SETSTATUS     = 3,
349    IUALG_CMD_USERCMDSTART  = 100
350}IUALG_Cmd;
351
352
353/* ======================================================================= */
354/** G722ENC_COMP_PORT_TYPE  Port definition for component
355 *
356 *  @param  G722ENC_INPUT_PORT           Index for input port
357 *
358 *  @param  G722ENC_OUTPUT_PORT          Index for output port
359 *
360 */
361/*  ==================================================================== */
362typedef enum G722ENC_COMP_PORT_TYPE {
363    G722ENC_INPUT_PORT = 0,
364    G722ENC_OUTPUT_PORT
365}G722ENC_COMP_PORT_TYPE;
366
367
368
369/* =================================================================================== */
370/**
371 * Socket node input buffer parameters.
372 */
373/* ================================================================================== */
374typedef struct G722ENC_UAlgInBufParamStruct {
375    unsigned long bLastBuffer;
376}G722ENC_UAlgInBufParamStruct;
377
378/* =================================================================================== */
379/**
380 * LCML data header.
381 */
382/* ================================================================================== */
383typedef struct G722ENC_LCML_BUFHEADERTYPE {
384    OMX_DIRTYPE eDir;
385    OMX_BUFFERHEADERTYPE *pBufHdr;
386    void *pOtherParams[10];
387    G722ENC_UAlgInBufParamStruct *pIpParam;
388    /*G722ENC_UAlgOutBufParamStruct *pOpParam; */
389}G722ENC_LCML_BUFHEADERTYPE;
390
391
392/* =================================================================================== */
393/**
394 * Socket node audio codec parameters
395 */
396/* ================================================================================== */
397typedef struct G722ENC_AudioCodecParams
398{
399    unsigned long iSamplingRate;
400    unsigned long iStrmId;
401    unsigned short iAudioFormat;
402
403}G722ENC_AudioCodecParams;
404
405/* =================================================================================== */
406/**
407 * Structure for buffer list
408 */
409/* ================================================================================== */
410typedef struct _BUFFERLIST G722ENC_BUFFERLIST;
411struct _BUFFERLIST{
412    OMX_BUFFERHEADERTYPE *pBufHdr[G722ENC_MAX_NUM_OF_BUFS];  /* records buffer header send by client */
413    OMX_U32 bufferOwner[G722ENC_MAX_NUM_OF_BUFS];
414    OMX_U32 numBuffers;
415    OMX_U32 bBufferPending[G722ENC_MAX_NUM_OF_BUFS];
416};
417
418/* =================================================================================== */
419/**
420 * Component private data
421 */
422/* ================================================================================== */
423typedef struct G722ENC_COMPONENT_PRIVATE
424{
425    /** Array of pointers to BUFFERHEADERTYPE structues
426        This pBufHeader[G722ENC_INPUT_PORT] will point to all the
427        BUFFERHEADERTYPE structures related to input port,
428        not just one structure. Same is for output port
429        also. */
430    OMX_BUFFERHEADERTYPE* pBufHeader[G722ENC_NUM_OF_PORTS];
431
432    /** Structure of callback pointers */
433    OMX_CALLBACKTYPE cbInfo;
434
435    /** Handle for use with async callbacks */
436    OMX_PORT_PARAM_TYPE sPortParam;
437
438    /** Input port parameters */
439    OMX_AUDIO_PARAM_PORTFORMATTYPE* pInPortFormat;
440
441    /** Output port parameters */
442    OMX_AUDIO_PARAM_PORTFORMATTYPE* pOutPortFormat;
443
444    /** Keeps track of whether a buffer is owned by the
445        component or by the IL client */
446    OMX_U32 bIsBufferOwned[G722ENC_NUM_OF_PORTS];
447
448    /* Audio codec parameters structure */
449    G722ENC_AudioCodecParams *pParams;
450
451    /** This will contain info like how many buffers
452        are there for input/output ports, their size etc, but not
453        BUFFERHEADERTYPE POINTERS. */
454    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef[G722ENC_NUM_OF_PORTS];
455    OMX_AUDIO_PARAM_ADPCMTYPE* g722Params;
456    OMX_AUDIO_PARAM_ADPCMTYPE* pcmParams;
457    OMX_PRIORITYMGMTTYPE* sPriorityMgmt;
458
459    /** This is component handle */
460    OMX_COMPONENTTYPE* pHandle;
461
462    /** Current state of this component */
463    OMX_STATETYPE curState;
464
465    /** The component thread handle */
466    pthread_t ComponentThread;
467
468    /** The pipes for sending buffers to the thread */
469    int dataPipe[2];
470
471    /** The pipes for sending command data to the thread */
472    int cmdDataPipe[2];
473
474    /** The pipes for sending buffers to the thread */
475    int cmdPipe[2];
476
477    /** The pipes for sending buffers to the thread */
478    int lcml_Pipe[2];
479
480    /** Set to indicate component is stopping */
481    OMX_U32 bIsStopping;
482
483    OMX_U32 bIsEOFSent;
484
485    /** Count of number of buffers outstanding with bridge */
486    OMX_U32 lcml_nIpBuf;
487
488    /** Count of number of buffers outstanding with bridge */
489    OMX_U32 lcml_nOpBuf;
490
491    /** Count of buffers sent to the LCML */
492    OMX_U32 lcml_nCntIp;
493
494    /** Count of buffers received from the LCML */
495    OMX_U32 lcml_nCntOpReceived;
496
497    /** Count of buffers pending from the app */
498    OMX_U32 app_nBuf;
499
500    /** Flag for DASF mode */
501    OMX_U32 dasfmode;
502
503    /** Audio Stream ID */
504    OMX_U32 streamID;
505
506    /** LCML Handle */
507    OMX_HANDLETYPE pLcmlHandle;
508
509    /** LCML Buffer Header */
510    G722ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader[2];
511
512    /** Tee Mode Flag */
513    OMX_U32 teemode;
514
515    /** Flag set when port definitions are allocated */
516    OMX_U32 bPortDefsAllocated;
517
518    /** Flag set when component thread is started */
519    OMX_U32 bCompThreadStarted;
520
521    /** Mark data */
522    OMX_PTR pMarkData;
523
524    /** Mark buffer */
525    OMX_MARKTYPE *pMarkBuf;
526
527    /** Mark target component */
528    OMX_HANDLETYPE hMarkTargetComponent;
529
530    /** Flag set when buffer should not be queued to the DSP */
531    OMX_U32 bBypassDSP;
532
533    /** Create phase arguments */
534    OMX_U16 *pCreatePhaseArgs;
535
536    /** Input buffer list */
537    G722ENC_BUFFERLIST *pInputBufferList;
538
539    /** Output buffer list */
540    G722ENC_BUFFERLIST *pOutputBufferList;
541
542    /** LCML stream attributes */
543    LCML_STRMATTR *strmAttr;
544
545    /** Component version */
546    OMX_U32 nVersion;
547
548    /** LCML Handle */
549    void *lcml_handle;
550
551    /** Number of initialized input buffers */
552    int noInitInputBuf;
553
554    /** Number of initialized output buffers */
555    int noInitOutputBuf;
556
557    /** Flag set when LCML handle is opened */
558    int bLcmlHandleOpened;
559
560    /** Flag set when initialization params are set */
561    OMX_U32 bInitParamsInitialized;
562
563    /** Pipe write handle for audio manager */
564    int fdwrite;
565
566    /** Pipe read handle for audio manager */
567    int fdread;
568
569    /** Stores input buffers while paused */
570    OMX_BUFFERHEADERTYPE *pInputBufHdrPending[G722ENC_MAX_NUM_OF_BUFS];
571
572    /** Number of input buffers received while paused */
573    OMX_U32 nNumInputBufPending;
574
575    /** Stores output buffers while paused */
576    OMX_BUFFERHEADERTYPE *pOutputBufHdrPending[G722ENC_MAX_NUM_OF_BUFS];
577
578    /** Number of output buffers received while paused */
579    OMX_U32 nNumOutputBufPending;
580
581    /** Keeps track of the number of invalid frames that come from the LCML */
582    OMX_U32 nInvalidFrameCount;
583
584    /** Flag set when a disable command is pending */
585    OMX_U32 bDisableCommandPending;
586
587    /** Parameter for pending disable command */
588    OMX_U32 bDisableCommandParam;
589
590    /** Flag to set when socket node stop callback should not transition
591        component to OMX_StateIdle */
592    OMX_U32 bNoIdleOnStop;
593
594    /** Flag set when idle command is pending */
595    OMX_U32 bIdleCommandPending;
596
597    /** Flag set when socket node is stopped */
598    OMX_U32 bDspStoppedWhileExecuting;
599
600    /** Number of outstanding FillBufferDone() calls */
601    OMX_U32 nOutStandingFillDones;
602
603    /** Flag set when StrmCtrl has been called */
604    OMX_U32 bStreamCtrlCalled;
605
606    OMX_PARAM_COMPONENTROLETYPE componentRole;
607    OMX_STRING* sDeviceString;
608    OMX_BOOL bLoadedCommandPending;
609
610    /** Holds the value of RT Mixer mode  */
611    OMX_U32 rtmx;
612    TI_OMX_DSP_DEFINITION tiOmxDspDefinition;
613
614    /* Removing sleep() calls. Definition. */
615#ifndef UNDER_CE
616    pthread_mutex_t AlloBuf_mutex;
617    pthread_cond_t AlloBuf_threshold;
618    OMX_U8 AlloBuf_waitingsignal;
619
620    pthread_mutex_t InLoaded_mutex;
621    pthread_cond_t InLoaded_threshold;
622    OMX_U8 InLoaded_readytoidle;
623
624    pthread_mutex_t InIdle_mutex;
625    pthread_cond_t InIdle_threshold;
626    OMX_U8 InIdle_goingtoloaded;
627#else
628    OMX_Event AlloBuf_event;
629    OMX_U8 AlloBuf_waitingsignal;
630
631    OMX_Event InLoaded_event;
632    OMX_U8 InLoaded_readytoidle;
633
634    OMX_Event InIdle_event;
635    OMX_U8 InIdle_goingtoloaded;
636#endif
637
638#ifdef __PERF_INSTRUMENTATION__
639    PERF_OBJHANDLE pPERF, pPERFcomp;
640    OMX_U32 nLcml_nCntIp;
641    OMX_U32 nLcml_nCntOpReceived;
642#endif
643
644    /** Keep buffer timestamps **/
645    OMX_S64 arrTimestamp[G722ENC_MAX_NUM_OF_BUFS];
646    /** Keep buffer nTickCounts **/
647    OMX_S64 arrTickCount[G722ENC_MAX_NUM_OF_BUFS];
648    /** Index to arrTimestamp[], used for input buffer timestamps */
649    OMX_U8 IpBufindex;
650    /** Index to arrTimestamp[], used for output buffer timestamps */
651    OMX_U8 OpBufindex;
652
653
654    OMX_BOOL bPreempted;
655
656} G722ENC_COMPONENT_PRIVATE;
657
658/* ===========================================================  */
659/**
660 *  OMX_ComponentInit()  Initializes component
661 *
662 *
663 *  @param hComp         OMX Handle
664 *
665 *  @return OMX_ErrorNone = Successful
666 *          Other error code = fail
667 *
668 */
669/*================================================================== */
670#ifndef UNDER_CE
671OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
672#else
673/*  WinCE Implicit Export Syntax */
674#define OMX_EXPORT __declspec(dllexport)
675OMX_EXPORT OMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp);
676#endif
677
678/* ===========================================================  */
679/**
680 *  G722ENC_Fill_LCMLInitParams() Fills the parameters needed
681 * to initialize the LCML
682 *
683 *  @param pHandle OMX Handle
684 *
685 *  @param plcml_Init LCML initialization parameters
686 *
687 *  @return OMX_ErrorNone = Successful
688 *          Other error code = fail
689 *
690 */
691/*================================================================== */
692OMX_ERRORTYPE G722ENC_Fill_LCMLInitParams(OMX_HANDLETYPE pHandle,
693                                          LCML_DSP *plcml_Init);
694
695/* ===========================================================  */
696/**
697 *  G722ENC_GetBufferDirection() Returns direction of pBufHeader
698 *
699 *  @param pBufHeader        Buffer header
700 *
701 *  @param eDir              Buffer direction
702 *
703 *  @param pComponentPrivate Component private data
704 *
705 *  @return OMX_ErrorNone = Successful
706 *          Other error code = fail
707 */
708/*================================================================== */
709OMX_ERRORTYPE G722ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
710                                         OMX_DIRTYPE *eDir,
711                                         G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
712
713/* ===========================================================  */
714/**
715 *  G722ENC_LCML_Callback() Callback from LCML
716 *
717 *  @param event     Codec Event
718 *
719 *  @param args      Arguments from LCML
720 *
721 *  @return OMX_ErrorNone = Successful
722 *          Other error code = fail
723 */
724/*================================================================== */
725OMX_ERRORTYPE G722ENC_LCML_Callback (TUsnCodecEvent event,void * args [10]);
726
727/* ===========================================================  */
728/**
729 *  G722ENC_HandleCommand() Handles commands sent via SendCommand()
730 *
731 *  @param pComponentPrivate Component private data
732 *
733 *  @return OMX_ErrorNone = Successful
734 *          Other error code = fail
735 */
736/*================================================================== */
737OMX_U32 G722ENC_HandleCommand (G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
738
739
740/* ===========================================================  */
741/**
742 *  G722ENC_HandleDataBuf_FromApp() Handles data buffers received
743 * from application
744 *
745 *  @param pBufHeader        Buffer header
746 *
747 *  @param pComponentPrivate Component private data
748 *
749 *  @return OMX_ErrorNone = Successful
750 *          Other error code = fail
751 */
752/*================================================================== */
753OMX_ERRORTYPE G722ENC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE *pBufHeader,
754                                            G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
755
756
757
758/* ===========================================================  */
759/**
760 *  G722ENC_HandleDataBuf_FromLCML() Handles data buffers received
761 * from LCML
762 *
763 *  @param pComponentPrivate Component private data
764 *
765 *  @return OMX_ErrorNone = Successful
766 *          Other error code = fail
767 */
768/*================================================================== */
769/***** NO LCML *******
770       OMX_ERRORTYPE G722ENC_HandleDataBuf_FromLCML(G722ENC_COMPONENT_PRIVATE*
771       pComponentPrivate);
772**********************/
773/* ===========================================================  */
774/**
775 *  GetLCMLHandle()
776 *
777 *  @param
778 *
779 *  @return *
780 */
781/*================================================================== */
782OMX_HANDLETYPE GetLCMLHandle();
783
784
785/* ===========================================================  */
786/**
787 *  G722ENC_GetCorresponding_LCMLHeader()  Returns LCML header
788 * that corresponds to the given buffer
789 *
790 *  @param pComponentPrivate Component private data
791 *
792 *  @return OMX_ErrorNone = Successful
793 *          Other error code = fail
794 */
795/*================================================================== */
796OMX_ERRORTYPE G722ENC_GetCorresponding_LCMLHeader(OMX_U8 *pBuffer,
797                                                  OMX_DIRTYPE eDir,
798                                                  G722ENC_LCML_BUFHEADERTYPE **ppLcmlHdr);
799
800
801/* ===========================================================  */
802/**
803 *  G722Enc_FreeCompResources()  Frees component resources
804 *
805 *  @param pComponent        OMX Handle
806 *
807 *  @return OMX_ErrorNone = Successful
808 *          Other error code = fail
809 */
810/*================================================================== */
811OMX_ERRORTYPE G722Enc_FreeCompResources(OMX_HANDLETYPE pComponent);
812
813/* ===========================================================  */
814/**
815 *  G722Enc_StartCompThread()  Starts component thread
816 *
817 *  @param pComponent        OMX Handle
818 *
819 *  @return OMX_ErrorNone = Successful
820 *          Other error code = fail
821 */
822/*================================================================== */
823OMX_ERRORTYPE G722Enc_StartCompThread(OMX_HANDLETYPE pComponent);
824
825/* ===========================================================  */
826/**
827 *  G722ENC_GetLCMLHandle()  Returns handle to the LCML
828 *
829 *
830 *  @return Handle to the LCML
831 */
832/*================================================================== */
833OMX_HANDLETYPE G722ENC_GetLCMLHandle();
834
835
836/* ========================================================================== */
837/**
838 * @G722ENC_StopComponentThread() This function is called by the component during
839 * de-init to close component thread.
840 *
841 * @param pComponent  handle for this instance of the component
842 *
843 * @pre
844 *
845 * @post
846 *
847 * @return none
848 */
849/* ========================================================================== */
850OMX_ERRORTYPE G722ENC_StopComponentThread(OMX_HANDLETYPE pComponent);
851
852/* ===========================================================  */
853/**
854 *  G722ENC_FreeLCMLHandle()  Frees the handle to the LCML
855 *
856 *
857 *  @return OMX_ErrorNone = Successful
858 *          Other error code = fail
859 */
860/*================================================================== */
861OMX_ERRORTYPE G722ENC_FreeLCMLHandle();
862
863
864/* ===========================================================  */
865/**
866 *  G722ENC_CleanupInitParams()  Starts component thread
867 *
868 *  @param pComponent        OMX Handle
869 *
870 *  @return OMX_ErrorNone = Successful
871 *          Other error code = fail
872 */
873/*================================================================== */
874OMX_ERRORTYPE G722ENC_CleanupInitParams(OMX_HANDLETYPE pComponent);
875
876
877/* ===========================================================  */
878/**
879 *  G722ENC_CommandToIdle()  Called when the component is commanded
880 * to idle
881 *
882 *  @param pComponentPrivate     Component private data
883 *
884 *  @return OMX_ErrorNone = Successful
885 *          Other error code = fail
886 */
887/*================================================================== */
888OMX_ERRORTYPE G722ENC_CommandToIdle(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
889
890/* ===========================================================  */
891/**
892 *  G722ENC_CommandToIdle()  Called when the component is commanded
893 * to idle
894 *
895 *  @param pComponentPrivate     Component private data
896 *
897 *  @return OMX_ErrorNone = Successful
898 *          Other error code = fail
899 */
900/*================================================================== */
901OMX_ERRORTYPE G722ENC_CommandToLoaded(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
902
903/* ===========================================================  */
904/**
905 *  G722ENC_CommandToExecuting()  Called when the component is commanded
906 * to executing
907 *
908 *  @param pComponentPrivate     Component private data
909 *
910 *  @return OMX_ErrorNone = Successful
911 *          Other error code = fail
912 */
913/*================================================================== */
914OMX_ERRORTYPE G722ENC_CommandToExecuting(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
915
916/* ===========================================================  */
917/**
918 *  G722ENC_CommandToPause()  Called when the component is commanded
919 * to paused
920 *
921 *  @param pComponentPrivate     Component private data
922 *
923 *  @return OMX_ErrorNone = Successful
924 *          Other error code = fail
925 */
926/*================================================================== */
927OMX_ERRORTYPE G722ENC_CommandToPause(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
928
929/* ===========================================================  */
930/**
931 *  G722ENC_CommandToWaitForResources()  Called when the component is commanded
932 * to WaitForResources
933 *
934 *  @param pComponentPrivate     Component private data
935 *
936 *  @return OMX_ErrorNone = Successful
937 *          Other error code = fail
938 */
939/*================================================================== */
940OMX_ERRORTYPE G722ENC_CommandToWaitForResources(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
941
942/* ===========================================================  */
943/**
944 *  G722ENC_SetPending()  Called when the component queues a buffer
945 * to the LCML
946 *
947 *  @param pComponentPrivate     Component private data
948 *
949 *  @param pBufHdr               Buffer header
950 *
951 *  @param eDir                  Direction of the buffer
952 *
953 *  @return None
954 */
955/*================================================================== */
956void G722ENC_SetPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
957
958/* ===========================================================  */
959/**
960 *  G722ENC_ClearPending()  Called when a buffer is returned
961 * from the LCML
962 *
963 *  @param pComponentPrivate     Component private data
964 *
965 *  @param pBufHdr               Buffer header
966 *
967 *  @param eDir                  Direction of the buffer
968 *
969 *  @return None
970 */
971/*================================================================== */
972void G722ENC_ClearPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir) ;
973
974/* ===========================================================  */
975/**
976 *  G722ENC_IsPending()  Returns the status of a buffer
977 *
978 *  @param pComponentPrivate     Component private data
979 *
980 *  @param pBufHdr               Buffer header
981 *
982 *  @param eDir                  Direction of the buffer
983 *
984 *  @return None
985 */
986/*================================================================== */
987OMX_U32 G722ENC_IsPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir);
988
989/* ===========================================================  */
990/**
991 * G722ENC_Fill_LCMLInitParamsEx()  Fills the parameters needed
992 * to initialize the LCML without recreating the socket node
993 *
994 *  @param pComponent            OMX Handle
995 *
996 *  @return None
997 */
998/*================================================================== */
999OMX_ERRORTYPE G722ENC_Fill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent);
1000
1001/* ===========================================================  */
1002/**
1003 *  G722ENC_IsValid() Returns whether the buffer is a valid buffer
1004 *
1005 *  @param pComponentPrivate     Component private data
1006 *
1007 *  @param pBuffer               Buffer
1008 *
1009 *  @param eDir                  Direction of the buffer
1010 *
1011 *  @return None
1012 */
1013/*================================================================== */
1014OMX_U32 G722ENC_IsValid(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir) ;
1015
1016/* ===========================================================  */
1017/**
1018 *  G722ENC_TransitionToIdle() Transitions component to idle
1019 *
1020 *
1021 *  @param pComponentPrivate     Component private data
1022 *
1023 *  @return OMX_ErrorNone = No error
1024 *          OMX Error code = Error
1025 */
1026/*================================================================== */
1027OMX_ERRORTYPE G722ENC_TransitionToIdle(G722ENC_COMPONENT_PRIVATE *pComponentPrivate);
1028
1029
1030/*void printEmmEvent (TUsnCodecEvent event);*/
1031