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