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