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