Home | History | Annotate | Download | only in src
      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.c
     30  *
     31  * This file implements OMX Component for G722 Encoder that
     32  * is fully compliant with the OMX Audio specification .
     33  *
     34  * @path  $(OMAPSW_MPU)\linux\audio\src\openmax_il\g722_enc\src
     35  *
     36  * @rev  0.1
     37  */
     38 /* -----------------------------------------------------------------------------
     39  *!
     40  *! Revision History
     41  *! ===================================
     42  *! Date         Author(s)            Version  Description
     43  *! ---------    -------------------  -------  ---------------------------------
     44  *! 08-Mar-2007  A.Donjon             0.1      Code update for G722 ENCODER
     45  *!
     46  *!
     47  * ================================================================================= */
     48 
     49 
     50 /* ------compilation control switches -------------------------*/
     51 /****************************************************************
     52  *  INCLUDE FILES
     53  ****************************************************************/
     54 /* ----- system and platform files ----------------------------*/
     55 #ifdef UNDER_CE
     56 #include <windows.h>
     57 #include <oaf_osal.h>
     58 #include <omx_core.h>
     59 #include <stdlib.h>
     60 #else
     61 #include <unistd.h>
     62 #include <sys/types.h>
     63 #include <sys/types.h>
     64 #include <sys/stat.h>
     65 #include <dlfcn.h>
     66 #include <malloc.h>
     67 #include <memory.h>
     68 #include <fcntl.h>
     69 #include <errno.h>
     70 #include <dlfcn.h>
     71 #include <sys/time.h>
     72 #endif
     73 
     74 #include <pthread.h>
     75 #include <dbapi.h>
     76 #include <string.h>
     77 #include <stdio.h>
     78 
     79 #include "OMX_Component.h"
     80 #include "LCML_DspCodec.h"
     81 #include "OMX_G722Encoder.h"
     82 #include "OMX_G722Enc_Utils.h"
     83 #include "g722encsocket_ti.h"
     84 #include <encode_common_ti.h>
     85 #include "usn.h"
     86 
     87 #ifdef UNDER_CE
     88 #define HASHINGENABLE 1
     89 #endif
     90 
     91 int FillBufferDoneCount = 0;
     92 static int gLcmlPipeWr = 0;
     93 OMX_U32 pValues[4] ={0};
     94 static G722ENC_COMPONENT_PRIVATE *pComponentPrivate_CC = NULL;
     95 
     96 /* ================================================================================= */
     97 /**
     98  * @fn ComponentThread() Component thread
     99  *
    100  *  @see         OMX_ComponentThread.h
    101  */
    102 /* ================================================================================ */
    103 void* ComponentThread (void* pThreadData)
    104 {
    105     int status = 0;
    106     struct timespec tv; /*timeval tv;*/
    107     int fdmax = 0;
    108     fd_set rfds;
    109     OMX_U32 nRet = 0;
    110     OMX_ERRORTYPE eError = OMX_ErrorNone;
    111     OMX_BUFFERHEADERTYPE *pBufHeader = NULL;
    112     int ret = 0;
    113 
    114 
    115     G722ENC_COMPONENT_PRIVATE* pComponentPrivate = (G722ENC_COMPONENT_PRIVATE*)pThreadData;
    116     OMX_COMPONENTTYPE *pHandle = pComponentPrivate->pHandle;
    117 
    118     fdmax = pComponentPrivate->cmdPipe[0];
    119 
    120     if (pComponentPrivate->dataPipe[0] > fdmax) {
    121         fdmax = pComponentPrivate->dataPipe[0];
    122     }
    123 
    124     while (1) {
    125         FD_ZERO (&rfds);
    126         FD_SET (pComponentPrivate->cmdPipe[0], &rfds);
    127         FD_SET (pComponentPrivate->dataPipe[0], &rfds);
    128         tv.tv_sec = 1;
    129         tv.tv_nsec = 0; /*usec = 0;*/
    130 
    131 #ifndef UNDER_CE
    132         sigset_t set;
    133         sigemptyset (&set);
    134         sigaddset (&set, SIGALRM);
    135         status = pselect (fdmax+1, &rfds, NULL, NULL, &tv, &set);
    136 #else
    137         status = select (fdmax+1, &rfds, NULL, NULL, &tv);
    138 #endif
    139 
    140         if (0 == status) {
    141             G722ENC_DPRINT("%d : bIsStopping = %ld\n",__LINE__,
    142                            pComponentPrivate->bIsStopping);
    143 
    144             G722ENC_DPRINT("%d : app_nBuf = %ld\n",__LINE__,
    145                            pComponentPrivate->app_nBuf);
    146 
    147             if (pComponentPrivate->bIsStopping == 1) {
    148 
    149                 G722ENC_DPRINT ("%d :: Component stopping\n",__LINE__);
    150                 pComponentPrivate->lcml_nOpBuf = 0;
    151                 pComponentPrivate->lcml_nIpBuf = 0;
    152                 pComponentPrivate->app_nBuf = 0;
    153                 pComponentPrivate->bIsStopping = 0;
    154                 pComponentPrivate->bIsEOFSent = 0;
    155                 if (pComponentPrivate->curState != OMX_StateIdle) {
    156                     goto EXIT;
    157                 }
    158             }
    159         } else if (-1 == status) {
    160 #ifndef UNDER_CE
    161             G722ENC_DPRINT ("%d :: Error in Select - errno = %d\n", __LINE__,errno);
    162 #endif
    163             pComponentPrivate->cbInfo.EventHandler (
    164                                                     pHandle,pHandle->pApplicationPrivate,
    165                                                     OMX_EventError,OMX_ErrorInsufficientResources, 0,
    166                                                     "Error from COmponent Thread in select");
    167             eError = OMX_ErrorInsufficientResources;
    168 
    169         } else if (FD_ISSET (pComponentPrivate->cmdPipe[0], &rfds)) {
    170             G722ENC_DPRINT ("%d :: CMD pipe is set in Component Thread\n",__LINE__);
    171             G722ENC_DPRINT ("%d :: pComponentPrivate = %p\n",__LINE__,pComponentPrivate);
    172             nRet = G722ENC_HandleCommand (pComponentPrivate);
    173             if (nRet == EXIT_COMPONENT_THRD) {
    174                 G722ENC_DPRINT ("Exiting from Component thread\n");
    175                 G722ENC_CleanupInitParams(pHandle);
    176                 if(eError != OMX_ErrorNone) {
    177                     G722ENC_DPRINT("%d :: Function G722Enc_FreeCompResources returned\
    178                                                                     error\n",__LINE__);
    179                     goto EXIT;
    180                 }
    181                 G722ENC_DPRINT("%d :: ARM Side Resources Have Been Freed\n",__LINE__);
    182 
    183                 pComponentPrivate->curState = OMX_StateLoaded;
    184                 if (pComponentPrivate->bPreempted == 0) {
    185                     pComponentPrivate->cbInfo.EventHandler(pHandle,
    186                                                            pHandle->pApplicationPrivate,
    187                                                            OMX_EventCmdComplete,
    188                                                            OMX_ErrorNone,
    189                                                            pComponentPrivate->curState,
    190                                                            NULL);
    191                     G722ENC_DPRINT("%d %s Component loaded (OMX_StateLoaded)\n",
    192                                    __LINE__,__FUNCTION__);
    193                 }else{
    194                     pComponentPrivate->cbInfo.EventHandler(pHandle,
    195                                                            pHandle->pApplicationPrivate,
    196                                                            OMX_EventError,
    197                                                            OMX_ErrorResourcesLost,
    198                                                            pComponentPrivate->curState,
    199                                                            NULL);
    200                     pComponentPrivate->bPreempted = 0;
    201                 }
    202             }
    203         }
    204         else if (FD_ISSET (pComponentPrivate->dataPipe[0], &rfds)) {
    205 
    206             G722ENC_DPRINT ("%d :: DATA pipe is set in Component Thread\n",__LINE__);
    207             ret = read(pComponentPrivate->dataPipe[0], &pBufHeader, sizeof(pBufHeader));
    208             if (ret == -1) {
    209                 G722ENC_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
    210             }
    211 
    212             eError = G722ENC_HandleDataBuf_FromApp (pBufHeader,pComponentPrivate);
    213             if (eError != OMX_ErrorNone) {
    214                 G722ENC_DPRINT ("%d :: Error From G722ENC_HandleDataBuf_FromApp\n",__LINE__);
    215                 break;
    216             }
    217         }
    218     }
    219  EXIT:
    220     G722ENC_DPRINT ("%d :: Exiting ComponentThread \n",__LINE__);
    221     return (void*)eError;
    222 }
    223 
    224 /* ================================================================================= */
    225 /**
    226  * @fn G722ENC_Fill_LCMLInitParams() description for G722ENC_Fill_LCMLInitParams
    227  G722ENC_Fill_LCMLInitParams().
    228  This function is used by the component thread to
    229  ill the all of its initialization parameters, buffer deatils  etc
    230  to LCML structure
    231  * @param pComponent  handle for this instance of the component
    232  * @param plcml_Init  pointer to LCML structure to be filled
    233  *
    234  * @pre
    235  *
    236  * @post
    237  *
    238  * @return OMX_ERRORTYPE
    239  */
    240 /* ================================================================================ */
    241 OMX_ERRORTYPE G722ENC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent,
    242                                           LCML_DSP *plcml_Init)
    243 {
    244     OMX_ERRORTYPE eError = OMX_ErrorNone;
    245     OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
    246     OMX_U16 i = 0;
    247     OMX_BUFFERHEADERTYPE *pTemp = NULL;
    248     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
    249     int size_lcml = 0;
    250     LCML_STRMATTR *strmAttr = NULL;
    251     OMX_U16 *arr = NULL;
    252     G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
    253     G722ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate;
    254     OMX_U8* pParmsTemp = NULL;
    255 
    256     G722ENC_DPRINT("%d :: Entered G722ENC_Fill_LCMLInitParams",__LINE__);
    257 
    258     nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
    259     nIpBufSize = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferSize;
    260     nOpBufSize = pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->nBufferSize;
    261     G722ENC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers);
    262     nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
    263     pComponentPrivate->noInitInputBuf = nIpBuf;
    264     pComponentPrivate->noInitOutputBuf = nOpBuf;
    265     plcml_Init->In_BufInfo.nBuffers = nIpBuf;
    266     plcml_Init->In_BufInfo.nSize = nIpBufSize;
    267     plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD;
    268     plcml_Init->Out_BufInfo.nBuffers = nOpBuf;
    269     plcml_Init->Out_BufInfo.nSize = nOpBufSize;
    270     plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD;
    271     plcml_Init->NodeInfo.nNumOfDLLs = 3;
    272 
    273     plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G722ENCSOCKET_TI_UUID;
    274     strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName, G722ENC_DLL_NAME);
    275     plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
    276 
    277     plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G722ENCSOCKET_TI_UUID;
    278     strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName, G722ENC_DLL_NAME);
    279     plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
    280 
    281     plcml_Init->NodeInfo.AllUUIDs[2].uuid = &ENCODE_COMMON_TI_UUID;
    282     strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName,USN_DLL_NAME);
    283     plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
    284 
    285     plcml_Init->SegID = OMX_G722ENC_DEFAULT_SEGMENT;
    286     plcml_Init->Timeout = OMX_G722ENC_SN_TIMEOUT;
    287     plcml_Init->Alignment = 0;
    288     plcml_Init->Priority = OMX_G722ENC_SN_PRIORITY;
    289     plcml_Init->DeviceInfo.TypeofDevice = 0;
    290     plcml_Init->ProfileID = -1;
    291 
    292     if(pComponentPrivate->dasfmode == 1) {
    293         G722ENC_DPRINT("%d :: G722 ENCODER IS RUNNING UNDER DASF MODE \n",__LINE__);
    294 
    295 
    296         pParmsTemp = (OMX_U8*)malloc(sizeof(G722ENC_AudioCodecParams) + 256);
    297 
    298         G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pComponentPrivate->pParams);
    299         if(NULL == pParmsTemp) {
    300             G722ENC_DPRINT("%d :: Malloc Failed\n",__LINE__);
    301             eError = OMX_ErrorInsufficientResources;
    302             goto EXIT;
    303         }
    304         memset (pParmsTemp, 0, sizeof (G722ENC_AudioCodecParams) + 256);
    305         pComponentPrivate->pParams = (G722ENC_AudioCodecParams*)(pParmsTemp + 128);
    306         /*strmAttr = malloc(sizeof(LCML_STRMATTR));
    307           G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,strmAttr);*/
    308         OMX_G722MALLOC_STRUCT (strmAttr, LCML_STRMATTR);
    309 
    310         if (strmAttr == NULL) {
    311             G722ENC_DPRINT("strmAttr - failed to malloc\n");
    312             eError = OMX_ErrorInsufficientResources;
    313             goto EXIT;
    314         }
    315         pComponentPrivate->strmAttr = strmAttr;
    316         G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,strmAttr);
    317         strmAttr->uSegid = 0;
    318         strmAttr->uAlignment = 0;
    319         strmAttr->uTimeout = OMX_G722ENC_SN_TIMEOUT;
    320         strmAttr->uBufsize = G722ENC_OUTPUT_BUFFER_SIZE_BYTES;
    321         strmAttr->uNumBufs = G722ENC_NUM_INPUT_BUFFERS + G722ENC_NUM_OUTPUT_BUFFERS;
    322         strmAttr->lMode = STRMMODE_PROCCOPY;
    323         plcml_Init->DeviceInfo.TypeofDevice = 1;
    324         plcml_Init->DeviceInfo.TypeofRender = 1;  /* set for record */
    325         /* add to support Tee Device Node */
    326         if(pComponentPrivate->teemode == 1) {
    327             plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &TEEDN_TI_UUID;
    328         }
    329         else {
    330             plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID;
    331         }
    332         plcml_Init->DeviceInfo.DspStream = strmAttr;
    333     }
    334 
    335 
    336     arr = malloc (10 * sizeof(OMX_U16));
    337     G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,arr);
    338 
    339     if (arr == NULL) {
    340         /* Free previously allocated memory before bailing */
    341         if (strmAttr) {
    342             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
    343             free(strmAttr);
    344             strmAttr = NULL;
    345         }
    346         eError = OMX_ErrorInsufficientResources;
    347         goto EXIT;
    348     }
    349     memset (arr, 0, 10 * sizeof (OMX_U16));
    350     pComponentPrivate->pCreatePhaseArgs = arr;
    351     if (pComponentPrivate->dasfmode == 1){
    352         G722ENC_DPRINT("%d :: G722 ENCODER CREATE PHASE UNDER DASF MODE \n",__LINE__);
    353         arr[0] = G722ENC_NUM_STREAMS;
    354         arr[1] = G722ENC_INPUT_PORT;                                        /*Stream ID*/
    355         arr[2] = G722ENCSTREAMINPUT;                                       /*DMM based input stream DMM - 0 INPUT - 1 */
    356         arr[3] = G722ENC_NUM_INPUT_DASF_BUFFERS;                            /*Number of buffers on input stream*/
    357         arr[4] = G722ENC_OUTPUT_PORT;                                       /*Stream ID*/
    358         arr[5] = G722ENCSTREAMDMM;                                         /*DMM based output stream DMM - 0 OUTPUT - 2*/
    359         arr[6] = (OMX_U16)pComponentPrivate->pOutputBufferList->numBuffers;  /*Number of buffers on output stream*/
    360     }
    361     else {
    362         G722ENC_DPRINT("%d :: G722 ENCODER CREATE PHASE UNDER FILE MODE \n",__LINE__);
    363         arr[0] = G722ENC_NUM_STREAMS;
    364         arr[1] = G722ENC_INPUT_PORT;                                        /*Stream ID*/
    365         arr[2] = G722ENCSTREAMDMM;                                         /*DMM based input stream DMM - 0 INPUT - 1*/
    366 
    367         if (pComponentPrivate->pInputBufferList->numBuffers) {
    368             arr[3] = (OMX_U16)pComponentPrivate->pInputBufferList->numBuffers;   /*Number of buffers on input stream*/
    369         }
    370         else {
    371             arr[3] = 1;
    372         }
    373         arr[4] = G722ENC_OUTPUT_PORT;                                       /*Stream ID*/
    374         arr[5] = G722ENCSTREAMDMM;                                         /*DMM based output stream DMM - 0 OUTPUT - 2*/
    375 
    376         if (pComponentPrivate->pOutputBufferList->numBuffers) {
    377             arr[6] = (OMX_U16)pComponentPrivate->pOutputBufferList->numBuffers;  /*Number of buffers on output stream*/
    378         }
    379         else {
    380             arr[6] = 1;
    381         }
    382     }
    383     arr[7] = (OMX_U16)pComponentPrivate->g722Params->nSampleRate;   /* Rate selection */
    384     arr[8] = G722ENC_INPUT_BUFFER_SIZE;
    385     arr[9] = END_OF_CR_PHASE_ARGS;
    386     plcml_Init->pCrPhArgs = arr;
    387     /* Allocate memory for all input buffer headers..
    388      * This memory pointer will be sent to LCML */
    389 
    390     size_lcml = nIpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
    391     pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
    392     G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
    393     if(pTemp_lcml == NULL) {
    394         /* Free previously allocated memory before bailing */
    395         if (strmAttr) {
    396             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
    397             free(strmAttr);
    398             strmAttr = NULL;
    399         }
    400 
    401         if (arr) {
    402             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
    403             free(arr);
    404             arr = NULL;
    405         }
    406         eError = OMX_ErrorInsufficientResources;
    407         goto EXIT;
    408     }
    409     memset (pTemp_lcml, 0, size_lcml);
    410     pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = pTemp_lcml;
    411 
    412     for (i=0; i<nIpBuf; i++) {
    413         G722ENC_DPRINT("%d :: --------- Inside Ip Loop\n",__LINE__);
    414         pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
    415         pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
    416         pTemp->nAllocLen = nIpBufSize;
    417         pTemp->nFilledLen = nIpBufSize;
    418         pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
    419         pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
    420         pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
    421         pTemp->nTickCount = NOT_USED;
    422         pTemp_lcml->pBufHdr = pTemp;
    423         pTemp_lcml->eDir = OMX_DirInput;
    424         pTemp_lcml->pOtherParams[i] = NULL;
    425         /*pTemp_lcml->pIpParam = (G722ENC_UAlgInBufParamStruct *)malloc(sizeof(G722ENC_UAlgInBufParamStruct));
    426 
    427           G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml->pIpParam);*/
    428         OMX_G722MALLOC_STRUCT (pTemp_lcml->pIpParam, G722ENC_UAlgInBufParamStruct);
    429         if (pTemp_lcml->pIpParam == NULL) {
    430             /* Free previously allocated memory before bailing */
    431             if (strmAttr) {
    432                 G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
    433                 free(strmAttr);
    434                 strmAttr = NULL;
    435             }
    436 
    437             if (arr) {
    438                 G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
    439                 free(arr);
    440                 arr = NULL;
    441             }
    442 
    443             if (pTemp_lcml) {
    444                 G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml);
    445                 free(pTemp_lcml);
    446                 pTemp_lcml = NULL;
    447             }
    448 
    449             G722ENC_DPRINT("%d :: Error: Malloc Failed...Exiting..\n",__LINE__);
    450             goto EXIT;
    451         }
    452         pTemp_lcml->pIpParam->bLastBuffer = 0;
    453 
    454         pTemp->nFlags = NORMAL_BUFFER;
    455         ((G722ENC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
    456         G722ENC_DPRINT("%d ::Comp: InBuffHeader[%d] = %p\n", __LINE__, i, pTemp);
    457         G722ENC_DPRINT("%d ::Comp:  >>>> InputBuffHeader[%d]->pBuffer = %p\n",
    458                        __LINE__, i, pTemp->pBuffer);
    459         G722ENC_DPRINT("%d ::Comp: Ip : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
    460 
    461         pTemp_lcml++;
    462     }
    463 
    464     pTemp = pComponentPrivate->pBufHeader[G722ENC_OUTPUT_PORT];
    465     size_lcml = nOpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
    466     pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
    467     G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
    468     if(pTemp_lcml == NULL) {
    469         G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
    470         /* Free previously allocated memory before bailing */
    471         if (strmAttr) {
    472             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
    473             free(strmAttr);
    474             strmAttr = NULL;
    475         }
    476 
    477         if (arr) {
    478             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
    479             free(arr);
    480             arr = NULL;
    481         }
    482 
    483         eError = OMX_ErrorInsufficientResources;
    484         goto EXIT;
    485     }
    486     memset (pTemp_lcml, 0, size_lcml);
    487     pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = pTemp_lcml;
    488 
    489 
    490     G722ENC_DPRINT("nOpBuf = %d\n",nOpBuf);
    491 
    492     for (i=0; i<nOpBuf; i++) {
    493         pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
    494         pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
    495         pTemp->nAllocLen = nOpBufSize;
    496         pTemp->nFilledLen = nOpBufSize;
    497         pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
    498         pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
    499         pComponentPrivate->nVersion = pTemp->nVersion.nVersion;
    500         pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
    501         pTemp->nTickCount = NOT_USED;
    502         pTemp_lcml->pBufHdr = pTemp;
    503         pTemp_lcml->eDir = OMX_DirOutput;
    504         pTemp_lcml->pOtherParams[i] = NULL;
    505 
    506         pTemp->nFlags = NORMAL_BUFFER;
    507         ((G722ENC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
    508         G722ENC_DPRINT("%d ::Comp:  >>>>>>>>>>>>> OutBuffHeader[%d] = %p\n",
    509                        __LINE__, i, pTemp);
    510         G722ENC_DPRINT("%d ::Comp:  >>>> OutBuffHeader[%d]->pBuffer = %p\n",
    511                        __LINE__, i, pTemp->pBuffer);
    512         G722ENC_DPRINT("%d ::Comp: Op : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
    513         pTemp++;
    514         pTemp_lcml++;
    515     }
    516     pComponentPrivate->bPortDefsAllocated = 1;
    517 
    518     G722ENC_DPRINT("%d :: Exiting G722ENC_Fill_LCMLInitParams",__LINE__);
    519 
    520     pComponentPrivate->bInitParamsInitialized = 1;
    521  EXIT:
    522     return eError;
    523 }
    524 
    525 /* ================================================================================= */
    526 /**
    527  * @fn G722Enc_StartCompThread() description for G722Enc_StartCompThread
    528  G722Enc_StartCompThread().
    529  This function is called by the component to create
    530  the component thread, command pipe, data pipe and LCML Pipe
    531  * @param pComponent  handle for this instance of the component
    532  *
    533  * @pre
    534  *
    535  * @post
    536  *
    537  * @return OMX_ERRORTYPE
    538  */
    539 /* ================================================================================ */
    540 OMX_ERRORTYPE G722Enc_StartCompThread(OMX_HANDLETYPE pComponent)
    541 {
    542     OMX_ERRORTYPE eError = OMX_ErrorNone;
    543     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
    544     G722ENC_COMPONENT_PRIVATE *pComponentPrivate =
    545         (G722ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
    546 #ifdef UNDER_CE
    547     pthread_attr_t attr;
    548     memset(&attr, 0, sizeof(attr));
    549     attr.__inheritsched = PTHREAD_EXPLICIT_SCHED;
    550     attr.__schedparam.__sched_priority = OMX_AUDIO_ENCODER_THREAD_PRIORITY;
    551 #endif
    552 
    553     G722ENC_DPRINT ("%d :: Enetering  G722Enc_StartCompThread\n", __LINE__);
    554     /* initialize values */
    555     pComponentPrivate->bIsStopping = 0;
    556     pComponentPrivate->lcml_nOpBuf = 0;
    557     pComponentPrivate->lcml_nIpBuf = 0;
    558     pComponentPrivate->app_nBuf = 0;
    559     pComponentPrivate->bIsEOFSent = 0;
    560     /* create the pipe used to send buffers to the thread */
    561     eError = pipe (pComponentPrivate->dataPipe);
    562     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    563     if (eError) {
    564         eError = OMX_ErrorInsufficientResources;
    565         goto EXIT;
    566     }
    567 
    568     /* create the pipe used to send commands to the thread */
    569     eError = pipe (pComponentPrivate->cmdPipe);
    570     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    571     if (eError) {
    572         eError = OMX_ErrorInsufficientResources;
    573         goto EXIT;
    574     }
    575 
    576     eError = pipe (pComponentPrivate->cmdDataPipe);
    577     G722ENC_DPRINT ("%d :: G722Dec_StartCompThread() - error = %d\n", __LINE__,eError);
    578     if (eError) {
    579         eError = OMX_ErrorInsufficientResources;
    580         goto EXIT;
    581     }
    582 
    583     /* create the pipe used to send commands to the thread */
    584     eError = pipe (pComponentPrivate->lcml_Pipe);
    585     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    586     if (eError) {
    587         eError = OMX_ErrorInsufficientResources;
    588         goto EXIT;
    589     }
    590     gLcmlPipeWr = pComponentPrivate->lcml_Pipe[1];
    591 
    592     /* Create the Component Thread */
    593 #ifdef UNDER_CE
    594     eError = pthread_create (&(pComponentPrivate->ComponentThread), &attr,
    595                              ComponentThread, pComponentPrivate);
    596 #else
    597     eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL,
    598                              ComponentThread, pComponentPrivate);
    599 #endif
    600     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    601     if (eError || !pComponentPrivate->ComponentThread) {
    602         eError = OMX_ErrorInsufficientResources;
    603         goto EXIT;
    604     }
    605     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    606 
    607     pComponentPrivate_CC = pComponentPrivate;
    608     pComponentPrivate->bCompThreadStarted = 1;
    609     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    610 
    611  EXIT:
    612     G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
    613     return eError;
    614 }
    615 
    616 
    617 /* ========================================================================== */
    618 /**
    619  * G722Enc_FreeCompResources() This function is called by the component during
    620  * de-init to close component thread, Command pipe, data pipe & LCML pipe.
    621  *
    622  * @param pComponent  handle for this instance of the component
    623  *
    624  * @pre
    625  *
    626  * @post
    627  *
    628  * @return none
    629  */
    630 /* ========================================================================== */
    631 OMX_ERRORTYPE G722Enc_FreeCompResources(OMX_HANDLETYPE pComponent)
    632 {
    633     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
    634     G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
    635         pHandle->pComponentPrivate;
    636 
    637     OMX_ERRORTYPE eError = OMX_ErrorNone;
    638     OMX_ERRORTYPE err = OMX_ErrorNone;
    639 
    640     G722ENC_DPRINT ("%d :: G722Enc_FreeCompResources()\n", __LINE__);
    641     if (pComponentPrivate->pCreatePhaseArgs != NULL) {
    642         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pCreatePhaseArgs);
    643         /*      free(pComponentPrivate->pCreatePhaseArgs);*/
    644         pComponentPrivate->pCreatePhaseArgs = NULL;
    645     }
    646 
    647     if (pComponentPrivate->bCompThreadStarted) {
    648         err = close (pComponentPrivate->dataPipe[0]);
    649         if (0 != err && OMX_ErrorNone == eError) {
    650             eError = OMX_ErrorHardware;
    651             G722ENC_DPRINT ("%d :: Error while closing dataPipe\n",__LINE__);
    652         }
    653         err = close (pComponentPrivate->dataPipe[1]);
    654         if (0 != err && OMX_ErrorNone == eError) {
    655             eError = OMX_ErrorHardware;
    656             G722ENC_DPRINT ("%d :: Error while closing dataPipe\n",__LINE__);
    657         }
    658 
    659         err = close (pComponentPrivate->cmdDataPipe[0]);
    660         if (0 != err && OMX_ErrorNone == eError) {
    661             eError = OMX_ErrorHardware;
    662         }
    663 
    664         err = close (pComponentPrivate->cmdDataPipe[1]);
    665         if (0 != err && OMX_ErrorNone == eError) {
    666             eError = OMX_ErrorHardware;
    667         }
    668 
    669         err = close (pComponentPrivate->cmdPipe[0]);
    670         if (0 != err && OMX_ErrorNone == eError) {
    671             eError = OMX_ErrorHardware;
    672             G722ENC_DPRINT ("%d :: Error while closing cmdPipe\n",__LINE__);
    673         }
    674 
    675         err = close (pComponentPrivate->cmdPipe[1]);
    676         if (0 != err && OMX_ErrorNone == eError) {
    677             eError = OMX_ErrorHardware;
    678             G722ENC_DPRINT ("%d :: Error while closing cmdPipe\n",__LINE__);
    679         }
    680 
    681         err = close (pComponentPrivate->lcml_Pipe[0]);
    682         if (0 != err && OMX_ErrorNone == eError) {
    683             eError = OMX_ErrorHardware;
    684             G722ENC_DPRINT ("%d :: Error while closing lcml_Pipe\n",__LINE__);
    685         }
    686 
    687         err = close (pComponentPrivate->lcml_Pipe[1]);
    688         if (0 != err && OMX_ErrorNone == eError) {
    689             eError = OMX_ErrorHardware;
    690             G722ENC_DPRINT ("%d :: Error while closing lcml_Pipe\n",__LINE__);
    691         }
    692     }
    693 
    694     if (pComponentPrivate->bPortDefsAllocated != 0 /*NULL*/) {
    695         if (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT] != NULL) {
    696             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]);
    697             free(pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]);
    698             pComponentPrivate->pPortDef[G722ENC_INPUT_PORT] = NULL;
    699         }
    700 
    701         if (pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]) {
    702             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]);
    703             free (pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]);
    704             pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT] = NULL;
    705         }
    706 
    707         if (pComponentPrivate->pcmParams) {
    708             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pcmParams);
    709             free(pComponentPrivate->pcmParams);
    710             pComponentPrivate->pcmParams = NULL;
    711         }
    712 
    713         if (pComponentPrivate->g722Params) {
    714             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->g722Params);
    715             free (pComponentPrivate->g722Params);
    716             pComponentPrivate->g722Params = NULL;
    717         }
    718 
    719         if (pComponentPrivate->pOutputBufferList) {
    720             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pOutputBufferList);
    721             free (pComponentPrivate->pOutputBufferList);
    722             pComponentPrivate->pOutputBufferList = NULL;
    723         }
    724 
    725         if (pComponentPrivate->pInputBufferList) {
    726             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pInputBufferList);
    727             free (pComponentPrivate->pInputBufferList);
    728             pComponentPrivate->pInputBufferList = NULL;
    729         }
    730 
    731         if (pComponentPrivate->sDeviceString) {
    732             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->sDeviceString);
    733             free (pComponentPrivate->sDeviceString);
    734             pComponentPrivate->sDeviceString = NULL;
    735         }
    736 
    737         if (pComponentPrivate->pOutPortFormat) {
    738             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pOutPortFormat);
    739             free (pComponentPrivate->pOutPortFormat);
    740             pComponentPrivate->pOutPortFormat = NULL;
    741         }
    742 
    743         if (pComponentPrivate->pInPortFormat) {
    744             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pInPortFormat);
    745             free (pComponentPrivate->pInPortFormat);
    746             pComponentPrivate->pInPortFormat = NULL;
    747         }
    748 
    749         if (pComponentPrivate->sPriorityMgmt) {
    750             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->sPriorityMgmt);
    751             free (pComponentPrivate->sPriorityMgmt);
    752             pComponentPrivate->sPriorityMgmt = NULL;
    753         }
    754     }
    755     pComponentPrivate->bPortDefsAllocated = 0;
    756 
    757 #ifndef UNDER_CE
    758     pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
    759     pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
    760 
    761     pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
    762     pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
    763 
    764     pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
    765     pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
    766 #else
    767     OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event));
    768     OMX_DestroyEvent(&(pComponentPrivate->InIdle_event));
    769     OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event));
    770 #endif
    771 
    772     /*eError = G722ENC_FreeLCMLHandle();*/
    773     G722ENC_DPRINT ("Exiting Successfully G722ENC_FreeCompResources()\n");
    774     return eError;
    775 }
    776 
    777 /* ================================================================================= */
    778 /**
    779  * @fn G722ENC_CleanupInitParams() description for G722ENC_CleanupInitParams
    780  G722ENC_CleanupInitParams().
    781  This function is called by the component to cleanup initialization parameters
    782  upon component exit.
    783  * @param pComponent  handle for this instance of the component
    784  *
    785  * @pre
    786  *
    787  * @post
    788  *
    789  * @return OMX_ERRORTYPE
    790  */
    791 /* ================================================================================ */
    792 OMX_ERRORTYPE G722ENC_CleanupInitParams(OMX_HANDLETYPE pComponent)
    793 {
    794     OMX_U8* pParmsTemp =  NULL;
    795     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
    796     G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
    797         pHandle->pComponentPrivate;
    798 
    799     OMX_ERRORTYPE eError = OMX_ErrorNone;
    800     G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
    801     G722ENC_DPRINT ("%d :: pComponentPrivate = %p\n", __LINE__,pComponentPrivate);
    802     G722ENC_DPRINT ("%d :: pComponentPrivate->strmAttr = %p\n", __LINE__,pComponentPrivate->strmAttr);
    803 
    804     if ((pComponentPrivate->dasfmode == 1) && (pComponentPrivate->pParams)) {
    805         pParmsTemp = (OMX_U8*)pComponentPrivate->pParams;
    806         if (pParmsTemp != NULL){
    807             pParmsTemp -= 128;
    808         }
    809         pComponentPrivate->pParams = (G722ENC_AudioCodecParams *)pParmsTemp;
    810         G722ENC_MEMPRINT(":: Freeing: pComponentPrivate->pParams = %p\n",pComponentPrivate->pParams);
    811         /*free(pComponentPrivate->pParams);
    812           pComponentPrivate->pParams = NULL;*/
    813         OMX_G722MEMFREE_STRUCT(pComponentPrivate->pParams);
    814 
    815     }
    816 
    817     if (pComponentPrivate->strmAttr) {
    818         G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
    819         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->strmAttr);
    820         free(pComponentPrivate->strmAttr);
    821         G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
    822         pComponentPrivate->strmAttr = NULL;
    823     }
    824     G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
    825     G722ENC_DPRINT ("Exiting Successfully G722ENC_CleanupInitParams()\n");
    826     return eError;
    827 }
    828 
    829 
    830 /* ========================================================================== */
    831 /**
    832  * @G722ENC_StopComponentThread() This function is called by the component during
    833  * de-init to close component thread.
    834  *
    835  * @param pComponent  handle for this instance of the component
    836  *
    837  * @pre
    838  *
    839  * @post
    840  *
    841  * @return none
    842  */
    843 /* ========================================================================== */
    844 
    845 OMX_ERRORTYPE G722ENC_StopComponentThread(OMX_HANDLETYPE pComponent)
    846 {
    847     OMX_ERRORTYPE eError = OMX_ErrorNone;
    848     OMX_ERRORTYPE threadError = OMX_ErrorNone;
    849     int pthreadError = 0;
    850     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
    851     G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
    852         pHandle->pComponentPrivate;
    853 
    854     pComponentPrivate->bIsStopping = 1;
    855     pthreadError = pthread_join (pComponentPrivate->ComponentThread,
    856                                  (void*)&threadError);
    857 
    858 
    859     pComponentPrivate->bCompThreadStarted = 0;
    860     if (0 != pthreadError)
    861     {
    862         eError = OMX_ErrorHardware;
    863         G722ENC_DPRINT("OMX_ErrorHardware.\n");
    864         goto EXIT;
    865     }
    866     if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError)
    867     {
    868         eError = OMX_ErrorInsufficientResources;
    869         G722ENC_DPRINT("OMX_ErrorInsufficientResources.\n");
    870         goto EXIT;
    871     }
    872  EXIT:
    873     G722ENC_DPRINT("Exiting StopComponentThread - Returning = 0x%x\n", eError);
    874     return eError;
    875 }
    876 
    877 /* ========================================================================== */
    878 /**
    879  * @G722ENC_HandleCommand() This function is called by the component when ever it
    880  * receives the command from the application
    881  *
    882  * @param pComponentPrivate  Component private data
    883  *
    884  * @pre
    885  *
    886  * @post
    887  *
    888  * @return none
    889  */
    890 /* ========================================================================== */
    891 
    892 OMX_U32 G722ENC_HandleCommand (G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
    893 {
    894     OMX_U16 i = 0;
    895     OMX_ERRORTYPE eError = OMX_ErrorNone;
    896     OMX_COMPONENTTYPE *pHandle =
    897         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
    898     OMX_COMMANDTYPE command;
    899     OMX_STATETYPE commandedState = OMX_StateInvalid;
    900     OMX_U32 commandData = 0;
    901     LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)
    902         pComponentPrivate->pLcmlHandle;
    903 
    904     G722ENC_DPRINT ("%d :: >>> Entering G722ENC_HandleCommand Function3\n",__LINE__);
    905 
    906 
    907     read (pComponentPrivate->cmdPipe[0], &command, sizeof (command));
    908     read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData));
    909 
    910     if (command == OMX_CommandStateSet) {
    911         commandedState = (OMX_STATETYPE)commandData;
    912         switch(commandedState) {
    913         case OMX_StateIdle:
    914             eError = G722ENC_CommandToIdle(pComponentPrivate);
    915             break;
    916 
    917         case OMX_StateExecuting:
    918             eError = G722ENC_CommandToExecuting(pComponentPrivate);
    919             break;
    920 
    921         case OMX_StateLoaded:
    922             eError = G722ENC_CommandToLoaded(pComponentPrivate);
    923             break;
    924 
    925         case OMX_StatePause:
    926             eError = G722ENC_CommandToPause(pComponentPrivate);
    927             break;
    928 
    929 
    930         case OMX_StateWaitForResources:
    931             eError = G722ENC_CommandToWaitForResources(pComponentPrivate);
    932             break;
    933 
    934         case OMX_StateInvalid:
    935             G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd OMX_StateInvalid:\n",__LINE__);
    936             if (pComponentPrivate->curState == commandedState){
    937                 pComponentPrivate->cbInfo.EventHandler (
    938                                                         pHandle, pHandle->pApplicationPrivate,
    939                                                         OMX_EventError, OMX_ErrorSameState,0,
    940                                                         NULL);
    941                 G722ENC_DPRINT("%d :: Error: Same State Given by \
    942                            Application\n",__LINE__);
    943                 break;
    944             }
    945             else {
    946                 pComponentPrivate->curState = OMX_StateInvalid;
    947                 pComponentPrivate->cbInfo.EventHandler(
    948                                                        pHandle, pHandle->pApplicationPrivate,
    949                                                        OMX_EventError, OMX_ErrorInvalidState,0, NULL);
    950             }
    951             break;
    952 
    953         case OMX_StateMax:
    954             G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd OMX_StateMax::\n",__LINE__);
    955             break;
    956         } /* End of Switch */
    957     }
    958     else if (command == OMX_CommandMarkBuffer) {
    959         G722ENC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__);
    960         if(!pComponentPrivate->pMarkBuf){
    961             G722ENC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__);
    962             /* TODO Need to handle multiple marks */
    963             pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData);
    964         }
    965     }
    966     else if (command == OMX_CommandPortDisable) {
    967         if (!pComponentPrivate->bDisableCommandPending) {
    968             G722ENC_DPRINT("I'm here Line %d\n",__LINE__);
    969             if(commandData == 0x0 || commandData == -1){
    970                 /* disable port */
    971                 pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = OMX_FALSE;
    972             }
    973             if(commandData == 0x1 || commandData == -1){
    974 
    975                 char *pArgs = "damedesuStr";
    976 
    977 
    978                 pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = OMX_FALSE;
    979 
    980                 if (pComponentPrivate->curState == OMX_StateExecuting) {
    981                     pComponentPrivate->bNoIdleOnStop = OMX_TRUE;
    982                     eError = LCML_ControlCodec(
    983                                                ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
    984                                                MMCodecControlStop,(void *)pArgs);
    985                 }
    986 
    987 
    988             }
    989 
    990         }
    991         if(commandData == 0x0) {
    992             if(!pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated){
    993                 /* return cmdcomplete event if input unpopulated */
    994                 pComponentPrivate->cbInfo.EventHandler(
    995                                                        pHandle, pHandle->pApplicationPrivate,
    996                                                        OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_INPUT_PORT, NULL);
    997                 pComponentPrivate->bDisableCommandPending = 0;
    998             }
    999             else{
   1000                 pComponentPrivate->bDisableCommandPending = 1;
   1001                 pComponentPrivate->bDisableCommandParam = commandData;
   1002             }
   1003         }
   1004 
   1005         if(commandData == 0x1) {
   1006             if (!pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated){
   1007                 /* return cmdcomplete event if output unpopulated */
   1008                 pComponentPrivate->cbInfo.EventHandler(
   1009                                                        pHandle, pHandle->pApplicationPrivate,
   1010                                                        OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_OUTPUT_PORT, NULL);
   1011                 pComponentPrivate->bDisableCommandPending = 0;
   1012             }
   1013             else {
   1014                 pComponentPrivate->bDisableCommandPending = 1;
   1015                 pComponentPrivate->bDisableCommandParam = commandData;
   1016             }
   1017         }
   1018 
   1019         if(commandData == -1) {
   1020             if (!pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated &&
   1021                 !pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated){
   1022 
   1023                 /* return cmdcomplete event if inout & output unpopulated */
   1024                 pComponentPrivate->cbInfo.EventHandler(
   1025                                                        pHandle, pHandle->pApplicationPrivate,
   1026                                                        OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_INPUT_PORT, NULL);
   1027 
   1028                 pComponentPrivate->cbInfo.EventHandler(
   1029                                                        pHandle, pHandle->pApplicationPrivate,
   1030                                                        OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_OUTPUT_PORT, NULL);
   1031                 pComponentPrivate->bDisableCommandPending = 0;
   1032             }
   1033             else {
   1034                 pComponentPrivate->bDisableCommandPending = 1;
   1035                 pComponentPrivate->bDisableCommandParam = commandData;
   1036             }
   1037 
   1038         }
   1039 
   1040     }
   1041     else if (command == OMX_CommandPortEnable) {
   1042         if(commandData == 0x0 || commandData == -1){
   1043             /* enable in port */
   1044             G722ENC_DPRINT("setting input port to enabled\n");
   1045             pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = OMX_TRUE;
   1046             G722ENC_DPRINT("WAKE UP!! HandleCommand: En utils setting output port to enabled. \n");
   1047             if(pComponentPrivate->AlloBuf_waitingsignal)
   1048             {
   1049                 pComponentPrivate->AlloBuf_waitingsignal = 0;
   1050 #ifndef UNDER_CE
   1051                 pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
   1052                 pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
   1053                 /* Sending signal to Allocate Buffer Task. */
   1054                 pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
   1055 #else
   1056                 OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
   1057 #endif
   1058             }
   1059             G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled);
   1060         }
   1061         if(commandData == 0x1 || commandData == -1){
   1062             /* enable out port */
   1063             if(pComponentPrivate->AlloBuf_waitingsignal)
   1064             {
   1065                 pComponentPrivate->AlloBuf_waitingsignal = 0;
   1066 #ifndef UNDER_CE
   1067                 pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
   1068                 pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
   1069                 /* Sending signal to Allocate Buffer Task. */
   1070                 pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
   1071 #else
   1072                 OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
   1073 #endif
   1074             }
   1075 
   1076             if (pComponentPrivate->curState == OMX_StateExecuting) {
   1077                 char *pArgs = "damedesuStr";
   1078                 pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
   1079                 eError = LCML_ControlCodec(
   1080                                            ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   1081                                            EMMCodecControlStart,(void *)pArgs);
   1082             }
   1083             G722ENC_DPRINT("setting output port to enabled\n");
   1084             pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = OMX_TRUE;
   1085             G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled);
   1086         }
   1087 
   1088         while (1) {
   1089             G722ENC_DPRINT("commandData = %d\n",commandData);
   1090             G722ENC_DPRINT("pComponentPrivate->curState = %d\n",pComponentPrivate->curState);
   1091             G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated);
   1092             if(commandData == 0x0 && (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated)){
   1093 
   1094                 pComponentPrivate->cbInfo.EventHandler(
   1095                                                        pHandle, pHandle->pApplicationPrivate,
   1096                                                        OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_INPUT_PORT, NULL);
   1097                 break;
   1098             }
   1099             else if(commandData == 0x1 && (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated)){
   1100 
   1101                 pComponentPrivate->cbInfo.EventHandler(
   1102                                                        pHandle, pHandle->pApplicationPrivate,
   1103                                                        OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_OUTPUT_PORT, NULL);
   1104                 break;
   1105             }
   1106             else if(commandData == -1 && (pComponentPrivate->curState == OMX_StateLoaded || (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated
   1107                                                                                              && pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated))){
   1108 
   1109                 pComponentPrivate->cbInfo.EventHandler(
   1110                                                        pHandle, pHandle->pApplicationPrivate,
   1111                                                        OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_INPUT_PORT, NULL);
   1112 
   1113                 pComponentPrivate->cbInfo.EventHandler(
   1114                                                        pHandle, pHandle->pApplicationPrivate,
   1115                                                        OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_OUTPUT_PORT, NULL);
   1116 
   1117                 G722ENC_Fill_LCMLInitParamsEx(pHandle);
   1118                 break;
   1119             }
   1120         }
   1121     }
   1122     else if (command == OMX_CommandFlush) {
   1123         if(commandData == 0x0 || commandData == -1){
   1124             for (i=0; i < G722ENC_MAX_NUM_OF_BUFS; i++) {
   1125                 pComponentPrivate->pInputBufHdrPending[i] = NULL;
   1126             }
   1127             pComponentPrivate->nNumInputBufPending=0;
   1128 
   1129             for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
   1130                 pComponentPrivate->cbInfo.EmptyBufferDone (
   1131                                                            pComponentPrivate->pHandle,
   1132                                                            pComponentPrivate->pHandle->pApplicationPrivate,
   1133                                                            pComponentPrivate->pInputBufferList->pBufHdr[i]
   1134                                                            );
   1135 
   1136             }
   1137 
   1138             /* return all input buffers */
   1139             pComponentPrivate->cbInfo.EventHandler(
   1140                                                    pHandle, pHandle->pApplicationPrivate,
   1141                                                    OMX_EventCmdComplete, OMX_CommandFlush,G722ENC_INPUT_PORT, NULL);
   1142         }
   1143         if(commandData == 0x1 || commandData == -1){
   1144             for (i=0; i < G722ENC_MAX_NUM_OF_BUFS; i++) {
   1145                 pComponentPrivate->pOutputBufHdrPending[i] = NULL;
   1146             }
   1147             pComponentPrivate->nNumOutputBufPending=0;
   1148 
   1149             /* return all output buffers */
   1150             for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
   1151                 G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
   1152                 pComponentPrivate->cbInfo.FillBufferDone (
   1153                                                           pComponentPrivate->pHandle,
   1154                                                           pComponentPrivate->pHandle->pApplicationPrivate,
   1155                                                           pComponentPrivate->pOutputBufferList->pBufHdr[i]
   1156                                                           );
   1157             }
   1158 
   1159 
   1160             pComponentPrivate->cbInfo.EventHandler(
   1161                                                    pHandle, pHandle->pApplicationPrivate,
   1162                                                    OMX_EventCmdComplete, OMX_CommandFlush,G722ENC_OUTPUT_PORT, NULL);
   1163         }
   1164     }
   1165     G722ENC_DPRINT ("%d :: Exiting NBAMRDECG722ENC_HandleCommand Function\n",__LINE__);
   1166     G722ENC_DPRINT ("%d :: Returning %x\n",__LINE__,eError);
   1167     return eError;
   1168 }
   1169 
   1170 
   1171 /* ========================================================================== */
   1172 /**
   1173  * @G722ENC_HandleDataBuf_FromApp() This function is called by the component when ever it
   1174  * receives the buffer from the application
   1175  *
   1176  * @param pComponentPrivate  Component private data
   1177  * @param pBufHeader Buffer from the application
   1178  *
   1179  * @pre
   1180  *
   1181  * @post
   1182  *
   1183  * @return OMX_ERRORTYPE
   1184  */
   1185 /* ========================================================================== */
   1186 
   1187 OMX_ERRORTYPE G722ENC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader,
   1188                                             G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   1189 {
   1190     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1191     OMX_DIRTYPE eDir;
   1192     LCML_DSP_INTERFACE *pLcmlHandle = NULL;
   1193     G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
   1194 
   1195 
   1196     G722ENC_DPRINT ("%d :: Entering G722ENC_HandleDataBuf_FromApp Function\n",__LINE__);
   1197     eError = G722ENC_GetBufferDirection(pBufHeader, &eDir, pComponentPrivate);
   1198     if (eError != OMX_ErrorNone) {
   1199         G722ENC_DPRINT ("%d :: The pBufHeader is not found in the list\n",__LINE__);
   1200         goto EXIT;
   1201     }
   1202 
   1203     if (eDir == OMX_DirInput) {
   1204         if(pComponentPrivate->dasfmode == 0) {
   1205             if ((pBufHeader->nFilledLen > 0) || (pBufHeader->nFlags == OMX_BUFFERFLAG_EOS)) {
   1206                 pComponentPrivate->bBypassDSP = 0;
   1207                 pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
   1208                 G722ENC_DPRINT ("%d Comp:: Sending Filled Input buffer = %p, %p to LCML\n", __LINE__,pBufHeader,pBufHeader->pBuffer);
   1209                 eError = G722ENC_GetCorresponding_LCMLHeader(pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr);
   1210                 if (eError != OMX_ErrorNone) {
   1211                     G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
   1212                     goto EXIT;
   1213                 }
   1214 
   1215                 /* Store time stamp information */
   1216                 pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp;
   1217                 /* Store nTickCount information */
   1218                 pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount;
   1219                 pComponentPrivate->IpBufindex++;
   1220                 pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[OMX_DirOutput]->nBufferCountActual;
   1221 
   1222 
   1223                 if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
   1224                     pLcmlHdr->pIpParam->bLastBuffer = 1;
   1225                 }
   1226                 else{
   1227                     pLcmlHdr->pIpParam->bLastBuffer = 0;
   1228                 }
   1229 
   1230                 if (pComponentPrivate->curState == OMX_StateExecuting) {
   1231                     if(!pComponentPrivate->bDspStoppedWhileExecuting) {
   1232                         if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) {
   1233                             G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput);
   1234                             eError = LCML_QueueBuffer( pLcmlHandle->pCodecinterfacehandle,
   1235                                                        EMMCodecInputBuffer,
   1236                                                        pBufHeader->pBuffer,
   1237                                                        pBufHeader->nAllocLen,
   1238                                                        pBufHeader->nFilledLen,
   1239                                                        (OMX_U8 *) pLcmlHdr->pIpParam,
   1240                                                        sizeof(G722ENC_UAlgInBufParamStruct),
   1241                                                        pBufHeader->pBuffer);
   1242 
   1243                             if (eError != OMX_ErrorNone) {
   1244                                 G722ENC_DPRINT ("%d ::Comp: SetBuff: IP: Error Occurred\n",__LINE__);
   1245                                 eError = OMX_ErrorHardware;
   1246                                 goto EXIT;
   1247                             }
   1248                         }
   1249                     }
   1250                     else{
   1251                         pComponentPrivate->cbInfo.EmptyBufferDone (
   1252                                                                    pComponentPrivate->pHandle,
   1253                                                                    pComponentPrivate->pHandle->pApplicationPrivate,
   1254                                                                    pBufHeader
   1255                                                                    );
   1256                     }
   1257                     pComponentPrivate->lcml_nIpBuf++;
   1258                     G722ENC_DPRINT ("Sending Input buffer to Codec\n");
   1259                 }
   1260                 else {
   1261                     G722ENC_DPRINT("Queueing pending input buffers\n");
   1262                     pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader;
   1263                 }
   1264             }
   1265             else {
   1266                 pComponentPrivate->bBypassDSP = 1;
   1267                 G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
   1268                 pComponentPrivate->cbInfo.FillBufferDone (
   1269                                                           pComponentPrivate->pHandle,
   1270                                                           pComponentPrivate->pHandle->pApplicationPrivate,
   1271                                                           pComponentPrivate->pOutputBufferList->pBufHdr[0]
   1272                                                           );
   1273 
   1274 
   1275 
   1276                 G722ENC_DPRINT ("Forcing EmptyBufferDone\n");
   1277                 pComponentPrivate->cbInfo.EmptyBufferDone (
   1278                                                            pComponentPrivate->pHandle,
   1279                                                            pComponentPrivate->pHandle->pApplicationPrivate,
   1280                                                            pComponentPrivate->pInputBufferList->pBufHdr[0]
   1281                                                            );
   1282 
   1283             }
   1284             if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
   1285                 G722ENC_DPRINT("%d :: Comp: EOF Flag Has Been Set Here\n",__LINE__);
   1286                 if(pComponentPrivate->dasfmode == 0) {
   1287                     pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS;
   1288                     pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
   1289                                                            pComponentPrivate->pHandle->pApplicationPrivate,
   1290                                                            OMX_EventBufferFlag,
   1291                                                            pComponentPrivate->pOutputBufferList->pBufHdr[0]->nOutputPortIndex,
   1292                                                            pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags, NULL);
   1293                     G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
   1294                 }
   1295                 /* pBufHeader->nFlags = 0; */
   1296             }
   1297             if(pBufHeader->pMarkData){
   1298                 /* copy mark to output buffer header */
   1299                 pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData;
   1300                 pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
   1301 
   1302                 /* trigger event handler if we are supposed to */
   1303                 if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){
   1304                     pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate->pHandle,
   1305                                                               pComponentPrivate->pHandle->pApplicationPrivate,
   1306                                                               OMX_EventMark,
   1307                                                               0,
   1308                                                               0,
   1309                                                               pBufHeader->pMarkData);
   1310                 }
   1311             }
   1312         }
   1313     }
   1314     else if (eDir == OMX_DirOutput) {
   1315         G722ENC_DPRINT ("%d Comp:: Sending Emptied Output buffer=%p to LCML\n",
   1316                         __LINE__,pBufHeader);
   1317         G722ENC_DPRINT("%d : pComponentPrivate->lcml_nOpBuf = %ld\n",__LINE__,
   1318                        pComponentPrivate->lcml_nOpBuf);
   1319         G722ENC_DPRINT("%d : pComponentPrivate->lcml_nIpBuf = %ld\n",__LINE__,
   1320                        pComponentPrivate->lcml_nIpBuf);
   1321         pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
   1322 
   1323         eError = G722ENC_GetCorresponding_LCMLHeader(pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr);
   1324 
   1325         if (eError != OMX_ErrorNone) {
   1326             G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
   1327             goto EXIT;
   1328         }
   1329 
   1330         if (!(pComponentPrivate->bIsStopping)) {
   1331             if (pComponentPrivate->bBypassDSP == 0) {
   1332                 if (pComponentPrivate->curState == OMX_StateExecuting) {
   1333                     if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) {
   1334                         G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput);
   1335                         eError = LCML_QueueBuffer(
   1336                                                   pLcmlHandle->pCodecinterfacehandle,
   1337                                                   EMMCodecOuputBuffer,
   1338                                                   pBufHeader->pBuffer,
   1339                                                   pBufHeader->nAllocLen,
   1340                                                   0,
   1341                                                   NULL,
   1342                                                   0,
   1343                                                   pBufHeader->pBuffer);
   1344 
   1345 
   1346                         if (eError != OMX_ErrorNone ) {
   1347                             G722ENC_DPRINT ("%d :: Comp:: SetBuff OP: Error Occurred\n",__LINE__);
   1348                             eError = OMX_ErrorHardware;
   1349                             goto EXIT;
   1350                         }
   1351                         pComponentPrivate->lcml_nOpBuf++;
   1352                     }
   1353                 }
   1354                 else {
   1355                     pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
   1356                 }
   1357             }
   1358         }
   1359         else {
   1360             if (pComponentPrivate->curState == OMX_StateExecuting) {
   1361                 if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) {
   1362                     G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput);
   1363                     eError = LCML_QueueBuffer(
   1364                                               pLcmlHandle->pCodecinterfacehandle,
   1365                                               EMMCodecOuputBuffer,
   1366                                               pBufHeader->pBuffer,
   1367                                               pBufHeader->nAllocLen,
   1368                                               0,
   1369                                               NULL,
   1370                                               0,
   1371                                               pBufHeader->pBuffer);
   1372 
   1373 
   1374                     if (eError != OMX_ErrorNone ) {
   1375                         G722ENC_DPRINT ("%d :: Comp:: SetBuff: OP: Error Occurred\n",__LINE__);
   1376                         eError = OMX_ErrorHardware;
   1377                         goto EXIT;
   1378                     }
   1379 
   1380                     pComponentPrivate->lcml_nOpBuf++;
   1381                 }
   1382             }
   1383             else {
   1384                 G722ENC_DPRINT("Queueing output buffer\n");
   1385                 pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
   1386             }
   1387         }
   1388     }
   1389     else {
   1390         G722ENC_DPRINT("%d : BufferHeader %p, Buffer %p Unknown ..........\n",
   1391                        __LINE__,pBufHeader, pBufHeader->pBuffer);
   1392         eError = OMX_ErrorBadParameter;
   1393     }
   1394  EXIT:
   1395     G722ENC_DPRINT("%d : Exiting from  G722ENC_HandleDataBuf_FromApp \n",__LINE__);
   1396     return eError;
   1397 }
   1398 
   1399 /*-------------------------------------------------------------------*/
   1400 /**
   1401  * G722ENC_GetBufferDirection () This function is used by the component thread to
   1402  * request a buffer from the application.  Since it was called from 2 places,
   1403  * it made sense to turn this into a small function.
   1404  *
   1405  * @param pData pointer to G722 Encoder Context Structure
   1406  * @param pCur pointer to the buffer to be requested to be filled
   1407  *
   1408  * @retval none
   1409  **/
   1410 /*-------------------------------------------------------------------*/
   1411 
   1412 OMX_ERRORTYPE G722ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
   1413                                          OMX_DIRTYPE *eDir,
   1414                                          G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   1415 {
   1416     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1417     OMX_BUFFERHEADERTYPE *pBuf = NULL;
   1418     OMX_U16 flag = 1,i = 0;
   1419     OMX_U32 nBuf = 0;
   1420 
   1421 
   1422     nBuf = pComponentPrivate->pInputBufferList->numBuffers;
   1423     for(i=0; i<nBuf; i++) {
   1424         pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i];
   1425         if(pBufHeader == pBuf) {
   1426             *eDir = OMX_DirInput;
   1427             G722ENC_DPRINT ("%d :: Buffer %p is INPUT BUFFER\n",__LINE__, pBufHeader);
   1428             flag = 0;
   1429             goto EXIT;
   1430         }
   1431     }
   1432     /*Search this buffer in input buffers list */
   1433     nBuf = pComponentPrivate->pOutputBufferList->numBuffers;
   1434     for(i=0; i<nBuf; i++) {
   1435         pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i];
   1436         if(pBufHeader == pBuf) {
   1437             *eDir = OMX_DirOutput;
   1438             G722ENC_DPRINT ("%d :: Buffer %p is OUTPUT BUFFER\n",__LINE__, pBufHeader);
   1439             flag = 0;
   1440             goto EXIT;
   1441         }
   1442     }
   1443     if (flag == 1) {
   1444         G722ENC_DPRINT ("%d :: Buffer %p is Not Found in the List\n",__LINE__,pBufHeader);
   1445         eError = OMX_ErrorUndefined;
   1446         goto EXIT;
   1447     }
   1448  EXIT:
   1449     G722ENC_DPRINT ("%d :: Exiting G722ENC_GetBufferDirection Function\n",__LINE__);
   1450     return eError;
   1451 }
   1452 
   1453 /* -------------------------------------------------------------------*/
   1454 /**
   1455  *  Callback() function will be called LCML component to write the msg
   1456  *
   1457  * @param msgBuffer                 This buffer will be returned by the LCML
   1458  *
   1459  * @retval OMX_NoError              Success, ready to roll
   1460  *         OMX_Error_BadParameter   The input parameter pointer is null
   1461  **/
   1462 /*-------------------------------------------------------------------*/
   1463 
   1464 OMX_ERRORTYPE G722ENC_LCML_Callback (TUsnCodecEvent event,void * args [10])
   1465 {
   1466     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1467     OMX_U8 *pBuffer = args[1];
   1468     G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
   1469     OMX_COMPONENTTYPE *pHandle = pComponentPrivate_CC->pHandle;
   1470 
   1471     LCML_DSP_INTERFACE *pLcmlHandle = NULL;
   1472 
   1473     switch(event) {
   1474 
   1475     case EMMCodecDspError:
   1476         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspError\n");
   1477         break;
   1478 
   1479     case EMMCodecInternalError:
   1480         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInternalError\n");
   1481         break;
   1482 
   1483     case EMMCodecInitError:
   1484         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInitError\n");
   1485         break;
   1486 
   1487     case EMMCodecDspMessageRecieved:
   1488         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspMessageRecieved\n");
   1489         break;
   1490 
   1491     case EMMCodecBufferProcessed:
   1492         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferProcessed\n");
   1493         break;
   1494 
   1495     case EMMCodecProcessingStarted:
   1496         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStarted\n");
   1497         break;
   1498 
   1499     case EMMCodecProcessingPaused:
   1500         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingPaused\n");
   1501         break;
   1502 
   1503     case EMMCodecProcessingStoped:
   1504         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStoped\n");
   1505         break;
   1506 
   1507     case EMMCodecProcessingEof:
   1508         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingEof\n");
   1509         break;
   1510 
   1511     case EMMCodecBufferNotProcessed:
   1512         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferNotProcessed\n");
   1513         break;
   1514 
   1515     case EMMCodecAlgCtrlAck:
   1516         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecAlgCtrlAck\n");
   1517         break;
   1518 
   1519     case EMMCodecStrmCtrlAck:
   1520         G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecStrmCtrlAck\n");
   1521         break;
   1522 
   1523     default:
   1524         G722ENC_DPRINT("[LCML CALLBACK EVENT]  Got event = %d\n",event);
   1525         break;
   1526     }
   1527 
   1528 
   1529     G722ENC_DPRINT(" %d EMMCodecInputBuffer = %p \n",__LINE__,(void *)EMMCodecInputBuffer);
   1530     G722ENC_DPRINT(" %d EMMCodecOuputBuffer = %p \n",__LINE__,(void *)EMMCodecOuputBuffer);
   1531     G722ENC_DPRINT ("%d :: Entering the G722ENC_LCML_Callback() : event = %d\n",__LINE__,event);
   1532     if(event == EMMCodecBufferProcessed) {
   1533         if( args[0] == (void *)EMMCodecInputBuffer) {
   1534             G722ENC_DPRINT (" :: Inside the G722ENC_LCML_Callback EMMCodecInputBuffer\n");
   1535             G722ENC_DPRINT("%d :: Input: pBufferr = %p\n",__LINE__, pBuffer);
   1536             eError = G722ENC_GetCorresponding_LCMLHeader(pBuffer, OMX_DirInput, &pLcmlHdr);
   1537             G722ENC_ClearPending(pComponentPrivate_CC,pLcmlHdr->pBufHdr,OMX_DirInput);
   1538 
   1539             if (eError != OMX_ErrorNone) {
   1540                 G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
   1541                 goto EXIT;
   1542             }
   1543             G722ENC_DPRINT("%d :: Input: pLcmlHeader = %p\n",__LINE__, pLcmlHdr);
   1544             /* >>>>>>>>>>>>>>>>>>>>>>>>>>> */
   1545             if(pComponentPrivate_CC->dasfmode == 0) {
   1546                 pComponentPrivate_CC->lcml_nIpBuf--;
   1547                 G722ENC_DPRINT("%d: Component Sending Empty Input buffer%p to App\n",__LINE__, pLcmlHdr->pBufHdr->pBuffer);
   1548                 pComponentPrivate_CC->cbInfo.EmptyBufferDone (
   1549                                                               pHandle,
   1550                                                               pHandle->pApplicationPrivate,
   1551                                                               pLcmlHdr->pBufHdr
   1552                                                               );
   1553                 pComponentPrivate_CC->app_nBuf++;
   1554 
   1555             }
   1556             /* <<<<<<<<<<<<<<<<<<<<<<<<<<< */
   1557         }
   1558         else if (args[0] == (void *)EMMCodecOuputBuffer) {
   1559             if (!G722ENC_IsValid(pComponentPrivate_CC,pBuffer,OMX_DirOutput)) {
   1560                 /* If the buffer we get back from the DSP is not valid call FillBufferDone
   1561                    on a valid buffer */
   1562                 pComponentPrivate_CC->cbInfo.FillBufferDone (
   1563                                                              pComponentPrivate_CC->pHandle,
   1564                                                              pComponentPrivate_CC->pHandle->pApplicationPrivate,
   1565                                                              pComponentPrivate_CC->pOutputBufferList->pBufHdr[pComponentPrivate_CC->nInvalidFrameCount++]
   1566                                                              );
   1567             }
   1568             else {
   1569 
   1570                 pComponentPrivate_CC->nOutStandingFillDones++;
   1571                 G722ENC_DPRINT("Incrementing pComponentPrivate->nOutStandingFillDones Line %d\n",__LINE__);
   1572                 G722ENC_DPRINT("%d::pComponentPrivate_CC->nOutStandingFillDones = %d\n",__LINE__,pComponentPrivate_CC->nOutStandingFillDones);
   1573                 eError = G722ENC_GetCorresponding_LCMLHeader(pBuffer, OMX_DirOutput, &pLcmlHdr);
   1574                 G722ENC_ClearPending(pComponentPrivate_CC,pLcmlHdr->pBufHdr,OMX_DirOutput);
   1575 
   1576                 if (eError != OMX_ErrorNone) {
   1577                     G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
   1578                     goto EXIT;
   1579                 }
   1580                 pLcmlHdr->pBufHdr->nFilledLen = (int)args[8];
   1581                 G722ENC_DPRINT("%d :: Output: pLcmlHeader = %p\n",__LINE__, pLcmlHdr);
   1582 
   1583                 pComponentPrivate_CC->lcml_nCntOpReceived++;
   1584                 /* >>>>>>>>>>>>>>>>>>>>>>> */
   1585                 pComponentPrivate_CC->lcml_nOpBuf--;
   1586                 G722ENC_DPRINT("%d: Component Sending Filled Output buffer%p to App\n",__LINE__,pLcmlHdr->pBufHdr->pBuffer);
   1587                 G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
   1588                 pComponentPrivate_CC->cbInfo.FillBufferDone (
   1589                                                              pHandle,
   1590                                                              pHandle->pApplicationPrivate,
   1591                                                              pLcmlHdr->pBufHdr
   1592                                                              );
   1593                 pComponentPrivate_CC->app_nBuf++;
   1594                 pComponentPrivate_CC->nOutStandingFillDones--;
   1595                 G722ENC_DPRINT("Decrementing pComponentPrivate->nOutStandingFillDones Line %d\n",__LINE__);
   1596                 G722ENC_DPRINT("%d::pComponentPrivate->nOutStandingFillDones = %d\n",__LINE__,pComponentPrivate_CC->nOutStandingFillDones);
   1597                 /* <<<<<<<<<<<<<<<<<<<<<<< */
   1598             }
   1599         }
   1600     }
   1601     else if(event == EMMCodecProcessingStoped) {
   1602         if (!pComponentPrivate_CC->bNoIdleOnStop) {
   1603             pComponentPrivate_CC->bIdleCommandPending = OMX_TRUE;
   1604             pComponentPrivate_CC->curState = OMX_StateIdle;
   1605 
   1606             if (pComponentPrivate_CC->bPreempted == 0) {
   1607                 pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
   1608                                                           pHandle->pApplicationPrivate,
   1609                                                           OMX_EventCmdComplete,
   1610                                                           OMX_CommandStateSet,
   1611                                                           pComponentPrivate_CC->curState,
   1612                                                           NULL);
   1613             }
   1614             else {
   1615                 pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
   1616                                                           pHandle->pApplicationPrivate,
   1617                                                           OMX_EventError,
   1618                                                           OMX_ErrorResourcesPreempted,
   1619                                                           0,
   1620                                                           NULL);
   1621             }
   1622             pComponentPrivate_CC->bIdleCommandPending = OMX_FALSE;
   1623         }
   1624         else {
   1625             G722ENC_DPRINT("setting bDspStoppedWhileExecuting\n");
   1626             pComponentPrivate_CC->bDspStoppedWhileExecuting = OMX_TRUE;
   1627         }
   1628         pComponentPrivate_CC->bNoIdleOnStop= OMX_FALSE;
   1629     }
   1630     else if(event == EMMCodecAlgCtrlAck) {
   1631         G722ENC_DPRINT ("GOT MESSAGE USN_DSPACK_ALGCTRL \n");
   1632     }
   1633     else if (event == EMMCodecDspError) {
   1634         if(((int)args[4] == 1) && ((int)args[5] == 0x500)) {
   1635             G722ENC_DPRINT ("%d :: Comp: Inside the G722ENC_LCML_Callback: USN_DSPMSG_ERROR \n", __LINE__);
   1636             pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate_CC->pLcmlHandle;
   1637             G722ENC_DPRINT("Setting current state Idle Line %d\n",__LINE__);
   1638             pComponentPrivate_CC->curState = OMX_StateIdle;
   1639             pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
   1640                                                       OMX_EventCmdComplete, OMX_CommandStateSet,
   1641                                                       pComponentPrivate_CC->curState, NULL);
   1642             G722ENC_DPRINT("%d :: G722ENC: State has been Set to Idle\n", __LINE__);
   1643         }
   1644         if(((int)args[4] == 1) && ((int)args[5] == 0x0300)) {
   1645             G722ENC_DPRINT ("%d :: Comp: Inside the G722ENC_LCML_Callback: USN_DSPMSG_ERROR \n", __LINE__);
   1646             pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
   1647                                                       OMX_EventError, OMX_ErrorOverflow,
   1648                                                       pComponentPrivate_CC->curState, NULL);
   1649 
   1650 
   1651         }
   1652         if(((int)args[4] == USN_ERR_WARNING) &&
   1653            ((int)args[5] == IUALG_WARN_PLAYCOMPLETED)) {
   1654             pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
   1655                                                       pHandle->pApplicationPrivate,
   1656                                                       OMX_EventBufferFlag,
   1657                                                       (OMX_U32)NULL,
   1658                                                       OMX_BUFFERFLAG_EOS,
   1659                                                       NULL);
   1660         }
   1661     }
   1662     else if (event == EMMCodecStrmCtrlAck) {
   1663         G722ENC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n",__LINE__);
   1664         pComponentPrivate_CC->bStreamCtrlCalled = 1;
   1665 
   1666     }
   1667     else if (event == EMMCodecProcessingPaused) {
   1668         pComponentPrivate_CC->curState = OMX_StatePause;
   1669         pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
   1670                                                   OMX_EventCmdComplete, OMX_CommandStateSet,
   1671                                                   pComponentPrivate_CC->curState, NULL);
   1672 
   1673     }
   1674  EXIT:
   1675     G722ENC_DPRINT ("%d :: Exiting the G722ENC_LCML_Callback() \n",__LINE__);
   1676     return eError;
   1677 }
   1678 /* -------------------------------------------------------------------*/
   1679 /**
   1680  *  G722ENC_GetCorresponding_LCMLHeader() function will be called by G722ENC_LCML_Callback
   1681  *                                 component to write the msg
   1682  * @param *pBuffer,          Event which gives to details about USN status
   1683  * @param LCML_NBAMRENC_BUFHEADERTYPE **ppLcmlHdr
   1684 
   1685  * @retval OMX_NoError              Success, ready to roll
   1686  *         OMX_Error_BadParameter   The input parameter pointer is null
   1687  **/
   1688 /* -------------------------------------------------------------------*/
   1689 
   1690 OMX_ERRORTYPE G722ENC_GetCorresponding_LCMLHeader(OMX_U8 *pBuffer,
   1691                                                   OMX_DIRTYPE eDir,
   1692                                                   G722ENC_LCML_BUFHEADERTYPE **ppLcmlHdr)
   1693 {
   1694     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1695     G722ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader = NULL;
   1696     int nIpBuf = pComponentPrivate_CC->pInputBufferList->numBuffers;
   1697     int nOpBuf = pComponentPrivate_CC->pOutputBufferList->numBuffers;
   1698     OMX_U16 i = 0;
   1699 
   1700     G722ENC_DPRINT ("%d :: Entering the G722ENC_GetCorresponding_LCMLHeader()\n",__LINE__);
   1701     if(eDir == OMX_DirInput) {
   1702         pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G722ENC_INPUT_PORT];
   1703         for(i=0; i<nIpBuf; i++) {
   1704             if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
   1705                 *ppLcmlHdr = pLcmlBufHeader;
   1706                 G722ENC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__);
   1707                 goto EXIT;
   1708             }
   1709             pLcmlBufHeader++;
   1710         }
   1711     }
   1712     else if (eDir == OMX_DirOutput) {
   1713         pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G722ENC_OUTPUT_PORT];
   1714         for(i=0; i<nOpBuf; i++) {
   1715             if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
   1716                 *ppLcmlHdr = pLcmlBufHeader;
   1717                 G722ENC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__);
   1718                 goto EXIT;
   1719             }
   1720             pLcmlBufHeader++;
   1721         }
   1722     }
   1723     else {
   1724         G722ENC_DPRINT("%d:: Invalid Buffer Type :: exiting...\n",__LINE__);
   1725     }
   1726 
   1727  EXIT:
   1728     G722ENC_DPRINT ("%d :: Exiting the G722ENC_GetCorresponding_LCMLHeader() \n",__LINE__);
   1729     return eError;
   1730 }
   1731 
   1732 
   1733 /* -------------------------------------------------------------------*/
   1734 /**
   1735  *  G722ENC_GetLCMLHandle()
   1736  *
   1737  * @retval OMX_HANDLETYPE
   1738  *
   1739  -------------------------------------------------------------------*/
   1740 
   1741 #ifndef UNDER_CE
   1742 
   1743 OMX_HANDLETYPE G722ENC_GetLCMLHandle()
   1744 {
   1745     void *handle = NULL;
   1746     OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE);
   1747     OMX_HANDLETYPE pHandle = NULL;
   1748     char *error = NULL;
   1749     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1750     handle = dlopen("libLCML.so", RTLD_LAZY);
   1751     if (!handle) {
   1752         fputs(dlerror(), stderr);
   1753         goto EXIT;
   1754     }
   1755 
   1756     fpGetHandle = dlsym (handle, "GetHandle");
   1757     if ((error = dlerror()) != NULL) {
   1758         fputs(error, stderr);
   1759         goto EXIT;
   1760     }
   1761     eError = (*fpGetHandle)(&pHandle);
   1762     if(eError != OMX_ErrorNone) {
   1763         eError = OMX_ErrorUndefined;
   1764         G722ENC_DPRINT("eError != OMX_ErrorNone...\n");
   1765         pHandle = NULL;
   1766         goto EXIT;
   1767     }
   1768 
   1769     pComponentPrivate_CC->lcml_handle = handle;
   1770     pComponentPrivate_CC->bLcmlHandleOpened = 1;
   1771  EXIT:
   1772     return pHandle;
   1773 }
   1774 #else
   1775 
   1776 //WINDOWS Explicit dll load procedure
   1777 
   1778 OMX_HANDLETYPE G722ENC_GetLCMLHandle()
   1779 {
   1780     typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
   1781     OMX_HANDLETYPE pHandle = NULL;
   1782     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1783     HINSTANCE hDLL;               // Handle to DLL
   1784     LPFNDLLFUNC1 fpGetHandle1;
   1785 
   1786 
   1787 
   1788     hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0);
   1789     if (hDLL == NULL)
   1790     {
   1791         //fputs(dlerror(), stderr);
   1792         G722ENC_DPRINT("BML Load Failed!!!\n");
   1793         return pHandle;
   1794     }
   1795 
   1796     fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle"));
   1797     if (!fpGetHandle1)
   1798     {
   1799         // handle the error
   1800         FreeLibrary(hDLL);
   1801         return pHandle;
   1802     }
   1803 
   1804     // call the function
   1805     eError = fpGetHandle1(&pHandle);
   1806     if(eError != OMX_ErrorNone) {
   1807         eError = OMX_ErrorUndefined;
   1808         AMRDEC_DPRINT("eError != OMX_ErrorNone...\n");
   1809         pHandle = NULL;
   1810         return pHandle;
   1811     }
   1812     return pHandle;
   1813 }
   1814 #endif
   1815 
   1816 
   1817 #ifndef UNDER_CE
   1818 OMX_ERRORTYPE G722ENC_FreeLCMLHandle()
   1819 {
   1820 
   1821     int retValue = 0;
   1822     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1823     if (pComponentPrivate_CC->bLcmlHandleOpened) {
   1824         retValue = dlclose(pComponentPrivate_CC->lcml_handle);
   1825 
   1826         if (retValue != 0) {
   1827             eError = OMX_ErrorUndefined;
   1828         }
   1829         pComponentPrivate_CC->bLcmlHandleOpened = 0;
   1830     }
   1831     return eError;
   1832 }
   1833 #else
   1834 OMX_ERRORTYPE G722ENC_FreeLCMLHandle()
   1835 {
   1836 
   1837     int retValue = 0;
   1838     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1839 
   1840     if (pComponentPrivate_CC->bLcmlHandleOpened) {
   1841 
   1842         retValue = FreeLibrary(pComponentPrivate_CC->pLcmlHandle);
   1843         if (retValue == 0) {          /* Zero Indicates failure */
   1844             eError = OMX_ErrorUndefined;
   1845         }
   1846         pComponentPrivate_CC->bLcmlHandleOpened = 0;
   1847     }
   1848     return eError;
   1849 }
   1850 #endif
   1851 
   1852 
   1853 
   1854 /* ================================================================================= */
   1855 /**
   1856  * @fn G722ENC_CommandToIdle() description for G722ENC_CommandToIdle
   1857  G722ENC_CommandToIdle().
   1858  This component is called by HandleCommand() when the component is commanded to Idle
   1859  * @param pComponent  handle for this instance of the component
   1860  *
   1861  * @pre
   1862  *
   1863  * @post
   1864  *
   1865  * @return OMX_ERRORTYPE
   1866  */
   1867 /* ================================================================================ */
   1868 OMX_ERRORTYPE G722ENC_CommandToIdle(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   1869 {
   1870 
   1871     OMX_ERRORTYPE eError = OMX_ErrorNone;
   1872     char *pArgs = "damedesuStr";
   1873     OMX_COMPONENTTYPE *pHandle =
   1874         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
   1875     LCML_CALLBACKTYPE cb;
   1876     LCML_DSP *pLcmlDsp =  NULL;
   1877     char *p = "damedesuStr";
   1878     OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
   1879 
   1880 
   1881 #ifdef G722ENC_DEBUG
   1882     LCML_CODEC_INTERFACE *pp = NULL;
   1883 #endif
   1884 
   1885 
   1886 
   1887     G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Idle \n",__LINE__);
   1888     if (pComponentPrivate->curState == OMX_StateIdle){
   1889         pComponentPrivate->cbInfo.EventHandler (
   1890                                                 pHandle, pHandle->pApplicationPrivate,
   1891                                                 OMX_EventError, OMX_ErrorSameState,0,
   1892                                                 NULL);
   1893         G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
   1894     }
   1895     else if (pComponentPrivate->curState == OMX_StateLoaded ||
   1896              pComponentPrivate->curState == OMX_StateWaitForResources) {
   1897         if (pComponentPrivate->dasfmode == 1)
   1898         {
   1899             if(pComponentPrivate->streamID == 0)
   1900             {
   1901                 eError = OMX_ErrorInsufficientResources;
   1902                 G722ENC_DPRINT("OMX_ErrorInsufficientResources.\n");
   1903                 pComponentPrivate->curState = OMX_StateInvalid;
   1904                 pComponentPrivate->cbInfo.EventHandler(
   1905                                                        pHandle, pHandle->pApplicationPrivate,
   1906                                                        OMX_EventError, OMX_ErrorInvalidState,0, NULL);
   1907                 goto EXIT;
   1908             }
   1909         }
   1910         if (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled == OMX_TRUE
   1911             && pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled == OMX_TRUE)
   1912         {
   1913             if (!(pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated)
   1914                 && !(pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated))
   1915             {
   1916                 pComponentPrivate->InLoaded_readytoidle = 1;
   1917 #ifndef UNDER_CE
   1918                 pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
   1919                 pthread_cond_wait(&pComponentPrivate->InLoaded_threshold,
   1920                                   &pComponentPrivate->InLoaded_mutex);
   1921                 pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
   1922 #else
   1923                 OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event));
   1924 #endif
   1925             }
   1926         }
   1927 
   1928         pLcmlHandle = (OMX_HANDLETYPE) G722ENC_GetLCMLHandle();
   1929 
   1930         if (pLcmlHandle == NULL)
   1931         {
   1932             G722ENC_DPRINT("LCML Handle is NULL........exiting..\n");
   1933             goto EXIT;
   1934         }
   1935 
   1936         /* Got handle of dsp via phandle filling information about DSP Specific things */
   1937         pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
   1938 
   1939         eError = G722ENC_Fill_LCMLInitParams(pHandle, pLcmlDsp);
   1940         if(eError != OMX_ErrorNone)
   1941         {
   1942             G722ENC_DPRINT("from G722ENCFill_LCMLInitParams().\n");
   1943             goto EXIT;
   1944         }
   1945 
   1946         pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle;
   1947         cb.LCML_Callback = (void *) G722ENC_LCML_Callback;
   1948 
   1949 #ifndef UNDER_CE
   1950         eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   1951                                     p, &pLcmlHandle, (void *)p,
   1952                                     &cb, (OMX_STRING)pComponentPrivate->sDeviceString);
   1953 
   1954 #else
   1955         eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   1956                                   p, &pLcmlHandle, (void *)p,
   1957                                   &cb);
   1958 #endif
   1959         if(eError != OMX_ErrorNone)
   1960         {
   1961             G722ENC_DPRINT("from LCML_Init().\n");
   1962             goto EXIT;
   1963         }
   1964 
   1965 #ifdef HASHINGENABLE
   1966         /* Enable the Hashing Code */
   1967         eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, OMX_TRUE);
   1968         if (eError != OMX_ErrorNone) {
   1969             G722ENC_DPRINT("Failed to set Mapping State\n");
   1970             goto EXIT;
   1971         }
   1972 #endif
   1973         pComponentPrivate->curState = OMX_StateIdle;
   1974 
   1975 #ifdef __PERF_INSTRUMENTATION__
   1976         PERF_Boundary(pComponentPrivate->pPERFcomp,
   1977                       PERF_BoundaryComplete | PERF_BoundarySetup);
   1978 #endif
   1979         pComponentPrivate->cbInfo.EventHandler(pHandle,
   1980                                                pHandle->pApplicationPrivate,
   1981                                                OMX_EventCmdComplete,
   1982                                                OMX_CommandStateSet,
   1983                                                pComponentPrivate->curState,
   1984                                                NULL);
   1985 
   1986 
   1987     }
   1988     else if (pComponentPrivate->curState == OMX_StateExecuting) {
   1989 #ifdef HASHINGENABLE
   1990         /*Hashing Change*/
   1991         pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
   1992         /* clear out any mappings that might have accumulated */
   1993         eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
   1994         if (eError != OMX_ErrorNone) {
   1995             prinft("Error occurred in Codec mapping flush!\n");
   1996             goto EXIT;
   1997         }
   1998 #endif
   1999 
   2000         G722ENC_DPRINT("%d :: In G722ENC_HandleCommand: Stopping the codec\n",__LINE__);
   2001         G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2002         G722ENC_DPRINT("%d: Calling Codec Stop..\n");
   2003         eError = LCML_ControlCodec(
   2004                                    ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2005                                    MMCodecControlStop,(void *)pArgs);
   2006         G722ENC_DPRINT("Called Codec Stop..\n");
   2007         if(eError != OMX_ErrorNone) {
   2008             G722ENC_DPRINT("%d: Error Occurred in Codec Stop..\n",__LINE__);
   2009             goto EXIT;
   2010         }
   2011 
   2012         G722ENC_DPRINT ("%d :: The component is stopped\n",__LINE__);
   2013         /*      pComponentPrivate->bIdleCommandPending = 1;*/
   2014     }
   2015     else if(pComponentPrivate->curState == OMX_StatePause) {
   2016 #ifdef HASHINGENABLE
   2017         /*Hashing Change*/
   2018         pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
   2019         /* clear out any mappings that might have accumulated */
   2020         eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
   2021         if (eError != OMX_ErrorNone) {
   2022             G722ENC_DPRINT("Error occurred in Codec mapping flush!\n");
   2023             goto EXIT;
   2024         }
   2025 #endif
   2026 
   2027         G722ENC_DPRINT("%d :: Comp: Stop Command Received\n",__LINE__);
   2028         G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2029         pComponentPrivate->curState = OMX_StateIdle;
   2030         G722ENC_DPRINT ("%d :: The component is stopped\n",__LINE__);
   2031         pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
   2032                                                OMX_EventCmdComplete, OMX_CommandStateSet, pComponentPrivate->curState, NULL);
   2033 
   2034     }
   2035     else {
   2036         G722ENC_DPRINT("%d: Comp: Sending ErrorNotification: Invalid State\n",__LINE__);
   2037         pComponentPrivate->cbInfo.EventHandler(
   2038                                                pHandle,
   2039                                                pHandle->pApplicationPrivate,
   2040                                                OMX_EventError,
   2041                                                OMX_ErrorIncorrectStateTransition, 0,
   2042                                                "Invalid State Error");
   2043     }
   2044  EXIT:
   2045     return eError;
   2046 }
   2047 
   2048 /* ================================================================================= */
   2049 /**
   2050  * @fn G722ENC_CommandToLoaded() description for G722ENC_CommandToLoaded
   2051  G722ENC_CommandToLoaded().
   2052  This component is called by HandleCommand() when the component is commanded to Loaded
   2053  * @param pComponent  handle for this instance of the component
   2054  *
   2055  * @pre
   2056  *
   2057  * @post
   2058  *
   2059  * @return OMX_ERRORTYPE
   2060  */
   2061 /* ================================================================================ */
   2062 OMX_ERRORTYPE G722ENC_CommandToLoaded(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   2063 {
   2064     OMX_ERRORTYPE eError = OMX_ErrorNone;
   2065     char *pArgs = "damedesuStr";
   2066     OMX_COMPONENTTYPE *pHandle =
   2067         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
   2068     OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
   2069     G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
   2070     OMX_U16 i = 0;
   2071 
   2072 
   2073     G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Loaded\n",__LINE__);
   2074     if (pComponentPrivate->curState == OMX_StateLoaded){
   2075         pComponentPrivate->cbInfo.EventHandler (
   2076                                                 pHandle, pHandle->pApplicationPrivate,
   2077                                                 OMX_EventError, OMX_ErrorSameState,0,
   2078                                                 NULL);
   2079         G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
   2080         goto EXIT;
   2081     }
   2082     if (pComponentPrivate->curState == OMX_StateWaitForResources ) {
   2083         pComponentPrivate->curState = OMX_StateLoaded;
   2084         pComponentPrivate->cbInfo.EventHandler (
   2085                                                 pHandle, pHandle->pApplicationPrivate,
   2086                                                 OMX_EventCmdComplete, OMX_CommandStateSet,pComponentPrivate->curState,
   2087                                                 NULL);
   2088         G722ENC_DPRINT("%d :: Transitioning from WaitFor to Loaded\n",__LINE__);
   2089         goto EXIT;
   2090     }
   2091 
   2092     if (pComponentPrivate->curState != OMX_StateIdle) {
   2093         pComponentPrivate->cbInfo.EventHandler (
   2094                                                 pHandle, pHandle->pApplicationPrivate,
   2095                                                 OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
   2096                                                 "Invalid State");
   2097         G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
   2098         goto EXIT;
   2099     }
   2100 
   2101     G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2102     G722ENC_DPRINT("%d: G722ENCUTILS::Current State = %d\n",__LINE__,pComponentPrivate->curState);
   2103     G722ENC_DPRINT("pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers);
   2104     G722ENC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers);
   2105 
   2106     if (pComponentPrivate->pInputBufferList->numBuffers ||
   2107         pComponentPrivate->pOutputBufferList->numBuffers){
   2108         pComponentPrivate->InIdle_goingtoloaded = 1;
   2109 #ifndef UNDER_CE
   2110         pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
   2111         pthread_cond_wait(&pComponentPrivate->InIdle_threshold, &pComponentPrivate->InIdle_mutex);
   2112         pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
   2113 #else
   2114         OMX_WaitForEvent(&(pComponentPrivate->InIdle_event));
   2115 #endif
   2116         pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
   2117     }
   2118 
   2119     pComponentPrivate->curState = OMX_StateLoaded;
   2120     G722ENC_DPRINT("About to destroy codec\n");
   2121     eError = LCML_ControlCodec(
   2122                                ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2123                                EMMCodecControlDestroy,(void *)pArgs);
   2124     G722ENC_DPRINT("Finished destroying codec\n");
   2125 
   2126     pComponentPrivate->bStreamCtrlCalled = 0;
   2127 
   2128     if (eError != OMX_ErrorNone) {
   2129         G722ENC_DPRINT("%d : Error: in Destroying the codec\n",__LINE__);
   2130 
   2131         goto EXIT;
   2132     }
   2133 
   2134     if (pComponentPrivate->pCreatePhaseArgs == NULL) {
   2135         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pCreatePhaseArgs);
   2136         free(pComponentPrivate->pCreatePhaseArgs);
   2137         pComponentPrivate->pCreatePhaseArgs = NULL;
   2138     }
   2139 
   2140     pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT];
   2141     for(i=0; i<pComponentPrivate->noInitInputBuf; i++) {
   2142         if (pTemp_lcml->pIpParam) {
   2143             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml->pIpParam);
   2144             free(pTemp_lcml->pIpParam);
   2145             pTemp_lcml->pIpParam = NULL;
   2146         }
   2147         pTemp_lcml++;
   2148     }
   2149     G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
   2150 
   2151 
   2152     G722ENC_DPRINT("pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = %p\n",pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
   2153     if (pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]) {
   2154         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
   2155         free(pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
   2156         pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = NULL;
   2157     }
   2158 
   2159     G722ENC_DPRINT("freeing pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = 0x%x\n",pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
   2160 
   2161     G722ENC_DPRINT("pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = %p\n",pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
   2162 
   2163     if (pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]) {
   2164         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
   2165         free(pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
   2166         pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = NULL;
   2167     }
   2168 
   2169     if (pComponentPrivate->strmAttr) {
   2170         G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->strmAttr);
   2171         free(pComponentPrivate->strmAttr);
   2172         pComponentPrivate->strmAttr = NULL;
   2173     }
   2174     eError = EXIT_COMPONENT_THRD;
   2175     pComponentPrivate->bInitParamsInitialized = 0;
   2176 
   2177  EXIT:
   2178     return eError;
   2179 }
   2180 
   2181 /* ================================================================================= */
   2182 /**
   2183  * @fn G722ENC_CommandToExecuting() description for G722ENC_CommandToExecuting
   2184  G722ENC_CommandToExecuting().
   2185  This component is called by HandleCommand() when the component is commanded to Executing
   2186  * @param pComponent  handle for this instance of the component
   2187  *
   2188  * @pre
   2189  *
   2190  * @post
   2191  *
   2192  * @return OMX_ERRORTYPE
   2193  */
   2194 /* ================================================================================ */
   2195 OMX_ERRORTYPE G722ENC_CommandToExecuting(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   2196 {
   2197     OMX_U16 i = 0;
   2198     OMX_ERRORTYPE eError = OMX_ErrorNone;
   2199     char *pArgs = "damedesuStr";
   2200     OMX_BUFFERHEADERTYPE *pBufHdr = NULL;
   2201     OMX_U32 nBuf = 0;
   2202     OMX_COMPONENTTYPE *pHandle =
   2203         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
   2204     OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
   2205     G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
   2206 
   2207     G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Executing \n",__LINE__);
   2208     pComponentPrivate->bBypassDSP = 0;
   2209     if (pComponentPrivate->curState == OMX_StateExecuting){
   2210         pComponentPrivate->cbInfo.EventHandler (
   2211                                                 pHandle, pHandle->pApplicationPrivate,
   2212                                                 OMX_EventError, OMX_ErrorSameState,0,
   2213                                                 NULL);
   2214         G722ENC_DPRINT("%d :: Error: Same State Given by \
   2215                                Application\n",__LINE__);
   2216     }
   2217     else if (pComponentPrivate->curState == OMX_StateIdle) {
   2218         if(pComponentPrivate->dasfmode == 1 && pComponentPrivate->bStreamCtrlCalled == 0) {
   2219             G722ENC_DPRINT("%d :: G722 ENCODER IS RUNNING UNDER DASF MODE\n",__LINE__);
   2220             G722ENC_DPRINT("%d :: ---- Comp: DASF Functionality is ON ---\n",__LINE__);
   2221 
   2222             pComponentPrivate->pParams->iAudioFormat = (unsigned short)pComponentPrivate->g722Params->nChannels;
   2223             pComponentPrivate->pParams->iStrmId = pComponentPrivate->streamID;
   2224             pComponentPrivate->pParams->iSamplingRate = G722ENC_SAMPLE_RATE;
   2225 
   2226             G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iAudioFormat   = %d\n",__LINE__,pComponentPrivate->pParams->iAudioFormat);
   2227             G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iSamplingRate  = %d\n",__LINE__,pComponentPrivate->pParams->iSamplingRate);
   2228             G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iStrmId = %d\n",__LINE__,pComponentPrivate->pParams->iStrmId);
   2229 
   2230             pValues[0] = USN_STRMCMD_SETCODECPARAMS;
   2231             pValues[1] = (OMX_U32)pComponentPrivate->pParams;
   2232             pValues[2] = sizeof(G722ENC_AudioCodecParams);
   2233 
   2234             G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2235             eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2236                                        EMMCodecControlStrmCtrl,(void *)pValues);
   2237             if(eError != OMX_ErrorNone) {
   2238                 G722ENC_DPRINT("%d: Error Occurred in Codec StreamControl..\n",__LINE__);
   2239                 goto EXIT;
   2240             }
   2241         }
   2242 
   2243         G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2244         eError = LCML_ControlCodec(
   2245                                    ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2246                                    EMMCodecControlStart,(void *)pArgs);
   2247         if(eError != OMX_ErrorNone) {
   2248             G722ENC_DPRINT("%d: Error Occurred in Codec Start..\n",__LINE__);
   2249             goto EXIT;
   2250         }
   2251         nBuf = pComponentPrivate->pInputBufferList->numBuffers;
   2252 
   2253         if(pComponentPrivate->dasfmode == 0) {
   2254             G722ENC_DPRINT ("%d :: Comp :: After LCML_StartCodec function \n",__LINE__);
   2255             nBuf = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferCountActual;
   2256             pBufHdr = pComponentPrivate->pBufHeader[G722ENC_INPUT_PORT];
   2257             G722ENC_DPRINT ("%d :: Comp :: After LCML_StartCodec function \n",__LINE__);
   2258             G722ENC_DPRINT ("Sending Input buffer to Application\n");
   2259             G722ENC_DPRINT ("%d :: Component Sending Input buffer to Application %p\n",__LINE__, pBufHdr);
   2260             pLcmlHdr = pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT];
   2261         }
   2262     }
   2263     else if (pComponentPrivate->curState == OMX_StatePause) {
   2264         G722ENC_DPRINT("%d: Comp: Resume Command Came from App\n",__LINE__);
   2265         G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2266         eError = LCML_ControlCodec(
   2267                                    ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2268                                    EMMCodecControlStart,(void *)pArgs);
   2269 
   2270         if (eError != OMX_ErrorNone) {
   2271             G722ENC_DPRINT ("Error While Resuming the codec\n");
   2272             goto EXIT;
   2273         }
   2274 
   2275         G722ENC_DPRINT("pComponentPrivate->nNumInputBufPending = %d\n",pComponentPrivate->nNumInputBufPending);
   2276         if (pComponentPrivate->nNumInputBufPending < pComponentPrivate->pInputBufferList->numBuffers) {
   2277             pComponentPrivate->nNumInputBufPending = pComponentPrivate->pInputBufferList->numBuffers;
   2278         }
   2279 
   2280         for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
   2281             if (pComponentPrivate->pInputBufHdrPending[i]) {
   2282                 if (!G722ENC_IsPending(pComponentPrivate, pComponentPrivate->pInputBufHdrPending[i], OMX_DirInput)) {
   2283                     G722ENC_GetCorresponding_LCMLHeader(pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
   2284                     G722ENC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput);
   2285 
   2286                     eError = LCML_QueueBuffer(
   2287                                               ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2288                                               EMMCodecInputBuffer,
   2289                                               pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
   2290                                               pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
   2291                                               pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
   2292                                               (OMX_U8 *) pLcmlHdr->pIpParam,
   2293                                               sizeof(G722ENC_UAlgInBufParamStruct),
   2294                                               pComponentPrivate->pInputBufHdrPending[i]->pBuffer);
   2295                 }
   2296             }
   2297         }
   2298 
   2299         for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
   2300             if (pComponentPrivate->pOutputBufHdrPending[i]) {
   2301                 if (!G722ENC_IsPending(pComponentPrivate, pComponentPrivate->pOutputBufHdrPending[i], OMX_DirOutput)) {
   2302                     G722ENC_GetCorresponding_LCMLHeader(pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, OMX_DirOutput, &pLcmlHdr);
   2303                     G722ENC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],OMX_DirOutput);
   2304 
   2305                     eError = LCML_QueueBuffer(
   2306                                               ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2307                                               EMMCodecOuputBuffer,
   2308                                               pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
   2309                                               pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
   2310                                               pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen,
   2311                                               NULL,
   2312                                               0,
   2313                                               pComponentPrivate->pOutputBufHdrPending[i]->pBuffer);
   2314 
   2315 
   2316                 }
   2317             }
   2318         }
   2319     }
   2320     else {
   2321         pComponentPrivate->cbInfo.EventHandler (
   2322                                                 pHandle, pHandle->pApplicationPrivate,
   2323                                                 OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
   2324                                                 "Invalid State");
   2325         G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
   2326         goto EXIT;
   2327     }
   2328     pComponentPrivate->curState = OMX_StateExecuting;
   2329     pComponentPrivate->cbInfo.EventHandler(pHandle,
   2330                                            pHandle->pApplicationPrivate,
   2331                                            OMX_EventCmdComplete,
   2332                                            OMX_CommandStateSet, pComponentPrivate->curState, NULL);
   2333  EXIT:
   2334     return eError;
   2335 }
   2336 
   2337 /* ================================================================================= */
   2338 /**
   2339  * @fn G722ENC_CommandToPause() description for G722ENC_CommandToPause
   2340  G722ENC_CommandToPause().
   2341  This component is called by HandleCommand() when the component is commanded to Paused
   2342  * @param pComponent  handle for this instance of the component
   2343  *
   2344  * @pre
   2345  *
   2346  * @post
   2347  *
   2348  * @return OMX_ERRORTYPE
   2349  */
   2350 /* ================================================================================ */
   2351 OMX_ERRORTYPE G722ENC_CommandToPause(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   2352 {
   2353     OMX_ERRORTYPE eError = OMX_ErrorNone;
   2354     char *pArgs = "damedesuStr";
   2355     OMX_COMPONENTTYPE *pHandle =
   2356         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
   2357     OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
   2358 
   2359     G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Pause: Cur State = %d\n",__LINE__,pComponentPrivate->curState);
   2360     if (pComponentPrivate->curState == OMX_StatePause){
   2361         pComponentPrivate->cbInfo.EventHandler (
   2362                                                 pHandle, pHandle->pApplicationPrivate,
   2363                                                 OMX_EventError, OMX_ErrorSameState,0,
   2364                                                 NULL);
   2365         G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
   2366         goto EXIT;
   2367     }
   2368     if ((pComponentPrivate->curState != OMX_StateExecuting) &&
   2369         (pComponentPrivate->curState != OMX_StateIdle)) {
   2370 
   2371         pComponentPrivate->cbInfo.EventHandler (
   2372                                                 pHandle, pHandle->pApplicationPrivate,
   2373                                                 OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
   2374                                                 "Invalid State");
   2375 
   2376         G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
   2377         goto EXIT;
   2378     }
   2379 
   2380     G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
   2381     eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
   2382                                EMMCodecControlPause,(void *)pArgs);
   2383 
   2384     if (eError != OMX_ErrorNone) {
   2385         G722ENC_DPRINT("%d : Error: in Pausing the codec\n",__LINE__);
   2386         goto EXIT;
   2387     }
   2388 
   2389     pComponentPrivate->curState = OMX_StatePause;
   2390     /*    pComponentPrivate->cbInfo.EventHandler(pHandle,
   2391           pHandle->pApplicationPrivate,
   2392           OMX_EventCmdComplete,
   2393           OMX_CommandStateSet,
   2394           pComponentPrivate->curState,
   2395           NULL); */
   2396     G722ENC_DPRINT("%d :: Component: Codec Is Paused\n",__LINE__);
   2397  EXIT:
   2398     return eError;
   2399 }
   2400 
   2401 
   2402 
   2403 /* ================================================================================= */
   2404 /**
   2405  * @fn G722ENC_CommandToWaitForResources() description for G722ENC_CommandToWaitForResources
   2406  G722ENC_CommandToWaitForResources().
   2407  This component is called by HandleCommand() when the component is commanded
   2408  to WaitForResources
   2409  * @param pComponent  handle for this instance of the component
   2410  *
   2411  * @pre
   2412  *
   2413  * @post
   2414  *
   2415  * @return OMX_ERRORTYPE
   2416  */
   2417 /* ================================================================================ */
   2418 OMX_ERRORTYPE G722ENC_CommandToWaitForResources(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
   2419 {
   2420     OMX_ERRORTYPE eError = OMX_ErrorNone;
   2421     OMX_COMPONENTTYPE *pHandle =
   2422         (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
   2423 
   2424     G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd : OMX_StateWaitForResources\n",__LINE__);
   2425     if (pComponentPrivate->curState == OMX_StateWaitForResources){
   2426         G722ENC_DPRINT("%d :: Comp: OMX_AmrDecUtils.c\n",__LINE__);
   2427         pComponentPrivate->cbInfo.EventHandler (
   2428                                                 pHandle, pHandle->pApplicationPrivate,
   2429                                                 OMX_EventError, OMX_ErrorSameState,0,
   2430                                                 NULL);
   2431         G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
   2432         goto EXIT;
   2433     }
   2434     else if (pComponentPrivate->curState == OMX_StateLoaded) {
   2435         pComponentPrivate->curState = OMX_StateWaitForResources;
   2436         G722ENC_DPRINT("%d: Transitioning from Loaded to OMX_StateWaitForResources\n",__LINE__);
   2437         pComponentPrivate->cbInfo.EventHandler(
   2438                                                pHandle, pHandle->pApplicationPrivate,
   2439                                                OMX_EventCmdComplete,
   2440                                                OMX_CommandStateSet,pComponentPrivate->curState, NULL);
   2441         goto EXIT;
   2442     }
   2443     else {
   2444         pComponentPrivate->cbInfo.EventHandler(
   2445                                                pHandle, pHandle->pApplicationPrivate,
   2446                                                OMX_EventError, OMX_ErrorIncorrectStateTransition,0, NULL);
   2447     }
   2448  EXIT:
   2449     return eError;
   2450 }
   2451 
   2452 
   2453 /* ================================================================================= */
   2454 /**
   2455  * @fn G722ENC_SetPending() description for G722ENC_SetPending
   2456  G722ENC_SetPending().
   2457  This component is called when a buffer is queued to the LCML
   2458  * @param pComponent  handle for this instance of the component
   2459  *
   2460  * @pre
   2461  *
   2462  * @post
   2463  *
   2464  * @return OMX_ERRORTYPE
   2465  */
   2466 /* ================================================================================ */
   2467 void G722ENC_SetPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
   2468 {
   2469     OMX_U16 i = 0;
   2470 
   2471     if (eDir == OMX_DirInput) {
   2472         for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
   2473             if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
   2474                 pComponentPrivate->pInputBufferList->bBufferPending[i] = 1;
   2475                 G722ENC_DPRINT("*******************INPUT BUFFER %d IS PENDING ******************************\n",i);
   2476             }
   2477         }
   2478     }
   2479     else {
   2480         for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
   2481             if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
   2482                 pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1;
   2483                 G722ENC_DPRINT("*******************OUTPUT BUFFER %d IS PENDING******************************\n",i);
   2484             }
   2485         }
   2486     }
   2487 }
   2488 
   2489 /* ================================================================================= */
   2490 /**
   2491  * @fn G722ENC_ClearPending() description for G722ENC_ClearPending
   2492  G722ENC_ClearPending().
   2493  This component is called when a buffer is returned from the LCML
   2494  * @param pComponent  handle for this instance of the component
   2495  *
   2496  * @pre
   2497  *
   2498  * @post
   2499  *
   2500  * @return OMX_ERRORTYPE
   2501  */
   2502 /* ================================================================================ */
   2503 void G722ENC_ClearPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
   2504 {
   2505     OMX_U16 i = 0;
   2506 
   2507     if (eDir == OMX_DirInput) {
   2508         for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
   2509             if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
   2510                 pComponentPrivate->pInputBufferList->bBufferPending[i] = 0;
   2511                 G722ENC_DPRINT("*******************INPUT BUFFER %d IS RECLAIMED******************************\n",i);
   2512             }
   2513         }
   2514     }
   2515     else {
   2516         for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
   2517             if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
   2518                 pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0;
   2519                 G722ENC_DPRINT("*******************OUTPUT BUFFER %d IS RECLAIMED ******************************\n",i);
   2520             }
   2521         }
   2522     }
   2523 }
   2524 
   2525 /* ================================================================================= */
   2526 /**
   2527  * @fn G722ENC_IsPending() description for G722ENC_IsPending
   2528  G722ENC_IsPending().
   2529  This method returns the pending status to the buffer
   2530  * @param pComponent  handle for this instance of the component
   2531  *
   2532  * @pre
   2533  *
   2534  * @post
   2535  *
   2536  * @return OMX_ERRORTYPE
   2537  */
   2538 /* ================================================================================ */
   2539 OMX_U32 G722ENC_IsPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
   2540 {
   2541     OMX_U16 i = 0;
   2542 
   2543     if (eDir == OMX_DirInput) {
   2544         for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
   2545             if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
   2546                 return pComponentPrivate->pInputBufferList->bBufferPending[i];
   2547             }
   2548         }
   2549     }
   2550     else {
   2551         for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
   2552             if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
   2553                 return pComponentPrivate->pOutputBufferList->bBufferPending[i];
   2554             }
   2555         }
   2556     }
   2557     return -1;
   2558 }
   2559 
   2560 /* ================================================================================= */
   2561 /**
   2562  * @fn G722ENC_Fill_LCMLInitParamsEx() description for G722ENC_Fill_LCMLInitParamsEx
   2563  G722ENC_Fill_LCMLInitParamsEx().
   2564  This method fills the LCML init parameters.
   2565  * @param pComponent  handle for this instance of the component
   2566  *
   2567  * @pre
   2568  *
   2569  * @post
   2570  *
   2571  * @return OMX_ERRORTYPE
   2572  */
   2573 /* ================================================================================ */
   2574 OMX_ERRORTYPE G722ENC_Fill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent)
   2575 {
   2576     OMX_ERRORTYPE eError = OMX_ErrorNone;
   2577     OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
   2578     OMX_BUFFERHEADERTYPE *pTemp = NULL;
   2579     OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
   2580     G722ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate;
   2581     LCML_STRMATTR *strmAttr = NULL;
   2582     G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
   2583     OMX_U16 i = 0;
   2584     OMX_U32 size_lcml = 0;
   2585 
   2586     G722ENC_DPRINT("%d :: G722ENCFill_LCMLInitParamsEx\n ",__LINE__);
   2587     G722ENC_DPRINT("[G722ENC_Fill_LCMLInitParamsEx] pComponent = %p\n",pComponent);
   2588     G722ENC_DPRINT("[G722ENC_Fill_LCMLInitParamsEx] pComponentPrivate = %p\n",pComponentPrivate);
   2589 
   2590 
   2591     nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
   2592     nIpBufSize = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferSize;
   2593     nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
   2594     nOpBufSize = pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->nBufferSize;
   2595 
   2596     G722ENC_DPRINT("%d :: ------ Buffer Details -----------\n",__LINE__);
   2597     G722ENC_DPRINT("%d :: Input  Buffer Count = %ld\n",__LINE__,nIpBuf);
   2598     G722ENC_DPRINT("%d :: Input  Buffer Size = %ld\n",__LINE__,nIpBufSize);
   2599     G722ENC_DPRINT("%d :: Output Buffer Count = %ld\n",__LINE__,nOpBuf);
   2600     G722ENC_DPRINT("%d :: Output Buffer Size = %ld\n",__LINE__,nOpBufSize);
   2601     G722ENC_DPRINT("%d :: ------ Buffer Details ------------\n",__LINE__);
   2602 
   2603     /* Allocate memory for all input buffer headers..
   2604      * This memory pointer will be sent to LCML */
   2605     size_lcml = nIpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
   2606     pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
   2607     G722ENC_MEMPRINT("%d :: [ALLOC] %p\n",__LINE__,pTemp_lcml);
   2608     if(pTemp_lcml == NULL) {
   2609         G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
   2610         eError = OMX_ErrorInsufficientResources;
   2611         goto EXIT;
   2612     }
   2613     pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = pTemp_lcml;
   2614     for (i=0; i<nIpBuf; i++) {
   2615         G722ENC_DPRINT("%d :: INPUT--------- Inside Ip Loop\n",__LINE__);
   2616         pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
   2617         pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
   2618         pTemp->nAllocLen = nIpBufSize;
   2619         pTemp->nFilledLen = nIpBufSize;
   2620         pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
   2621         pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
   2622         pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
   2623         pTemp->nTickCount = NOT_USED;
   2624         pTemp_lcml->pBufHdr = pTemp;
   2625         G722ENC_DPRINT("%d :: pTemp_lcml->pBufHdr->pBuffer = %p \n",__LINE__,pTemp_lcml->pBufHdr->pBuffer);
   2626         pTemp_lcml->eDir = OMX_DirInput;
   2627         pTemp_lcml->pOtherParams[i] = NULL;
   2628         pTemp_lcml->pIpParam = (G722ENC_UAlgInBufParamStruct *)malloc(sizeof(G722ENC_UAlgInBufParamStruct));
   2629 
   2630         G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml->pIpParam);
   2631         if (pTemp_lcml->pIpParam == NULL) {
   2632             /* Free previously allocated memory before bailing */
   2633             if (strmAttr) {
   2634                 G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
   2635                 free(strmAttr);
   2636                 strmAttr = NULL;
   2637             }
   2638 
   2639 
   2640             if (pTemp_lcml) {
   2641                 G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml);
   2642                 free(pTemp_lcml);
   2643                 pTemp_lcml = NULL;
   2644             }
   2645 
   2646             G722ENC_DPRINT("%d :: Error: Malloc Failed...Exiting..\n",__LINE__);
   2647             goto EXIT;
   2648         }
   2649         pTemp_lcml->pIpParam->bLastBuffer = 0;
   2650 
   2651         pTemp->nFlags = NORMAL_BUFFER;
   2652         ((G722ENC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
   2653         G722ENC_DPRINT("%d ::Comp: InBuffHeader[%d] = %p\n", __LINE__, i, pTemp);
   2654         G722ENC_DPRINT("%d ::Comp:  >>>> InputBuffHeader[%d]->pBuffer = %p\n",
   2655                        __LINE__, i, pTemp->pBuffer);
   2656         G722ENC_DPRINT("%d ::Comp: Ip : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
   2657 
   2658         pTemp_lcml++;
   2659     }
   2660 
   2661     pTemp = pComponentPrivate->pBufHeader[G722ENC_OUTPUT_PORT];
   2662     size_lcml = nOpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
   2663     pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
   2664     G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
   2665     if(pTemp_lcml == NULL) {
   2666         G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
   2667         /* Free previously allocated memory before bailing */
   2668         if (strmAttr) {
   2669             G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
   2670             free(strmAttr);
   2671             strmAttr = NULL;
   2672         }
   2673 
   2674         eError = OMX_ErrorInsufficientResources;
   2675         goto EXIT;
   2676     }
   2677     pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = pTemp_lcml;
   2678 
   2679     for (i=0; i<nOpBuf; i++) {
   2680         pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
   2681         pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
   2682         pTemp->nAllocLen = nOpBufSize;
   2683         pTemp->nFilledLen = nOpBufSize;
   2684         pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
   2685         pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
   2686         pComponentPrivate->nVersion = pTemp->nVersion.nVersion;
   2687         pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
   2688         pTemp->nTickCount = NOT_USED;
   2689         pTemp_lcml->pBufHdr = pTemp;
   2690         pTemp_lcml->eDir = OMX_DirOutput;
   2691         pTemp_lcml->pOtherParams[i] = NULL;
   2692 
   2693         pTemp->nFlags = NORMAL_BUFFER;
   2694         ((G722ENC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
   2695         G722ENC_DPRINT("%d ::Comp:  >>>>>>>>>>>>> OutBuffHeader[%d] = %p\n",
   2696                        __LINE__, i, pTemp);
   2697         G722ENC_DPRINT("%d ::Comp:  >>>> OutBuffHeader[%d]->pBuffer = %p\n",
   2698                        __LINE__, i, pTemp->pBuffer);
   2699         G722ENC_DPRINT("%d ::Comp: Op : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
   2700         pTemp++;
   2701         pTemp_lcml++;
   2702     }
   2703     pComponentPrivate->bPortDefsAllocated = 1;
   2704 
   2705     G722ENC_DPRINT("%d :: Exiting G722ENC_Fill_LCMLInitParams",__LINE__);
   2706 
   2707     pComponentPrivate->bInitParamsInitialized = 1;
   2708  EXIT:
   2709     return eError;
   2710 }
   2711 
   2712 
   2713 /* ================================================================================= */
   2714 /**
   2715  * @fn G722ENC_IsValid() description for G722ENC_Fill_LCMLInitParamsEx
   2716  G722ENC_IsValid().
   2717  This method checks to see if a buffer returned from the LCML is valid.
   2718  * @param pComponent  handle for this instance of the component
   2719  *
   2720  * @pre
   2721  *
   2722  * @post
   2723  *
   2724  * @return OMX_ERRORTYPE
   2725  */
   2726 /* ================================================================================ */
   2727 OMX_U32 G722ENC_IsValid(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir)
   2728 {
   2729     OMX_U16 i = 0;
   2730     int found=0;
   2731 
   2732     if (eDir == OMX_DirInput) {
   2733         for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
   2734             if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) {
   2735                 found = 1;
   2736             }
   2737         }
   2738     }
   2739     else {
   2740         for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
   2741             if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) {
   2742                 found = 1;
   2743             }
   2744         }
   2745     }
   2746     return found;
   2747 }
   2748 
   2749