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