1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =============================================================================
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *             Texas Instruments OMAP (TM) Platform Software
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Use of this software is controlled by the terms and conditions found
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  in the license agreement under which this software has been supplied.
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * =========================================================================== */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @file OMX_Mp3Dec_Utils.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This file implements various utilitiy functions for various activities
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * like handling command from application, callback from LCML etc.
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\mp3_dec\src
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @rev  1.0
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----------------------------------------------------------------------------
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *!
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! Revision History
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! ===================================
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! 21-sept-2006 bk: updated some review findings for alpha release
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *! This is newest file
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * =========================================================================== */
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  INCLUDE FILES
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ****************************************************************/
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <wchar.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/wait.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/stat.h>
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <malloc.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <memory.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*------- Program Header Files -----------------------------------------------*/
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_DspCodec.h"
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_Mp3Dec_Utils.h"
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "mp3decsocket_ti.h"
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <decode_common_ti.h>
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "usn.h"
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <ResourceManagerProxyAPI.h>
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define HASHINGENABLE 1
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinHINSTANCE g_hLcmlDllHandle = NULL;
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid sleep(DWORD Duration)
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Sleep(Duration);
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_Fill_LCMLInitParams() fills the LCML initialization structure.
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core.
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param plcml_Init This structure is filled and sent to LCML.
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the LCML struct.
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent,LCML_DSP *plcml_Init,OMX_U16 arr[])
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize;
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 i;
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp = NULL;
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate =(MP3DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pTemp_lcml;
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 size_lcml;
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *ptr;
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nRuntimeInputBuffers = 0;
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nRuntimeOutputBuffers = 0;
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entered MP3DEC_Fill_LCMLInitParams\n");
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, ":::pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated = %d\n",
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated);
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, ":::pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = %d\n",
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled);
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, ":::pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated = %d\n",
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated);
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, ":::pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled = %d\n",
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled);
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nRuntimeInputBuffers = nIpBuf;
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nRuntimeOutputBuffers = nOpBuf;
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->nBufferSize;
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->nBufferSize;
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Input Buffer Count = %ld\n",nIpBuf);
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Input Buffer Size = %ld\n",nIpBufSize);
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Output Buffer Count = %ld\n",nOpBuf);
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Output Buffer Size = %ld\n",nOpBufSize);
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->In_BufInfo.nBuffers = nIpBuf;
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->In_BufInfo.nSize = nIpBufSize;
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD;
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Out_BufInfo.nBuffers = nOpBuf;
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Out_BufInfo.nSize = nOpBufSize;
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD;
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.nNumOfDLLs = 3;
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0, sizeof(plcml_Init->NodeInfo.AllUUIDs[0].DllName));
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[1].DllName,0, sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName));
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[2].DllName,0, sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName));
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0, sizeof(plcml_Init->DeviceInfo.AllUUIDs[1].DllName));
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].uuid = &MP3DECSOCKET_TI_UUID;
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName, MP3DEC_DLL_NAME);
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].uuid = &MP3DECSOCKET_TI_UUID;
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName, MP3DEC_DLL_NAME);
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID;
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName, MP3DEC_USN_DLL_NAME);
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->SegID = OMX_MP3DEC_DEFAULT_SEGMENT;
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Timeout = OMX_MP3DEC_SN_TIMEOUT;
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Alignment = 0;
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->Priority = OMX_MP3DEC_SN_PRIORITY;
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->ProfileID = -1;
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->dasfmode == 1) {
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef DSP_RENDERING_ON
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Flag DSP_RENDERING_ON Must Be Defined To Use Rendering");
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        LCML_STRMATTR *strmAttr;
196b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MALLOC_GENERIC(strmAttr, LCML_STRMATTR);
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ": Malloc strmAttr = %p\n",strmAttr);
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->strmAttr = strmAttr;
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":: MP3 DECODER IS RUNNING UNDER DASF MODE \n");
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strmAttr->uSegid = 0;
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strmAttr->uAlignment = 0;
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strmAttr->uTimeout = -1;
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	strmAttr->uBufsize = MP3D_OUTPUT_BUFFER_SIZE;
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRBUFFER2(pComponentPrivate->dbg, "::strmAttr->uBufsize:%d\n",strmAttr->uBufsize);
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strmAttr->uNumBufs = 2;
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strmAttr->lMode = STRMMODE_PROCCOPY;
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofDevice = 1;
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofRender = 0;
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID;
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        plcml_Init->DeviceInfo.DspStream = strmAttr;
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofDevice = 0;
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->dasfmode == 0){
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":: FILE MODE CREATE PHASE PARAMETERS\n");
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[0] = 2;            /* Number of Streams */
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[1] = 0;            /* ID of the Input Stream */
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[2] = 0;            /* Type of Input Stream DMM (0) / STRM (1) */
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[3] = 4;            /* Number of buffers for Input Stream */
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[3] = 1;            /* WinCE Number of buffers for Input Stream */
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[4] = 1;            /* ID of the Output Stream */
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[5] = 0;            /* Type of Output Stream  */
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[6] = 4;            /* Number of buffers for Output Stream */
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[6] = 1;            /* WinCE Number of buffers for Output Stream */
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pComponentPrivate->pcmParams->nBitPerSample == 24){
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, " PCM 24 bit output\n");
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            arr[7] = 24;
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, " PCM 16 bit output\n");
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            arr[7] = 16;
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pComponentPrivate->frameMode) {
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRMGR2(pComponentPrivate->dbg, " frame mode is on\n");
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            arr[8] = 1;   /* frame mode is on */
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            arr[8] = 0;
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRMGR2(pComponentPrivate->dbg, " frame mode is off\n");
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[9] = END_OF_CR_PHASE_ARGS;
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":: DASF MODE CREATE PHASE PARAMETERS\n");
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[0] = 2;        /* Number of Streams */
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[1] = 0;        /* ID of the Input Stream */
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[2] = 0;        /* Type of Input Stream DMM (0) / STRM (1) */
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[3] = 4;        /* Number of buffers for Input Stream */
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[4] = 1;        /* ID of the Output Stream */
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[5] = 2;        /* Type of Output Stream  */
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[6] = 2;        /* Number of buffers for Output Stream */
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[7] = 16;       /*Decoder Output PCM width is 24-bit or 16-bit */
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[8] = 0;        /* frame mode off */
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[9] = END_OF_CR_PHASE_ARGS;
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    plcml_Init->pCrPhArgs = arr;
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: bufAlloced = %d\n",pComponentPrivate->bufAlloced);
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    size_lcml = nIpBuf * sizeof(MP3D_LCML_BUFHEADERTYPE);
274b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE(ptr,size_lcml,OMX_U8);
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp_lcml = (MP3D_LCML_BUFHEADERTYPE *)ptr;
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT] = pTemp_lcml;
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i<nIpBuf; i++) {
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nAllocLen = nIpBufSize;
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nFilledLen = nIpBufSize;
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = MP3DEC_MAJOR_VER;
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = MP3DEC_MINOR_VER;
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nTickCount = 0;
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirInput;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
294b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pIpParam,
295b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                             sizeof(MP3DEC_UAlgInBufParamStruct),
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             MP3DEC_UAlgInBufParamStruct);
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pIpParam->bLastBuffer = 0;
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((MP3DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp: InBuffHeader[%ld] = %p\n", i, pTemp);
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>> InputBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "::Comp: Ip : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml++;
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    size_lcml = nOpBuf * sizeof(MP3D_LCML_BUFHEADERTYPE);
310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,MP3D_LCML_BUFHEADERTYPE);
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT] = pTemp_lcml;
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i<nOpBuf; i++) {
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nAllocLen = nOpBufSize;
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: nOpBufSize = %ld\n", nOpBufSize);
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = MP3DEC_MAJOR_VER;
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = MP3DEC_MINOR_VER;
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nTickCount = 0;
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirOutput;
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
329b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pOpParam,
330b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                             sizeof(MP3DEC_UAlgOutBufParamStruct),
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             MP3DEC_UAlgOutBufParamStruct);
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml->pOpParam->ulFrameCount = DONT_CARE;
3332eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        pTemp_lcml->pOpParam->ulIsLastBuffer = 0;
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((MP3DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>>>>>>>>>>> OutBuffHeader[%ld] = %p\n", i, pTemp);
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>> OutBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp: Op : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml++;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->pParams,sizeof(USN_AudioCodecParams),
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         USN_AudioCodecParams);
345b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->ptAlgDynParams,sizeof(MP3DEC_UALGParams),
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         MP3DEC_UALGParams);
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nLcml_nCntIp = 0;
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nLcml_nCntOpReceived = 0;
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting MP3DEC_Fill_LCMLInitParams. error=%d\n", eError);
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn Mp3Dec_StartCompThread() starts the component thread. This is internal
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * function of the component.
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core.
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE Mp3Dec_StartCompThread(OMX_HANDLETYPE pComponent)
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate =
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (MP3DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet = 0;
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_attr_t attr;
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(&attr, 0, sizeof(attr));
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    attr.__inheritsched = PTHREAD_EXPLICIT_SCHED;
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY;
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Enetering  Mp3Dec_StartCompThread()\n");
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->lcml_nOpBuf = 0;
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->lcml_nIpBuf = 0;
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->app_nBuf = 0;
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->num_Op_Issued = 0;
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->num_Sent_Ip_Buff = 0;
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->num_Reclaimed_Op_Buff = 0;
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsEOFSent = 0;
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = pipe (pComponentPrivate->dataPipe);
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet) {
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Pipe Creation Failed");
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = pipe (pComponentPrivate->cmdPipe);
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet) {
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Pipe Creation Failed");
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = pipe (pComponentPrivate->cmdDataPipe);
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet) {
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Pipe Creation Failed");
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = pthread_create (&(pComponentPrivate->ComponentThread), &attr,
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           MP3DEC_ComponentThread, pComponentPrivate);
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = pthread_create (&(pComponentPrivate->ComponentThread), NULL,
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           MP3DEC_ComponentThread, pComponentPrivate);
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((0 != nRet) || (!pComponentPrivate->ComponentThread)) {
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Thread Creation Failed");
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 1;
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting from Mp3Dec_StartCompThread()\n");
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_FreeCompResources() function newfrees the component resources.
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent This is the component handle.
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_FreeCompResources(OMX_HANDLETYPE pComponent)
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate = (MP3DEC_COMPONENT_PRIVATE *)
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pHandle->pComponentPrivate;
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nIpBuf=0, nOpBuf=0;
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet=0;
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Mp3Dec_FreeCompResources\n");
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":::pComponentPrivate->bPortDefsAllocated = %ld\n",pComponentPrivate->bPortDefsAllocated);
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bPortDefsAllocated) {
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, ":: Closing pipess.....\n");
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->dataPipe[0]);
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->dataPipe[1]);
485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdPipe[0]);
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdPipe[1]);
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdDataPipe[0]);
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdDataPipe[1]);
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bPortDefsAllocated) {
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
513b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pPortDef[MP3D_INPUT_PORT]);
514b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]);
515b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->mp3Params);
516b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->pcmParams);
517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pCompPort[MP3D_INPUT_PORT]->pPortFormat);
518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->pCompPort[MP3D_OUTPUT_PORT]->pPortFormat);
519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->pCompPort[MP3D_INPUT_PORT]);
520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->pCompPort[MP3D_OUTPUT_PORT]);
521b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->sPortParam);
522b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT (pComponentPrivate->pPriorityMgmt);
523b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList);
524b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList);
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "\n\n FreeCompResources: Destroying mutexes.\n\n");
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->codecStop_mutex);
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->codecStop_threshold);
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->codecFlush_mutex);
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->codecFlush_threshold);
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event));
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InIdle_event));
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event));
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
554b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huberstatic void signalAlloBufThresholdIfNecessary(
555b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        MP3DEC_COMPONENT_PRIVATE *pComponentPrivate) {
556b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber#ifndef UNDER_CE
557b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
558b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    if (pComponentPrivate->AlloBuf_waitingsignal) {
559b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        pComponentPrivate->AlloBuf_waitingsignal = 0;
560b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
561b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    }
562b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
563b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber#else
564b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    if (pComponentPrivate->AlloBuf_waitingsignal) {
565b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        // I am fairly sure this will suffer from similar issues without
566b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        // proper mutex protection and a loop under WinCE...
567b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        pComponentPrivate->AlloBuf_waitingsignal = 0;
568b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber        OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
569b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber    }
570b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber#endif
571b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber}
572b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_HandleCommand() function handles the command sent by the application.
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * All the state transitions, except from nothing to loaded state, of the
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * component are done by this function.
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate  This is component's private date structure.
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               to do any said operartion.
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 MP3DEC_HandleCommand (MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 i,ret = 0;
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 arr[24];
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char *pArgs = "damedesuStr";
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 pValues[4];
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 pValues1[4];
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =(OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE command;
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_STATETYPE commandedState;
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 commandData;
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE rm_error = OMX_ErrorNone;
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: >>> Entering HandleCommand Function\n");
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = read(pComponentPrivate->cmdPipe[0], &command, sizeof (command));
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(ret == -1){
617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError,
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ErrorHardware,
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Error while reading the command pipe");
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pHandle,
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pHandle->pApplicationPrivate,
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventError,
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                eError,
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_TI_ErrorSevere,
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = read(pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData));
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(ret == -1){
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorHardware,
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Error while reading the commandData pipe");
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pHandle,
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pHandle->pApplicationPrivate,
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventError,
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                eError,
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_TI_ErrorSevere,
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "---------------------------------------------\n");
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, ":: command = %d\n",command);
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, ":: commandData = %ld\n",commandData);
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "---------------------------------------------\n");
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedCommand(pComponentPrivate->pPERFcomp,
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         command,
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         commandData,
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         PERF_ModuleLLMM);
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (command == OMX_CommandStateSet){
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        commandedState = (OMX_STATETYPE)commandData;
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->curState == commandedState) {
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pHandle,
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    pHandle->pApplicationPrivate,
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_EventError,
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_ErrorSameState,
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_TI_ErrorMinor,
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    NULL);
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Same State Given by Application\n");
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            switch(commandedState) {
662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateIdle:
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRINT1(pComponentPrivate->dbg, ": HandleCommand: Cmd Idle \n");
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->curState == OMX_StateWaitForResources) {
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    LCML_CALLBACKTYPE cb;
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    LCML_DSP *pLcmlDsp;
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    char *p = "damedesuStr";
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundarySetup);
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    int inputPortFlag=0,outputPortFlag=0;
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->dasfmode == 1) {
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled= FALSE;
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated= FALSE;
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(pComponentPrivate->streamID == 0) {
678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n");
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, ":: Error = OMX_ErrorInsufficientResources\n");
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, "**************************************\n");
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateInvalid;
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = OMX_ErrorInsufficientResources;
683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle,
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pHandle->pApplicationPrivate,
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_EventError,
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   eError,
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_TI_ErrorMajor,
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   "AM: No Stream ID Available");
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            goto EXIT;
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRINT2(pComponentPrivate->dbg, "In while loop: IP : %p OP: %p\n",pComponentPrivate->pPortDef[MP3D_INPUT_PORT],
695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]);
696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated = %d\n",
697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated);
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated = %d\n",
699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated);
700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = %d\n",
701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled);
702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled = %d\n",
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled);
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated &&
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled)  {
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        inputPortFlag = 1;
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (!pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated &&
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        !pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled) {
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        inputPortFlag = 1;
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated &&
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled) {
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        outputPortFlag = 1;
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (!pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated &&
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        !pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled) {
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        outputPortFlag = 1;
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(!(inputPortFlag && outputPortFlag)) {
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->InLoaded_readytoidle = 1;
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, &pComponentPrivate->InLoaded_mutex);
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event));
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHandle = (OMX_HANDLETYPE) MP3DEC_GetLCMLHandle(pComponentPrivate);
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pLcmlHandle == NULL) {
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, ":: LCML Handle is NULL........exiting..\n");
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = OMX_ErrorHardware;
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_ErrorHardware,
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               "Lcml Handle NULL");
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = MP3DEC_Fill_LCMLInitParams(pHandle, pLcmlDsp,arr);
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, ":: Error returned from Fill_LCMLInitParams()\n");
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle;
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    cb.LCML_Callback = (void *) MP3DEC_LCML_Callback;
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle,
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                p,&pLcmlHandle,(void *)p,&cb, (OMX_STRING)pComponentPrivate->sDeviceString);
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone){
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__);
772b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        /* send an event to client */
773b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        /* client should unload the component if the codec is not able to load */
774b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        pComponentPrivate->cbInfo.EventHandler (pHandle,
775b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                pHandle->pApplicationPrivate,
776b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                OMX_EventError,
777b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                eError,
778b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                OMX_TI_ErrorSevere,
779b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                NULL);
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle,
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              p,&pLcmlHandle,(void *)p,&cb);
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone){
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__);
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef HASHINGENABLE
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* Enable the Hashing Code */
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, OMX_TRUE);
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "Failed to set Mapping State\n");
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* Need check the resource with RM */
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->rmproxyCallback.RMPROXY_Callback =
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (void *) MP3_ResourceManagerCallback;
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->curState != OMX_StateWaitForResources){
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        rm_error = RMProxy_NewSendCommand(pHandle,
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          RMProxy_RequestResource,
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          OMX_MP3_Decoder_COMPONENT,
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          MP3_CPU,
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          3456,
810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          &(pComponentPrivate->rmproxyCallback));
811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(rm_error == OMX_ErrorNone) {
812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            /* resource is available */
813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySetup);
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateIdle;
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            rm_error = RMProxy_NewSendCommand(pHandle,
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                              RMProxy_StateSet,
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                              OMX_MP3_Decoder_COMPONENT,
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                              OMX_StateIdle,
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                              3456,
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                              NULL);
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle,
824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pHandle->pApplicationPrivate,
825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_EventCmdComplete,
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_CommandStateSet,
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->curState,
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   NULL);
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        else if(rm_error == OMX_ErrorInsufficientResources) {
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            /* resource is not available, need set state to
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_StateWaitForResources */
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateWaitForResources;
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle,
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pHandle->pApplicationPrivate,
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_EventCmdComplete,
837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_CommandStateSet,
838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->curState,
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   NULL);
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }else{
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        rm_error = RMProxy_NewSendCommand(pHandle,
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          RMProxy_StateSet,
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          OMX_MP3_Decoder_COMPONENT,
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          OMX_StateIdle,
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          3456,
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          NULL);
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateIdle;
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventCmdComplete,
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_CommandStateSet,
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pComponentPrivate->curState,
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySetup);
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateIdle;
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandStateSet,
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->curState,
868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ":: Control Came Here\n");
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "****************** Component State Set to Idle\n\n");
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "MP3DEC: State has been Set to Idle\n");
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else if (pComponentPrivate->curState == OMX_StateExecuting){
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState);
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE;
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec STOP %d\n", __LINE__);
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecStop_waitingsignal == 0){
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecStop_waitingsignal == 0){
886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex);
887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecStop_waitingsignal = 0;
888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, ": Error Occurred in Codec Stop..\n");
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef HASHINGENABLE
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /*Hashing Change*/
905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "Error occurred in Codec mapping flush!\n");
909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else if(pComponentPrivate->curState == OMX_StatePause) {
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    char *pArgs = "damedesuStr";
914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, ":: Comp: Stop Command Received\n");
915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef HASHINGENABLE
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /*Hashing Change*/
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "Error occurred in Codec mapping flush!\n");
921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState);
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec %d\n", __LINE__);
928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecStop_waitingsignal == 0){
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // lock mutex here, wait for stop ack. from lcml
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecStop_waitingsignal == 0){
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex);
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecStop_waitingsignal = 0; // reset the wait condition for next time
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, ": Error Occurred in Codec Stop..\n");
941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "****************** Component State Set to Idle\n\n");
951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateIdle;
952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    rm_error = RMProxy_NewSendCommand(pHandle,
954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      RMProxy_StateSet,
955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      OMX_MP3_Decoder_COMPONENT,
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      OMX_StateIdle,
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      3456,
958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      NULL);
959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ":: The component is stopped\n");
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandStateSet,
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->curState,
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else {
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR2(pComponentPrivate->dbg, ": Comp: Sending ErrorNotification: Invalid State\n");
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventError,
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_ErrorIncorrectStateTransition,
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_TI_ErrorMinor,
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           "Invalid State Error");
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateExecuting:
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": HandleCommand: Cmd Executing \n");
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateIdle) {
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    char *pArgs = "damedesuStr";
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_U32 pValues[4];
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_U32 pValues1[4];
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(!pComponentPrivate->SendAfterEOS){
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(pComponentPrivate->dasfmode == 1) {
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pParams->unAudioFormat = (unsigned short)pComponentPrivate->mp3Params->nChannels;
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            if (pComponentPrivate->pParams->unAudioFormat == MP3D_STEREO_STREAM) {
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                pComponentPrivate->pParams->unAudioFormat = MP3D_STEREO_NONINTERLEAVED_STREAM;
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            }
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pParams->ulSamplingFreq = pComponentPrivate->mp3Params->nSampleRate;
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pParams->unUUID = pComponentPrivate->streamID;
995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRCOMM2(pComponentPrivate->dbg, "::pParams->unAudioFormat   = %ld\n",pComponentPrivate->mp3Params->nChannels);
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRCOMM2(pComponentPrivate->dbg, "::pParams->ulSamplingFreq  = %ld\n",pComponentPrivate->mp3Params->nSampleRate);
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pValues[0] = USN_STRMCMD_SETCODECPARAMS;
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pValues[1] = (OMX_U32)pComponentPrivate->pParams;
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pValues[2] = sizeof(USN_AudioCodecParams);
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec %d\n", __LINE__);
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                         EMMCodecControlStrmCtrl,(void *)pValues);
1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            if(eError != OMX_ErrorNone) {
1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_ERROR4(pComponentPrivate->dbg, ": Error Occurred in Codec StreamControl..\n");
1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                pComponentPrivate->curState = OMX_StateInvalid;
1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                pComponentPrivate->cbInfo.EventHandler(pHandle,
1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       pHandle->pApplicationPrivate,
1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       OMX_EventError,
1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       eError,
1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       OMX_TI_ErrorSevere,
1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                       NULL);
1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                goto EXIT;
1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            }
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(pComponentPrivate->dasfmode == 0 &&
1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pcmParams->bInterleaved) {
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_INTERLEAVED;
1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        } else {
1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_BLOCK;
1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->ptAlgDynParams->lMonoToStereoCopy = 0;
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->ptAlgDynParams->lStereoToMonoCopy = 0;
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->ptAlgDynParams->size = sizeof(MP3DEC_UALGParams);
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pValues1[0] = IUALG_CMD_SETSTATUS;
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pValues1[1] = (OMX_U32) pComponentPrivate->ptAlgDynParams;
1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pValues1[2] = sizeof(MP3DEC_UALGParams);
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec %d\n", __LINE__);
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   EMMCodecControlAlgCtrl,(void *)pValues1);
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Set Status DynParams..\n");
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateInvalid;
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle,
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pHandle->pApplicationPrivate,
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_EventError,
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   eError,
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   OMX_TI_ErrorSevere,
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   NULL);
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            goto EXIT;
1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, ":: Algcontrol has been sent to DSP\n");
1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec START %d\n", __LINE__);
1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   EMMCodecControlStart,(void *)pArgs);
1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Start..\n", __LINE__);
1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            goto EXIT;
1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, ": Codec Has Been Started \n");
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->SendAfterEOS = 1;
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else if (pComponentPrivate->curState == OMX_StatePause) {
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    char *pArgs = "damedesuStr";
1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": Comp: Resume Command Came from App\n");
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec\n");
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec  START %d\n", __LINE__);
1064b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlStart,(void *)pArgs);
1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "Error While Resuming the codec\n");
1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle,
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pHandle->pApplicationPrivate,
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if (pComponentPrivate->pInputBufHdrPending[i] != NULL) {
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__);
1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      EMMCodecInputBuffer,
1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      (OMX_U8 *) pLcmlHdr->pIpParam,
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      sizeof(MP3DEC_UAlgInBufParamStruct),
1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      NULL);
1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumInputBufPending = 0;
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if (pComponentPrivate->pOutputBufHdrPending[i]) {
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_DirOutput,
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               &pLcmlHdr);
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_SetPending(pComponentPrivate,
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              pComponentPrivate->pOutputBufHdrPending[i],
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_DirOutput,
1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              __LINE__);
1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      EMMCodecOuputBuffer,
1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      0,
1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      (OMX_U8 *) pLcmlHdr->pOpParam,
1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      sizeof(MP3DEC_UAlgOutBufParamStruct),
1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      NULL);
1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumOutputBufPending = 0;
1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }else {
1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle,
1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            pHandle->pApplicationPrivate,
1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_EventError,
1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_ErrorIncorrectStateTransition,
1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_TI_ErrorMinor,
1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            "Invalid State");
1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid State Given by Application\n");
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "****************** Component State Set to Executing\n\n");
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_MP3_Decoder_COMPONENT, OMX_StateExecuting, 3456, NULL);
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateExecuting;
1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundarySteadyState);
1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandStateSet,
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->curState,
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateLoaded:
1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": HandleCommand: Cmd Loaded\n");
1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateWaitForResources ){
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "****************** Component State Set to Loaded\n\n");
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup);
1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateLoaded;
1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup);
1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle,
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            pHandle->pApplicationPrivate,
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_EventCmdComplete,
1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_CommandStateSet,
1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            pComponentPrivate->curState,
1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            NULL);
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, ":: Transitioning from WaitFor to Loaded\n");
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState != OMX_StateIdle) {
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle,
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            pHandle->pApplicationPrivate,
1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_EventError,
1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_ErrorIncorrectStateTransition,
1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_TI_ErrorMinor,
1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            "Invalid State");
1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid State Given by \
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       Application\n");
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup);
1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "Current State = %d\n",pComponentPrivate->curState);
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %ld\n",pComponentPrivate->pInputBufferList->numBuffers);
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->numBuffers = %ld\n",pComponentPrivate->pOutputBufferList->numBuffers);
1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->pInputBufferList->numBuffers || pComponentPrivate->pOutputBufferList->numBuffers) {
1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->InIdle_goingtoloaded = 1;
1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_cond_wait(&pComponentPrivate->InIdle_threshold, &pComponentPrivate->InIdle_mutex);
1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_WaitForEvent(&(pComponentPrivate->InIdle_event));
1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* Send StateChangeNotification to application */
1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec DESTROY %d\n", __LINE__);
1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           EMMCodecControlDestroy,(void *)pArgs);
1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                FreeLibrary(g_hLcmlDllHandle);
1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                g_hLcmlDllHandle = NULL;
1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_SendingCommand(pComponentPrivate->pPERF, -1, 0, PERF_ModuleComponent);
1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = EXIT_COMPONENT_THRD;
1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bInitParamsInitialized = 0;
1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StatePause:
1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, ": HandleCommand: Cmd Pause: Cur State = %d\n",
1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pComponentPrivate->curState);
1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if ((pComponentPrivate->curState != OMX_StateExecuting) &&
1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    (pComponentPrivate->curState != OMX_StateIdle)) {
1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle,
1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            pHandle->pApplicationPrivate,
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_EventError,
1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_ErrorIncorrectStateTransition,
1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            OMX_TI_ErrorMinor,
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                            "Invalid State");
1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid State Given by \
1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       Application\n");
1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState);
1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec\n");
1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec PAUSE %d\n", __LINE__);
1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           EMMCodecControlPause,(void *)pArgs);
1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, ": Error: in Pausing the codec\n");
1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateInvalid;
1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventError,
1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           eError,
1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_TI_ErrorSevere,
1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "****************** Component State Set to Pause\n\n");
1251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED
1252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                rm_error = RMProxy_NewSendCommand(pHandle,
1253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                  RMProxy_StateSet,
1254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                  OMX_MP3_Decoder_COMPONENT,
1255b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                  OMX_StatePause,
1256b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                  3456,
1257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                  NULL);
1258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateWaitForResources:
1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": HandleCommand: Cmd : OMX_StateWaitForResources\n");
1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateLoaded) {
1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    rm_error = RMProxy_NewSendCommand(pHandle,
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      RMProxy_StateSet,
1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      OMX_MP3_Decoder_COMPONENT,
1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      OMX_StateWaitForResources,
1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      3456,
1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      NULL);
1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateWaitForResources;
1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": Transitioning from Loaded to OMX_StateWaitForResources\n");
1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandStateSet,
1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->curState,
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else {
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventError,
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_ErrorIncorrectStateTransition,
1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_TI_ErrorMinor,
1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateInvalid:
1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, ": HandleCommand: Cmd OMX_StateInvalid:\n");
1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->curState != OMX_StateWaitForResources &&
1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState != OMX_StateLoaded &&
1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->curState != OMX_StateInvalid ) {
1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlDestroy, (void *)pArgs);
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateInvalid;
1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_ErrorInvalidState,
1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                MP3DEC_CleanupInitParams(pHandle);
1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            case OMX_StateMax:
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, ": HandleCommand: Cmd OMX_StateMax::\n");
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } /* End of Switch */
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (command == OMX_CommandMarkBuffer) {
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received\n");
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(!pComponentPrivate->pMarkBuf){
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received \n");
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData);
1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if (command == OMX_CommandPortDisable) {
1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pComponentPrivate->bDisableCommandPending) {
1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(commandData == 0x0){
1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* disable port */
1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->bBufferPending[%ld] = %ld\n",i,
1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pInputBufferList->bBufferPending[i]);
1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (MP3DEC_IsPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i],OMX_DirInput)) {
1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        /* Real solution is flush buffers from DSP.  Until we have the ability to do that
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           we just call EmptyBufferDone() on any pending buffers */
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "Forcing EmptyBufferDone\n");
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pInputBufferList->pBufHdr[i], pBuffer),
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          0,
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pInputBufferList->pBufHdr[i]);
1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->nEmptyBufferDoneCount++;
13462eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = OMX_FALSE;
1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(commandData == -1){
1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* disable port */
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = OMX_FALSE;
1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(commandData == 0x1 || commandData == -1){
1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                char *pArgs = "damedesuStr";
1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled = OMX_FALSE;
1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "commandData = %ld\n",commandData);
1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated = %d\n",
1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated);
1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated = %d\n",
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated);
1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == 0x0) {
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(!pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated){
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* return cmdcomplete event if input unpopulated */
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortDisable,
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_INPUT_PORT,
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else{
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == 0x1) {
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated){
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* return cmdcomplete event if output unpopulated */
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "CMD COMPLETE PORT DISABLE OUTPUT\n");
1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortDisable,
1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_OUTPUT_PORT,
1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == -1) {
1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated &&
1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                !pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated){
1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* return cmdcomplete event if inout & output unpopulated */
1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortDisable,
1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_INPUT_PORT,
1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortDisable,
1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_OUTPUT_PORT,
1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (command == OMX_CommandPortEnable) {
1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->bDspStoppedWhileExecuting){
1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            // set up the codec with corrected settings
1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            // it was not done in idle->executing transition
1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pComponentPrivate->dasfmode == 0 &&
1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pcmParams->bInterleaved) {
1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_INTERLEAVED;
1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else {
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_BLOCK;
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->ptAlgDynParams->lMonoToStereoCopy = 0;
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->ptAlgDynParams->lStereoToMonoCopy = 0;
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->ptAlgDynParams->size = sizeof(MP3DEC_UALGParams);
1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pValues1[0] = IUALG_CMD_SETSTATUS;
1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pValues1[1] = (OMX_U32) pComponentPrivate->ptAlgDynParams;
1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pValues1[2] = sizeof(MP3DEC_UALGParams);
1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec ALG %d\n", __LINE__);
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       EMMCodecControlAlgCtrl,(void *)pValues1);
1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Start..\n");
1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateInvalid;
1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       eError,
1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec start %d\n", __LINE__);
1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         EMMCodecControlStart,(void *)pArgs);
1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Start..\n", __LINE__);
1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP1(pComponentPrivate->dbg, ": Codec Has Been Started \n");
1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else{
1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP1(pComponentPrivate->dbg, "codec was previusly started! %d\n", __LINE__);
1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pComponentPrivate->bEnableCommandPending) {
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(commandData == 0x0 || commandData == -1){
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* enable in port */
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "setting input port to enabled\n");
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = OMX_TRUE;
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRSTATE2(pComponentPrivate->dbg, "WAKE UP!! HandleCommand: En utils setting output port to enabled. \n");
1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pComponentPrivate->AlloBuf_waitingsignal){
1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->AlloBuf_waitingsignal = 0;
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled = %d\n",
1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bEnabled);
1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(commandData == 0x1 || commandData == -1){
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* enable out port */
1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled = OMX_TRUE;
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled = %d\n",
1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bEnabled);
1491b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber
1492b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber                signalAlloBufThresholdIfNecessary(pComponentPrivate);
1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "setting output port to enabled\n");
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == 0x0){
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateLoaded ||
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated) {
1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortEnable,
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_INPUT_PORT,
1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1506b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber                signalAlloBufThresholdIfNecessary(pComponentPrivate);
1507b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                //MP3DECFill_LCMLInitParamsEx(pHandle, 0);
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                // queue the pending buffers received while doing the config
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "in queuePending loop INPUT %d\n", __LINE__);
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pInputBufHdrPending[i] != NULL) {
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__);
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d\n", __LINE__);
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecInputBuffer,
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pIpParam,
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgInBufParamStruct),
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d, error = %d\n", __LINE__, eError);
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nNumInputBufPending = 0;
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->reconfigInputPort = 0;
1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 0;
1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 1;
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandParam = commandData;
1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(commandData == 0x1) {
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateLoaded ||
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated){
1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler( pHandle,
1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        pHandle->pApplicationPrivate,
1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        OMX_EventCmdComplete,
1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        OMX_CommandPortEnable,
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        MP3D_OUTPUT_PORT,
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                        NULL);
1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1548b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber                signalAlloBufThresholdIfNecessary(pComponentPrivate);
1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRINT2(pComponentPrivate->dbg, "reconfigOut = %d!, but should be true!\n",pComponentPrivate->reconfigOutputPort);
1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pComponentPrivate->reconfigOutputPort){
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    //make sure new VA's are used
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    MP3DEC_CleanupInitParamsEx(pHandle,commandData);
1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    MP3DECFill_LCMLInitParamsEx(pHandle, 1);
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, "completed MP3DEC_MapLCMLParamsEx! %d\n", __LINE__);
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pOutputBufHdrPending[i]) {
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_DirOutput,
1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           &pLcmlHdr);
1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_SetPending(pComponentPrivate,
1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          pComponentPrivate->pOutputBufHdrPending[i],
1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_DirOutput,
1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          __LINE__);
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d\n", __LINE__);
1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecOuputBuffer,
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  0,
1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pOpParam,
1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgOutBufParamStruct),
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d, error = %d\n", __LINE__, eError);
1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nNumOutputBufPending = 0;
1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                // queue the pending buffers received while doing the config
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "in queuePending loop INPUT %d\n", __LINE__);
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pInputBufHdrPending[i] != NULL) {
1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__);
1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d\n", __LINE__);
1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecInputBuffer,
1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pIpParam,
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgInBufParamStruct),
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d, error = %d\n", __LINE__, eError);
1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nNumInputBufPending = 0;
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 0;
1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->reconfigOutputPort = 0;
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 1;
1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandParam = commandData;
1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(commandData == -1) {
1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateLoaded ||
1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                (pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->bPopulated
1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 && pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->bPopulated)){
1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortEnable,
1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_INPUT_PORT,
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandPortEnable,
1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       MP3D_OUTPUT_PORT,
1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1628b052eae44afe8a1febceb2287d728af9e0df4828Andreas Huber                signalAlloBufThresholdIfNecessary(pComponentPrivate);
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                MP3DEC_CleanupInitParamsEx(pHandle,commandData);
1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                MP3DECFill_LCMLInitParamsEx(pHandle, -1);
1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                // queue the pending buffers received while doing the config, output then input
1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pOutputBufHdrPending[i]) {
1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_DirOutput,
1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           &pLcmlHdr);
1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_SetPending(pComponentPrivate,
1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          pComponentPrivate->pOutputBufHdrPending[i],
1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_DirOutput,
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          __LINE__);
1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecOuputBuffer,
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  0,
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pOpParam,
1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgOutBufParamStruct),
1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nNumOutputBufPending = 0;
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "in queuePending loop INPUT %d\n", __LINE__);
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pInputBufHdrPending[i] != NULL) {
1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        MP3DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,__LINE__);
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d\n", __LINE__);
1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecInputBuffer,
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pIpParam,
1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgInBufParamStruct),
1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, "QueueBuffer pending port config line %d, error = %d\n", __LINE__, eError);
1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nNumInputBufPending = 0;
1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 0;
1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandPending = 1;
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bEnableCommandParam = commandData;
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (command == OMX_CommandFlush) {
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_U32 aParam[3] = {0};
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == 0x0 || commandData == -1) {
16862eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_ERROR2(pComponentPrivate->dbg, "Flushing input port:: unhandled ETB's = %ld, handled ETB's = %ld\n",
16872eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                       pComponentPrivate->nEmptyThisBufferCount, pComponentPrivate->nHandledEmptyThisBuffers);
16882eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            if (pComponentPrivate->nEmptyThisBufferCount == pComponentPrivate->nHandledEmptyThisBuffers)  {
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE;
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->first_buff = 0;
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR2(pComponentPrivate->dbg, "in flush IN:lcml_nCntApp && app_nBuf = %ld && %ld\n", pComponentPrivate->lcml_nCntApp, pComponentPrivate->app_nBuf);
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->num_Sent_Ip_Buff){ //no buffers have been sent yet, no need to flush SN
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[0] = USN_STRMCMD_FLUSH;
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[1] = 0x0;
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[2] = 0x0;
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "Flushing input port\n");
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec FLUSH in %d\n", __LINE__);
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecFlush_waitingsignal == 0){
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex);
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlStrmCtrl, (void*)aParam);
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecFlush_waitingsignal == 0){
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->codecFlush_threshold, &pComponentPrivate->codecFlush_mutex);
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecFlush_waitingsignal = 0;
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex);
1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                else{
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing input port %d\n",__LINE__);
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pInputBufHdrPending[i],pBuffer),
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          0,
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pInputBufHdrPending[i]);
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pInputBufHdrPending[i] = NULL;
17272eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        pComponentPrivate->nEmptyBufferDoneCount++;
17282eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumInputBufPending=0;
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandFlush,
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           MP3D_INPUT_PORT,
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }else {
1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bFlushInputPortCommandPending = OMX_TRUE;
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(commandData == 0x1 || commandData == -1){
17432eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_ERROR2(pComponentPrivate->dbg, "Flushing output port:: unhandled FTB's = %ld handled FTB's = %ld\n",
17442eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                       pComponentPrivate->nFillThisBufferCount, pComponentPrivate->nHandledFillThisBuffers);
17452eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            if (pComponentPrivate->nFillThisBufferCount == pComponentPrivate->nHandledFillThisBuffers)  {
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE;
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /*pComponentPrivate->first_buff = 0;*/
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "in flush OUT:lcml_nCntApp && app_nBuf = %ld && %ld\n", pComponentPrivate->lcml_nCntApp, pComponentPrivate->app_nBuf);
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "in flush OUT:lcml_nOpBuf = %ld \n", pComponentPrivate->lcml_nOpBuf);
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->num_Op_Issued && !pComponentPrivate->reconfigOutputPort){ //if no buffers have been sent yet, no need to flush SN
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[0] = USN_STRMCMD_FLUSH;
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[1] = 0x1;
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    aParam[2] = 0x0;
1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "Flushing output port\n");
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec FLUSH out %d\n", __LINE__);
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecFlush_waitingsignal == 0){
1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex);
1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlStrmCtrl, (void*)aParam);
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->codecFlush_waitingsignal == 0){
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->codecFlush_threshold, &pComponentPrivate->codecFlush_mutex);
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecFlush_waitingsignal = 0;
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex);
1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                else{
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pOutputBufHdrPending[i],pBuffer),
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pOutputBufHdrPending[i],nFilledLen),
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  pComponentPrivate->pHandle->pApplicationPrivate,
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  pComponentPrivate->pOutputBufHdrPending[i]
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  );
17842eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        pComponentPrivate->nFillBufferDoneCount++;
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
17862eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumOutputBufPending=0;
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandFlush,
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           MP3D_OUTPUT_PORT,
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else {
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bFlushOutputPortCommandPending = OMX_TRUE;
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting HandleCommand Function, error = %d\n", eError);
1804b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (eError != OMX_ErrorNone && eError != EXIT_COMPONENT_THRD) {
1805b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               pComponentPrivate->pHandle->pApplicationPrivate,
1807b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               OMX_EventError,
1808b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               eError,
1809b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               OMX_TI_ErrorSevere,
1810b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               NULL);
1811b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_HandleDataBuf_FromApp() function handles the input and output buffers
1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * that come from the application. It is not direct function wich gets called by
1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application rather, it gets called eventually.
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed.
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pComponentPrivate  This is component's private date structure.
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               to do any said operartion.
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader,
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DIRTYPE eDir;
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char *pArgs = "damedesuStr";
1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 pValues[4];
1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 pValues1[4];
1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBitPosition = 0;
1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8* pHeaderStream = (OMX_U8*)pBufHeader->pBuffer;
1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 temp = -1;
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 temp2 = -1;
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Entering HandleDataBuf_FromApp Function\n");
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: pBufHeader->pMarkData = %p\n",pBufHeader->pMarkData);
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufHeader->pPlatformPrivate  = pComponentPrivate;
1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = MP3DEC_GetBufferDirection(pBufHeader, &eDir);
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: HandleDataBuf_FromApp Function\n");
1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, ":: The pBufHeader is not found in the list\n");
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eDir == OMX_DirInput) {
18652eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        pComponentPrivate->nHandledEmptyThisBuffers++;
18662eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        if (pComponentPrivate->curState == OMX_StateIdle){
18672eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
18682eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                                                       pComponentPrivate->pHandle->pApplicationPrivate,
18692eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                                                       pBufHeader);
18702eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return input buffers\n", __LINE__, __FUNCTION__);
18712eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            pComponentPrivate->nEmptyBufferDoneCount++;
18722eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            SignalIfAllBuffersAreReturned(pComponentPrivate);
18732eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            goto EXIT;
18742eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        }
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDefIn = pComponentPrivate->pPortDef[OMX_DirInput];
1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr);
1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid Buffer Came ...\n");
1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((pBufHeader->nFilledLen > 0) || (pBufHeader->nFlags & OMX_BUFFERFLAG_EOS)) {
1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bBypassDSP = 0;
1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: HandleDataBuf_FromApp Function\n");
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":::Calling LCML_QueueBuffer\n");
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*For Steady State Instumentation*/
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PREF(pBufHeader,pBuffer),
1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pPortDefIn->nBufferSize,
1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleCommonLayer);
1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pComponentPrivate->SendAfterEOS){
1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pComponentPrivate->dasfmode == 1) {
1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pParams->unAudioFormat =
1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (unsigned short)pComponentPrivate->mp3Params->nChannels;
1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pParams->unAudioFormat == MP3D_STEREO_STREAM) {
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pParams->unAudioFormat = MP3D_STEREO_NONINTERLEAVED_STREAM;
1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pParams->ulSamplingFreq =
1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->mp3Params->nSampleRate;
1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pParams->unUUID = pComponentPrivate->streamID;
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues[0] = USN_STRMCMD_SETCODECPARAMS;
1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues[1] = (OMX_U32)pComponentPrivate->pParams;
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues[2] = sizeof(USN_AudioCodecParams);
1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec stream control %d\n", __LINE__);
1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlStrmCtrl,(void *)pValues);
1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, ": Error Occurred in Codec StreamControl..\n");
1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pComponentPrivate->pHandle->pApplicationPrivate,
1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pBufHeader->nFlags & OMX_BUFFERFLAG_CODECCONFIG || pComponentPrivate->bConfigData){
1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		    OMX_PRBUFFER2(pComponentPrivate->dbg, "Detected OMX_BUFFERFLAG_CODECCONFIG\n, \tproceed with parsing config data\n");
1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // parse the frame header
1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nSyncWord = MP3DEC_GetBits(&nBitPosition, 11, pHeaderStream, OMX_TRUE);
1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nMpegVersion = MP3DEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE);
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nLayer = MP3DEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE);
1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    temp = MP3DEC_GetBits(&nBitPosition, 1, pHeaderStream, OMX_TRUE); // prot. bit
1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nBitRate = MP3DEC_GetBits(&nBitPosition, 4, pHeaderStream, OMX_TRUE);
1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nFrequency = MP3DEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE);
1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    temp = MP3DEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE);  // pad bit, prov. bit
1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pStreamData.nChannelMode = MP3DEC_GetBits(&nBitPosition, 2, pHeaderStream, OMX_TRUE);
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    //save the current value of pcmParams->nSamplingRate
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    temp =  pComponentPrivate->pcmParams->nSamplingRate;
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // parsing completed, now compare to existing values and set port params as needed
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    switch(pComponentPrivate->pStreamData.nFrequency){
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // these frequency values are based on mpeg1 supported freqs
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // if the stream is actually mpeg2 or mpeg2.5, we will divide appropriately below.
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        case 0:
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pcmParams->nSamplingRate = 44100;
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            break;
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        case 1:
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pcmParams->nSamplingRate = 48000;
1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            break;
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        case 2:
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pcmParams->nSamplingRate = 32000;
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            break;
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        default:
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_ERROR4(pComponentPrivate->dbg, "Unsupported Frequency\n");
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            break;
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pStreamData.nMpegVersion == 2){
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // the actual sampling frequency is dependant upon the mpeg version
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // if Mpeg2 is used, divide the sampling rate from above by 2
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pcmParams->nSamplingRate /= 2;
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else if (pComponentPrivate->pStreamData.nMpegVersion == 0){
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // the actual sampling frequency is dependant upon the mpeg version
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        // divide by 4 for mpeg 2.5
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pcmParams->nSamplingRate /= 4;
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // save the current value of nChannels
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    temp2 = pComponentPrivate->pcmParams->nChannels;
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // value of 3 = mono
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (pComponentPrivate->pStreamData.nChannelMode == 3){
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pcmParams->nChannels = 1;
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else{ // if stereo,joint stereo or dual channel, then pcm channels is stereo. Otherwise pcm output will be mono
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                         pComponentPrivate->pcmParams->nChannels = MP3D_STEREO_STREAM;
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // decide if dynamic reconfig is needed
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, ": decide on reconfig ports...\n");
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (temp !=  pComponentPrivate->pcmParams->nSamplingRate ||
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        temp2 != pComponentPrivate->pcmParams->nChannels){
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->reconfigOutputPort = OMX_TRUE;
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, ": reconfif output port set to true...\n");
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else{
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, ": no port config needed, skip\n");
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRINT2(pComponentPrivate->dbg, "CODEC CONFIG: \n\tsample rate = %ld\n\tchannels = %ld\n\t channel mode = %ld (0/1 = stereo, 2/3 = mono)\n",
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          pComponentPrivate->pcmParams->nSamplingRate,
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          pComponentPrivate->pcmParams->nChannels,
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          pComponentPrivate->pStreamData.nChannelMode);
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // set up the codec with corrected settings
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // it was not done in idle->executing transition
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->dasfmode == 0 &&
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pComponentPrivate->pcmParams->bInterleaved) {
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_INTERLEAVED;
1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    } else {
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->ptAlgDynParams->lOutputFormat  = IAUDIO_BLOCK;
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->ptAlgDynParams->lMonoToStereoCopy = 0;
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->ptAlgDynParams->lStereoToMonoCopy = 0;
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->ptAlgDynParams->size = sizeof(MP3DEC_UALGParams);
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues1[0] = IUALG_CMD_SETSTATUS;
2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues1[1] = (OMX_U32) pComponentPrivate->ptAlgDynParams;
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pValues1[2] = sizeof(MP3DEC_UALGParams);
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRDSP2(pComponentPrivate->dbg, ": MP3DECUTILS::About to call LCML_ControlCodec ALG %d\n", __LINE__);
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               EMMCodecControlAlgCtrl,(void *)pValues1);
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_ERROR4(pComponentPrivate->dbg, "Error Occurred in Codec Start..\n");
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               pComponentPrivate->pHandle->pApplicationPrivate,
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_EventError,
2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               eError,
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_TI_ErrorSevere,
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               NULL);
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        goto EXIT;
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    // adding port config
2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->reconfigOutputPort){
2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM2(pComponentPrivate->dbg, ": send event PortSettingsChanged for ouput port...\n");
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_EventPortSettingsChanged,
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OUTPUT_PORT_MP3DEC,
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               0,
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->bConfigData = 0;
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2037b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           EMMCodecControlStart,
2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           (void *)pArgs);
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(eError != OMX_ErrorNone) {
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Start..\n", __LINE__);
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->SendAfterEOS = 0;
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                //pComponentPrivate->first_buff = 0;
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } //end SendAfterEOS
2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlHdr->pIpParam->bLastBuffer = 0;
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pBufHeader->nFlags & OMX_BUFFERFLAG_EOS) {
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, ":: bLastBuffer Is Set Here....\n");
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pLcmlHdr->pIpParam->bLastBuffer = 1;
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bIsEOFSent = 1;
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->SendAfterEOS = 1;
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBufHeader->nFlags = 0;
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Store time stamp information */
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->arrBufIndex[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp;
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*add on: Store tic count information*/
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->arrBufIndexTick[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount;
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->IpBufindex++;
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->IpBufindex %= pPortDefIn->nBufferCountActual;
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    if(!pComponentPrivate->frameMode){
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pComponentPrivate->first_buff == 0){
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->first_buff = 1;
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->first_TS = pBufHeader->nTimeStamp;
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM2(pComponentPrivate->dbg, "Comp:: Sending Filled Input buffer = %p, %ld\
2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               to LCML\n",pBufHeader,pBufHeader->nFilledLen);
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (!MP3DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) {
2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(!pComponentPrivate->bDspStoppedWhileExecuting) {
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(!(pComponentPrivate->reconfigInputPort || pComponentPrivate->reconfigOutputPort)){
2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput,__LINE__);
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle,
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecInputBuffer,
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->pBuffer,
2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->nAllocLen,
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->nFilledLen,
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pIpParam,
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgInBufParamStruct),
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  NULL);
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            if (eError != OMX_ErrorNone) {
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_ERROR4(pComponentPrivate->dbg, "::Comp: SetBuff: IP: Error Occurred = %x\n", eError);
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                eError = OMX_ErrorHardware;
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                goto EXIT;
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            }
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRINT2(pComponentPrivate->dbg, "%d Sent IP %p, len %ld\n",__LINE__ ,
2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          pBufHeader->pBuffer,
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          pBufHeader->nFilledLen);
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        else{
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader;
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRBUFFER2(pComponentPrivate->dbg, "Don't queue buffers during a reconfig, num IN pending is %ld\n", pComponentPrivate->nNumInputBufPending);
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }else {
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "Calling EmptyBufferDone from line %d\n",__LINE__);
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pBufHeader, pBuffer),
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          0,
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           pComponentPrivate->pHandle,
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           pComponentPrivate->pHandle->pApplicationPrivate,
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           pBufHeader);
21142eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        pComponentPrivate->nEmptyBufferDoneCount++;
21152eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->lcml_nCntIp++;
2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->lcml_nIpBuf++;
2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->num_Sent_Ip_Buff++;
2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending Input buffer to Codec\n");
2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if (pComponentPrivate->curState == OMX_StatePause) {
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader;
2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }else {
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bBypassDSP = 1;
2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Forcing EmptyBufferDone\n",__LINE__);
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PREF(pComponentPrivate->pInputBufferList->pBufHdr[0], pBuffer),
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              0,
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleHLMM);
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pInputBufferList->pBufHdr[0]);
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nEmptyBufferDoneCount++;
21392eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            SignalIfAllBuffersAreReturned(pComponentPrivate);
2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pBufHeader->pMarkData){
2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":Detected pBufHeader->pMarkData\n");
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pMarkData = pBufHeader->pMarkData;
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData;
2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventMark,
2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       0,
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       0,
2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pBufHeader->pMarkData);
2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->bFlushInputPortCommandPending) {
2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_SendCommand(pComponentPrivate->pHandle,OMX_CommandFlush,0,NULL);
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (eDir == OMX_DirOutput) {
21632eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        pComponentPrivate->nHandledFillThisBuffers++;
21642eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        if (pComponentPrivate->curState == OMX_StateIdle){
21652eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
21662eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                                                      pComponentPrivate->pHandle->pApplicationPrivate,
21672eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                                                      pBufHeader);
21682eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return output buffers\n", __LINE__, __FUNCTION__);
21692eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            pComponentPrivate->nFillBufferDoneCount++;
21702eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            SignalIfAllBuffersAreReturned(pComponentPrivate);
21712eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            goto EXIT;
21722eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        }
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ": pComponentPrivate->lcml_nOpBuf = %ld\n",pComponentPrivate->lcml_nOpBuf);
2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ": pComponentPrivate->lcml_nIpBuf = %ld\n",pComponentPrivate->lcml_nIpBuf);
2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate, pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr);
2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid Buffer Came ...\n");
2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":::Calling LCML_QueueBuffer\n");
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PREF(pBufHeader,pBuffer),
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          0,
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_ModuleCommonLayer);
2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->bBypassDSP == 0) {
2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(!(pComponentPrivate->reconfigInputPort || pComponentPrivate->reconfigOutputPort)){
2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (!MP3DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput) &&
2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (pComponentPrivate->numPendingBuffers < pComponentPrivate->pOutputBufferList->numBuffers)){
2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if(!pComponentPrivate->bDspStoppedWhileExecuting){
2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            MP3DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__);
2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle,
2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  EMMCodecOuputBuffer,
2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->pBuffer,
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->nAllocLen,
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  0,
2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pOpParam,
2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  sizeof(MP3DEC_UAlgOutBufParamStruct),
2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pBufHeader->pBuffer);
2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            if (eError != OMX_ErrorNone ) {
2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_ERROR4(pComponentPrivate->dbg, ":: Comp:: SetBuff OP: Error Occurred = %d\n", eError);
2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_ERROR4(pComponentPrivate->dbg, "nFilledLen = %ld\n nAllocLen = %ld\n", pBufHeader->nFilledLen, pBufHeader->nAllocLen);
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                eError = OMX_ErrorHardware;
2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                goto EXIT;
2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            }
2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_PRINT2(pComponentPrivate->dbg, "%d Sent OP %p\n",__LINE__,pBufHeader->pBuffer);
2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->lcml_nCntOp++;
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->lcml_nOpBuf++;
2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->num_Op_Issued++;
2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else{
2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, "Don't queue while doing a reconfig:: output buffer, num pending = %ld\n", pComponentPrivate->nNumOutputBufPending);
2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }else if (pComponentPrivate->curState == OMX_StatePause) {
2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->bFlushOutputPortCommandPending) {
2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_SendCommand( pComponentPrivate->pHandle, OMX_CommandFlush, 1, NULL);
2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, ": BufferHeader %p, Buffer %p Unknown ..........\n",pBufHeader, pBufHeader->pBuffer);
2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ": Exiting from  HandleDataBuf_FromApp: %x \n",eError);
2235b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (eError != OMX_ErrorNone ) {
2236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2237b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               pComponentPrivate->pHandle->pApplicationPrivate,
2238b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               OMX_EventError,
2239b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               eError,
2240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               OMX_TI_ErrorSevere,
2241b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                               NULL);
2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_GetBufferDirection() function determines whether it is input buffer or
2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * output buffer.
2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pBufHeader This is pointer to buffer header whose direction needs to
2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *                    be determined.
2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *eDir  This is output argument which stores the direction of buffer.
2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorBadParameter = In case of invalid buffer
2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
2267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_DIRTYPE *eDir)
2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate;
2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBuf = pComponentPrivate->pInputBufferList->numBuffers;
2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBuf = NULL;
2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int flag = 1;
2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 i=0;
2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Entering GetBufferDirection Function\n");
2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i];
2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pBufHeader == pBuf) {
2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            *eDir = OMX_DirInput;
2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: Buffer %p is INPUT BUFFER\n", pBufHeader);
2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            flag = 0;
2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBuf = pComponentPrivate->pOutputBufferList->numBuffers;
2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i];
2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pBufHeader == pBuf) {
2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            *eDir = OMX_DirOutput;
2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: Buffer %p is OUTPUT BUFFER\n", pBufHeader);
2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            flag = 0;
2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (flag == 1) {
2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        MP3D_OMX_ERROR_EXIT(eError, OMX_ErrorBadParameter,
2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            "Buffer Not Found in List : OMX_ErrorBadParameter");
2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting GetBufferDirection Function\n");
2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ================================================================================= * */
2311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_LCML_Callback() function is callback which is called by LCML whenever
2313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * there is an even generated for the component.
2314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param event  This is event that was generated.
2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param arg    This has other needed arguments supplied by LCML like handles
2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               etc.
2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_LCML_Callback (TUsnCodecEvent event,void * args [10])
2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *pBuffer = args[1];
2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pLcmlHdr;
2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle;
2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle;
2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 i;
2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_BUFDATA *OutputFrames;
2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE rm_error = OMX_ErrorNone;
2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    static double time_stmp = 0;
2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (MP3DEC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate;
2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Entering the LCML_Callback() : event = %d\n",event);
2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(event) {
2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecDspError:
2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecDspError\n");
2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecInternalError:
2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecInternalError\n");
2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecInitError:
2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecInitError\n");
2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecDspMessageRecieved:
2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecDspMessageRecieved\n");
2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecBufferProcessed:
2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecBufferProcessed\n");
2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecProcessingStarted:
2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecProcessingStarted\n");
2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecProcessingPaused:
2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecProcessingPaused\n");
2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecProcessingStoped:
2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecProcessingStoped\n");
2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecProcessingEof:
2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecProcessingEof\n");
2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecBufferNotProcessed:
2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecBufferNotProcessed\n");
2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecAlgCtrlAck:
2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecAlgCtrlAck\n");
2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case EMMCodecStrmCtrlAck:
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "[LCML CALLBACK EVENT]  EMMCodecStrmCtrlAck\n");
2397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(event == EMMCodecBufferProcessed) {
2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if( args[0] == (void *)EMMCodecInputBuffer) {
2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, " :: Inside the LCML_Callback EMMCodecInputBuffer\n");
2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Input: pBufferr = %p\n", pBuffer);
2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirInput, &pLcmlHdr);
2407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid Buffer Came ...\n");
2409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
2410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Input: pLcmlHeader = %p\n", pLcmlHdr);
2412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Input: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir);
2413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Input: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen);
2414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlHdr->pBufHdr->nFilledLen = 0;
2415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT1(pComponentPrivate->dbg, ":: Input: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen);
2416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               PREF(pLcmlHdr->pBufHdr,pBuffer),
2419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               0,
2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               PERF_ModuleCommonLayer);
2421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->lcml_nCntIpRes++;
2423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            MP3DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirInput,__LINE__);
2425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PREF(pLcmlHdr->pBufHdr,pBuffer),
2429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              0,
2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleHLMM);
2431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pLcmlHdr->pBufHdr);
2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nEmptyBufferDoneCount++;
24362eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            SignalIfAllBuffersAreReturned(pComponentPrivate);
2437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->lcml_nIpBuf--;
2438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->app_nBuf++;
2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if (args[0] == (void *)EMMCodecOuputBuffer) {
2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, " :: Inside the LCML_Callback EMMCodecOuputBuffer\n");
2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, "%d\t\t\t\t............ Received OP %p, \tlen %d\n",
2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          __LINE__,pBuffer,(int)args[8]);
2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Output: pBufferr = %p\n", pBuffer);
2447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (!MP3DEC_IsValid(pComponentPrivate,pBuffer,OMX_DirOutput)) {
2448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: ############ FillBufferDone Invalid\n",__LINE__);
2450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* If the buffer we get back from the DSP is not valid call FillBufferDone
2451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                   on a valid buffer */
2452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->nInvalidFrameCount]->pBuffer,
2455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->nInvalidFrameCount]->nFilledLen,
2456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  PERF_ModuleHLMM);
2457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->nInvalidFrameCount++]
2461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          );
24622eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                pComponentPrivate->nFillBufferDoneCount++;
2463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->numPendingBuffers--;
24642eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                SignalIfAllBuffersAreReturned(pComponentPrivate);
2465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }else {
2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = MP3DEC_GetCorresponding_LCMLHeader(pComponentPrivate, pBuffer, OMX_DirOutput, &pLcmlHdr);
2467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
2468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, ":: Error: Invalid Buffer Came ...\n");
2469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
2470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pLcmlHdr->pBufHdr->nFilledLen = (int)args[8];
2472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, ":: Output: pLcmlHeader = %p\n", pLcmlHdr);
2473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, ":: Output: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir);
2474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, ":: Output: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen);
2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* Recover MP3DEC_UAlgOutBufParamStruct from SN*/
2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OutputFrames = pLcmlHdr->pBufHdr->pOutputPortPrivate;
2477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OutputFrames->nFrames = (OMX_U8)(pLcmlHdr->pOpParam->ulFrameCount);
2478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   PREF(pLcmlHdr->pBufHdr,pBuffer),
2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   PREF(pLcmlHdr->pBufHdr,nFilledLen),
2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   PERF_ModuleCommonLayer);
2484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nLcml_nCntOpReceived++;
2486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if ((pComponentPrivate->nLcml_nCntIp >= 1) && (pComponentPrivate->nLcml_nCntOpReceived == 1)) {
2488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_Boundary(pComponentPrivate->pPERFcomp,
2489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  PERF_BoundaryStart | PERF_BoundarySteadyState);
2490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                MP3DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirOutput,__LINE__);
2493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->pMarkData) {
2495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHdr->pBufHdr->pMarkData = pComponentPrivate->pMarkData;
2496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHdr->pBufHdr->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
2497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->num_Reclaimed_Op_Buff++;
2499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2500b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (pLcmlHdr->pOpParam->ulIsLastBuffer){
2501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, "Adding EOS flag to the output buffer\n");
2502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHdr->pBufHdr->nFlags |= OMX_BUFFERFLAG_EOS;
2503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
2505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventBufferFlag,
2506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pLcmlHdr->pBufHdr->nOutputPortIndex,
2507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pLcmlHdr->pBufHdr->nFlags, NULL);
2508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->bIsEOFSent = 0;
25092eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    pLcmlHdr->pOpParam->ulIsLastBuffer=0;
2510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if(pComponentPrivate->frameMode){
2513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* Copying time stamp information to output buffer */
2514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pLcmlHdr->pBufHdr->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->OpBufindex];
2515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }else{
2516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->first_buff == 1){
2517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->first_buff = 2;
2518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pLcmlHdr->pBufHdr->nTimeStamp = pComponentPrivate->first_TS;
2519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->temp_TS = pLcmlHdr->pBufHdr->nTimeStamp;
2520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_PRBUFFER2(pComponentPrivate->dbg, "first_ts = %lld\n",
2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->temp_TS);
2522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }else{
2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        time_stmp = pLcmlHdr->pBufHdr->nFilledLen / (pComponentPrivate->pcmParams->nChannels *
2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                     (pComponentPrivate->pcmParams->nBitPerSample / 8));
2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        time_stmp = (time_stmp / pComponentPrivate->pcmParams->nSamplingRate) * 1000000;
2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        /* Update time stamp information */
2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->temp_TS += time_stmp;
2528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pLcmlHdr->pBufHdr->nTimeStamp = pComponentPrivate->temp_TS;
2529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_PRBUFFER2(pComponentPrivate->dbg, "out ts = %lld\n",
2530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->temp_TS);
2531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /*add on: Copyint tick count information to output buffer*/
2534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pLcmlHdr->pBufHdr->nTickCount = (OMX_U32)pComponentPrivate->arrBufIndexTick[pComponentPrivate->OpBufindex];
2535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->OpBufindex++;
2536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual;
2537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_SendingBuffer(pComponentPrivate->pPERFcomp,
2541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pLcmlHdr->pBufHdr->pBuffer,
2542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pLcmlHdr->pBufHdr->nFilledLen,
2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   PERF_ModuleHLMM);
2544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
2548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                          pLcmlHdr->pBufHdr);
2549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->lcml_nOpBuf--;
2550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->app_nBuf++;
2551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nFillBufferDoneCount++;
25522eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                SignalIfAllBuffersAreReturned(pComponentPrivate);
2553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }else if(event == EMMCodecProcessingStoped) {
2556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        for (i = 0; i < pComponentPrivate->nNumInputBufPending; i++) {
2557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong					pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong					pComponentPrivate->pHandle->pApplicationPrivate,
2559b65f253fdc60f6208a54911bee793d225f23cdf8James Dong					pComponentPrivate->pInputBufHdrPending[i]);
25602eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    pComponentPrivate->nEmptyBufferDoneCount++;
25612eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>			        pComponentPrivate->pInputBufHdrPending[i] = NULL;
25622eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    SignalIfAllBuffersAreReturned(pComponentPrivate);
2563b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			}
2564b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			pComponentPrivate->nNumInputBufPending = 0;
2565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
2566b65f253fdc60f6208a54911bee793d225f23cdf8James Dong					pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2567b65f253fdc60f6208a54911bee793d225f23cdf8James Dong					pComponentPrivate->pHandle->pApplicationPrivate,
25681390603f92ef826d4fa1263a90ce2b7f9666b9b4Masaki Sato						  pComponentPrivate->pOutputBufHdrPending[i]
25692eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>						  );
25702eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    pComponentPrivate->nFillBufferDoneCount++;
25712eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>			        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
25722eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    SignalIfAllBuffersAreReturned(pComponentPrivate);
2573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			}
2574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			pComponentPrivate->nNumOutputBufPending=0;
2575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->codecStop_mutex);
2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pComponentPrivate->codecStop_waitingsignal == 0){
2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->codecStop_waitingsignal = 1;
2579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_signal(&pComponentPrivate->codecStop_threshold);
2580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_ERROR4(pComponentPrivate->dbg, "stop ack. received. stop waiting for sending disable command completed\n");
2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex);
2583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pComponentPrivate->bNoIdleOnStop) {
2584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateIdle;
2585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            rm_error = RMProxy_NewSendCommand(pComponentPrivate->pHandle,
2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              RMProxy_StateSet,
2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_MP3_Decoder_COMPONENT,
2590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_StateIdle,
2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              3456,
2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              NULL);
2593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
25942eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            if((pComponentPrivate->nEmptyThisBufferCount != pComponentPrivate->nEmptyBufferDoneCount) || (pComponentPrivate->nFillThisBufferCount != pComponentPrivate->nFillBufferDoneCount)) {
2595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if(pthread_mutex_lock(&bufferReturned_mutex) != 0)
25962eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                {
25972eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: bufferReturned_mutex mutex lock error\n",__LINE__);
25982eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                }
25992eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                OMX_PRINT2(pComponentPrivate->dbg, ":: pthread_cond_waiting for OMX to return all input and outbut buffers\n");
26002eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                pthread_cond_wait(&bufferReturned_condition, &bufferReturned_mutex);
26012eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                OMX_PRINT2(pComponentPrivate->dbg, ":: OMX has returned all input and output buffers\n");
26022eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                if(pthread_mutex_unlock(&bufferReturned_mutex) != 0)
26032eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                {
26042eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                    OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: bufferReturned_mutex mutex unlock error\n",__LINE__);
26052eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                }
26062eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            }
26072eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            else
26082eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            {
26092eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                OMX_PRINT2(pComponentPrivate->dbg, ":: OMX has returned all input and output buffers\n");
26102eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            }
2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pComponentPrivate->bPreempted==0){
2612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
2615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandStateSet,
2616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->curState,
2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }else{
2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
2622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_ErrorResourcesPreempted,
2623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorMajor,
2624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
2625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }else{
2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE;
2628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bNoIdleOnStop = OMX_FALSE;
2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(event == EMMCodecAlgCtrlAck) {
2632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "GOT MESSAGE USN_DSPACK_ALGCTRL \n");
2633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (event == EMMCodecDspError) {
2635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP1(pComponentPrivate->dbg, ":: commandedState  = %p\n",args[0]);
2637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT2(pComponentPrivate->dbg, ":: arg4 = %p\n",args[4]);
2638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT2(pComponentPrivate->dbg, ":: arg5 = %p\n",args[5]);
2639b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        switch ( (OMX_U32) args [4])
2640b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        {
2641b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* USN_ERR_NONE,: Indicates that no error encountered during execution of the command and the command execution completed succesfully.
2642b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_WARNING,: Indicates that process function returned a warning. The exact warning is returned in Arg2 of this message.
2643b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_PROCESS,: Indicates that process function returned a error type. The exact error type is returnd in Arg2 of this message.
2644b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_PAUSE,: Indicates that execution of pause resulted in error.
2645b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_STOP,: Indicates that execution of stop resulted in error.
2646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_ALGCTRL,: Indicates that execution of alg control resulted in error.
2647b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_STRMCTRL,: Indiactes the execution of STRM control command, resulted in error.
2648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * USN_ERR_UNKNOWN_MSG,: Indicates that USN received an unknown command. */
2649eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong
2650b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__
2651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_PAUSE:
2652b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_STOP:
2653b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_ALGCTRL:
2654b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_STRMCTRL:
2655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_UNKNOWN_MSG:
2656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                {
2657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pComponentPrivate->bIsInvalidState=OMX_TRUE;
2658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pComponentPrivate->curState = OMX_StateInvalid;
2659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pHandle = pComponentPrivate->pHandle;
2660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    pComponentPrivate->cbInfo.EventHandler(pHandle,
2661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            pHandle->pApplicationPrivate,
2662b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_EventError,
2663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_ErrorInvalidState,
2664b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            OMX_TI_ErrorSevere,
2665b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                            NULL);
2666b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                }
2667b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                break;
26680120456697baf4549ecc361497da7f5ba0ea6834Masaki Sato#endif
2669eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong
2670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_WARNING:
2671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            case USN_ERR_PROCESS:
2672b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                MP3DEC_HandleUSNError (pComponentPrivate, (OMX_U32)args[5]);
2673b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                break;
2674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            default:
2675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                break;
2676eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        }
2677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if (event == EMMCodecStrmCtrlAck) {
2678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n");
2681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (args[1] == (void *)USN_STRMCMD_FLUSH) {
2682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pHandle = pComponentPrivate->pHandle;
2683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( args[2] == (void *)EMMCodecInputBuffer) {
2684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (args[0] == (void *)USN_ERR_NONE ) {
2685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing input port %d\n",__LINE__);
2686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
2687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pInputBufHdrPending[i],pBuffer),
2690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          0,
2691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
2692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
2695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
2696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                   pComponentPrivate->pInputBufHdrPending[i]);
26972eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        pComponentPrivate->nEmptyBufferDoneCount++;
2698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pInputBufHdrPending[i] = NULL;
26992eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
2700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumInputBufPending=0;
2702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex);
2704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->codecFlush_waitingsignal == 0){
2705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecFlush_waitingsignal = 1;
2706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_signal(&pComponentPrivate->codecFlush_threshold);
2707b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_ERROR4(pComponentPrivate->dbg, "flush ack. received. for input port\n");
2708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex);
2710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
2712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
2713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
2714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandFlush,
2715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           MP3D_INPUT_PORT,
2716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
2717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else {
2718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "LCML reported error while flushing input port\n");
2719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
2720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if ( args[2] == (void *)EMMCodecOuputBuffer) {
2723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (args[0] == (void *)USN_ERR_NONE ) {
2727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing output port %d\n",__LINE__);
2728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
2729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pOutputBufHdrPending[i],pBuffer),
2732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pOutputBufHdrPending[i],nFilledLen),
2733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
2734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
2737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  pComponentPrivate->pHandle->pApplicationPrivate,
2738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  pComponentPrivate->pOutputBufHdrPending[i]
2739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  );
27402eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        pComponentPrivate->nFillBufferDoneCount++;
2741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
27422eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>                        SignalIfAllBuffersAreReturned(pComponentPrivate);
2743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nNumOutputBufPending=0;
2745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex);
2747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->codecFlush_waitingsignal == 0){
2748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->codecFlush_waitingsignal = 1;
2749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pthread_cond_signal(&pComponentPrivate->codecFlush_threshold);
2750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_ERROR4(pComponentPrivate->dbg, "flush ack. received. for output port\n");
2751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
2752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex);
2753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
2755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventCmdComplete,
2756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_CommandFlush,
2757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           MP3D_OUTPUT_PORT,
2758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
2759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                } else {
2760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_ERROR4(pComponentPrivate->dbg, "LCML reported error while flushing output port\n");
2761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    goto EXIT;
2762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
2763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (event == EMMCodecProcessingPaused) {
2767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->curState = OMX_StatePause;
2769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
2771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_EventCmdComplete, OMX_CommandStateSet,
2772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->curState, NULL);
2773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
2775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (event == EMMCodecInitError){
2776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* Cheking for MMU_fault */
2779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if((args[4] == (void*)USN_ERR_UNKNOWN_MSG) && (args[5] == (void*)NULL)) {
2780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: MMU_Fault \n",__LINE__);
2781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bIsInvalidState = OMX_TRUE;
2782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateInvalid;
2783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pHandle = pComponentPrivate->pHandle;
2784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
2785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
2786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
2787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorHardware,
2788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorSevere,
2789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
2790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (event == EMMCodecInternalError){
2793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* Cheking for MMU_fault */
2797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if((args[4] == (void*)USN_ERR_UNKNOWN_MSG) && (args[5] == (void*)NULL)) {
2798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_ERROR4(pComponentPrivate->dbg, "%d :: UTIL: MMU_Fault \n",__LINE__);
2799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bIsInvalidState = OMX_TRUE;
2800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateInvalid;
2801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pHandle = pComponentPrivate->pHandle;
2802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
2803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
2804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
2805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorHardware,
2806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorSevere,
2807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
2808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting the LCML_Callback() \n");
2814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
2820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_GetCorresponding_LCMLHeader() function gets the corresponding LCML
2822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * header from the actual data buffer for required processing.
2823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pBuffer This is the data buffer pointer.
2825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param eDir   This is direction of buffer. Input/Output.
2827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *MP3D_LCML_BUFHEADERTYPE  This is pointer to LCML Buffer Header.
2829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
2831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
2833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
2835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
2836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
2838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
2840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DEC_GetCorresponding_LCMLHeader(MP3DEC_COMPONENT_PRIVATE* pComponentPrivate,
2841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_U8 *pBuffer,
2842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_DIRTYPE eDir,
2843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 MP3D_LCML_BUFHEADERTYPE **ppLcmlHdr)
2844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pLcmlBufHeader;
2847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nIpBuf=0, nOpBuf=0, i=0;
2848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Entering the MP3DEC_GetCorresponding_LCMLHeader()\n");
2850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, ":: eDir = %d\n",eDir);
2852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while (!pComponentPrivate->bInitParamsInitialized) {
2854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sched_yield();
2856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        Sleep(0);
2858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eDir == OMX_DirInput) {
2863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, ":: In GetCorresponding_LCMLHeader()\n");
2864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
2866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT];
2868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for(i=0; i<nIpBuf; i++) {
2870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
2871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer);
2872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
2873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
2874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRINT1(pComponentPrivate->dbg, "::Corresponding LCML Header Found\n");
2875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
2876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlBufHeader++;
2878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if (eDir == OMX_DirOutput) {
2880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        i = 0;
2881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
2882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT];
2884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: nOpBuf = %d\n",nOpBuf);
2885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for(i=0; i<nOpBuf; i++) {
2887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
2888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer);
2889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
2891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
2892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRINT1(pComponentPrivate->dbg, "::Corresponding LCML Header Found\n");
2893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
2894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlBufHeader++;
2896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
2898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Invalid Buffer Type :: exiting...\n");
2899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting the GetCorresponding_LCMLHeader() \n");
2903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= * */
2907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn MP3DEC_GetLCMLHandle() function gets the LCML handle and interacts with LCML
2909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * by using this LCML Handle.
2910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed.
2912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param *pComponentPrivate  This is component's private date structure.
2914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre          None
2916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post         None
2918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @return      OMX_HANDLETYPE = Successful loading of LCML library.
2920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
2921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
2922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  @see         None
2923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ * */
2925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE MP3DEC_GetLCMLHandle(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
2927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* This must be taken care by WinCE */
2929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
2930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError;
2931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void *handle;
2932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE);
2933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char *error;
2934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    handle = dlopen("libLCML.so", RTLD_LAZY);
2936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!handle) {
2937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fputs(dlerror(), stderr);
2938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fpGetHandle = dlsym (handle, "GetHandle");
2942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((error = dlerror()) != NULL) {
2943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fputs(error, stderr);
2944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = (*fpGetHandle)(&pHandle);
2947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
2948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
2949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "eError != OMX_ErrorNone...\n");
2950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pHandle = NULL;
2951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate;
2955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
2957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return pHandle;
2958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* WINDOWS Explicit dll load procedure */
2961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE MP3DEC_GetLCMLHandle(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
2962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
2964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
2965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError;
2966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LPFNDLLFUNC1 fpGetHandle1;
2967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    g_hLcmlDllHandle = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0);
2969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (g_hLcmlDllHandle == NULL)
2970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
2971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* fputs(dlerror(), stderr); */
2972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMXDBG_PRINT(stderr, ERROR, 4, 0, "BML Load Failed!!!\n");
2973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return pHandle;
2974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(g_hLcmlDllHandle,TEXT("GetHandle"));
2976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!fpGetHandle1)
2977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
2978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* handle the error*/
2979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            FreeLibrary(g_hLcmlDllHandle);
2980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            g_hLcmlDllHandle = NULL;
2981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return pHandle;
2982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* call the function */
2984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = fpGetHandle1(&pHandle);
2985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError != OMX_ErrorNone)
2986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
2987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorUndefined;
2988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMXDBG_PRINT(stderr, ERROR, 4, 0, "eError != OMX_ErrorNone...\n");
2989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            FreeLibrary(g_hLcmlDllHandle);
2990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            g_hLcmlDllHandle = NULL;
2991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pHandle = NULL;
2992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return pHandle;
2993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate;
2996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return pHandle;
2998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
3000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
3002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DECFreeLCMLHandle(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
3003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16 retValue;
3006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bLcmlHandleOpened) {
3009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        retValue = dlclose(pComponentPrivate->pLcmlHandle);
3010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (retValue != 0) {
3012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorUndefined;
3013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bLcmlHandleOpened = 0;
3015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
3018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
3020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DECFreeLCMLHandle(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
3021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16 retValue;
3024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bLcmlHandleOpened) {
3027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        retValue = FreeLibrary(pComponentPrivate->pLcmlHandle);
3029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (retValue == 0) {          /* Zero Indicates failure */
3030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorUndefined;
3031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bLcmlHandleOpened = 0;
3033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
3036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
3038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DEC_CleanupInitParams() This function is called by the component during
3042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe.
3043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent  handle for this instance of the component
3045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre
3047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post
3049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return none
3051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid MP3DEC_CleanupInitParams(OMX_HANDLETYPE pComponent)
3055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
3057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate = (MP3DEC_COMPONENT_PRIVATE *)
3058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pHandle->pComponentPrivate;
3059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pTemp_lcml;
3060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nIpBuf = pComponentPrivate->nRuntimeInputBuffers;
3062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nOpBuf = pComponentPrivate->nRuntimeOutputBuffers;
3063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 i=0;
3065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: MP3DEC_CleanupInitParams()\n");
3067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Freeing:  pComponentPrivate->strmAttr = %p\n", pComponentPrivate->strmAttr);
3069b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->strmAttr);
3070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp_lcml = pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT];
3072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for(i=0; i<nIpBuf; i++) {
3074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Freeing: pTemp_lcml->pIpParam = %p\n",pTemp_lcml->pIpParam);
3075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pIpParam, MP3DEC_UAlgInBufParamStruct);
3076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml++;
3078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Freeing pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT] = %p\n",
3083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT]);
3084b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT]);
3085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp_lcml = pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT];
3087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for(i=0; i<nOpBuf; i++) {
3088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Freeing: pTemp_lcml->pOpParam = %p\n",pTemp_lcml->pOpParam);
3089b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pOpParam, MP3DEC_UAlgOutBufParamStruct);
3090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml++;
3091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, ":: Freeing: pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT] = %p\n",
3094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT]);
3095b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT]);
3096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3097b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pParams, USN_AudioCodecParams);
3098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3099b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->ptAlgDynParams, MP3DEC_UALGParams);
3100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting Successfully MP3DEC_CleanupInitParams()\n");
3102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
3106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
3107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @MP3DEC_CleanupInitParamsEx() This function is called by the component during
3108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* portreconfiguration after port disable to free LCML buffers.
3109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
3110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @param pComponent  handle for this instance of the component
3111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
3112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @pre
3113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
3114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @post
3115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
3116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @return none
3117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
3118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
3119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid MP3DEC_CleanupInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport)
3121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
3122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
3123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate =
3124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (MP3DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
3125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pTemp_lcml;
3126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = 0;
3127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nOpBuf = 0;
3128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i=0;
3129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(indexport == 0 || indexport == -1){
3131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nIpBuf = pComponentPrivate->nRuntimeInputBuffers;
3132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml = pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT];
3133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nIpBuf; i++) {
3134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Freeing: pIpParam = %p\n",
3135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          pTemp_lcml->pIpParam);
3136b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pIpParam, MP3DEC_UAlgInBufParamStruct);
3137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp_lcml++;
3138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "Freeing pLcmlBufHeader[MP3D_INPUT_PORT] = %p\n",
3141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                      pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT]);
3142b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT]);
3143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }else if(indexport == 1 || indexport == -1){
3145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nOpBuf = pComponentPrivate->nRuntimeOutputBuffers;
3146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml = pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT];
3147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nOpBuf; i++) {
3148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Freeing: pOpParam = %p\n",
3149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          pTemp_lcml->pOpParam);
3150b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pOpParam, MP3DEC_UAlgOutBufParamStruct);
3151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp_lcml++;
3152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "Freeing: pLcmlBufHeader[MP3D_OUTPUT_PORT] = %p\n",
3155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                      pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT]);
3156b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT]);
3157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }else{
3159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "Bad indexport!\n");
3160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DEC_SetPending() This function marks the buffer as pending when it is sent
3166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * to DSP/
3167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
3169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header whose buffer is sent to DSP
3171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
3173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre None
3175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post None
3177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return none
3179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid MP3DEC_SetPending(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber)
3182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 i;
3184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eDir == OMX_DirInput) {
3186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
3187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
3188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 1;
3189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "INPUT BUFFER %d IS PENDING Line %ld\n",i,lineNumber);
3190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
3194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
3195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
3196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1;
3197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "OUTPUT BUFFER %d IS PENDING Line %ld\n",i,lineNumber);
3198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DEC_ClearPending() This function clears the buffer status from pending
3206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * when it is received back from DSP.
3207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
3209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header that is received from
3211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * DSP/LCML.
3212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
3214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre None
3216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post None
3218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return none
3220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid MP3DEC_ClearPending(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber)
3224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 i;
3226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eDir == OMX_DirInput) {
3228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
3229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
3230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 0;
3231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "INPUT BUFFER %d IS RECLAIMED Line %ld\n",i,lineNumber);
3232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
3236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
3237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
3238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0;
3239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "OUTPUT BUFFER %d IS RECLAIMED Line %ld\n",i,lineNumber);
3240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DEC_IsPending() This function checks whether or not a buffer is pending.
3248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
3250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest.
3252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
3254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre None
3256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post None
3258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return none
3260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 MP3DEC_IsPending(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
3264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 i;
3266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eDir == OMX_DirInput) {
3268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
3269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
3270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return pComponentPrivate->pInputBufferList->bBufferPending[i];
3271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
3275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
3276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
3277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return pComponentPrivate->pOutputBufferList->bBufferPending[i];
3278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return -1;
3282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DEC_IsValid() This function identifies whether or not buffer recieved from
3288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * LCML is valid. It searches in the list of input/output buffers to do this.
3289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
3291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest.
3293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
3295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre None
3297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post None
3299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return status of the buffer.
3301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 MP3DEC_IsValid(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir)
3305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 i;
3307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int found=0;
3308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eDir == OMX_DirInput) {
3310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
3311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) {
3312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                found = 1;
3313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
3317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
3318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) {
3319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                found = 1;
3320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
3321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return found;
3324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @MP3DECFill_LCMLInitParamsEx() This function initializes the init parameter of
3329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the LCML structure when a port is enabled and component is in idle state.
3330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent This is component handle.
3332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @pre None
3334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @post None
3336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
3337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return appropriate OMX Error.
3338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
3339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE MP3DECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent, OMX_U32 indexport)
3342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize;
3346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 i;
3347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp;
3348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
3349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3DEC_COMPONENT_PRIVATE *pComponentPrivate =
3350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (MP3DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
3351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    MP3D_LCML_BUFHEADERTYPE *pTemp_lcml;
3352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 size_lcml;
3353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *ptr;
3354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Entered Fill_LCMLInitParams");
3356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
3358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
3359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[MP3D_INPUT_PORT]->nBufferSize;
3360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[MP3D_OUTPUT_PORT]->nBufferSize;
3361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Input Buffer Count = %ld\n",nIpBuf);
3363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Input Buffer Size = %ld\n",nIpBufSize);
3364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Output Buffer Count = %ld\n",nOpBuf);
3365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Output Buffer Size = %ld\n",nOpBufSize);
3366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(indexport == 0 || indexport == -1){
3368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, ":: bufAlloced = %d\n",pComponentPrivate->bufAlloced);
3370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        size_lcml = nIpBuf * sizeof(MP3D_LCML_BUFHEADERTYPE);
3371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3372b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MALLOC_SIZE(ptr,size_lcml,OMX_U8);
3373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp_lcml = (MP3D_LCML_BUFHEADERTYPE *)ptr;
3374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pLcmlBufHeader[MP3D_INPUT_PORT] = pTemp_lcml;
3376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i<nIpBuf; i++) {
3378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
3379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
3380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nAllocLen = nIpBufSize;
3382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nFilledLen = nIpBufSize;
3383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nVersion.s.nVersionMajor = MP3DEC_MAJOR_VER;
3384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nVersion.s.nVersionMinor = MP3DEC_MINOR_VER;
3385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
3387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nTickCount = 0;
3388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pBufHdr = pTemp;
3390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->eDir = OMX_DirInput;
3391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pOtherParams[i] = NULL;
3392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3393b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pIpParam,
3394b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                 sizeof(MP3DEC_UAlgInBufParamStruct),
3395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 MP3DEC_UAlgInBufParamStruct);
3396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pIpParam->bLastBuffer = 0;
3397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nFlags = NORMAL_BUFFER;
3399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            ((MP3DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
3400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp: InBuffHeader[%d] = %p\n", i, pTemp);
3402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>> InputBuffHeader[%d]->pBuffer = %p\n", i, pTemp->pBuffer);
3403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp: Ip : pTemp_lcml[%d] = %p\n", i, pTemp_lcml);
3404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml++;
3406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(indexport == 1 || indexport == -1){
3410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        size_lcml = nOpBuf * sizeof(MP3D_LCML_BUFHEADERTYPE);
3411b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,MP3D_LCML_BUFHEADERTYPE);
3412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pLcmlBufHeader[MP3D_OUTPUT_PORT] = pTemp_lcml;
3413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i=0; i<nOpBuf; i++) {
3415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
3416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
3417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nAllocLen = nOpBufSize;
3418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nFilledLen = nOpBufSize;
3419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nVersion.s.nVersionMajor = MP3DEC_MAJOR_VER;
3420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nVersion.s.nVersionMinor = MP3DEC_MINOR_VER;
3421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
3423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nTickCount = 0;
3424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pBufHdr = pTemp;
3426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->eDir = OMX_DirOutput;
3427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pOtherParams[i] = NULL;
3428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3429b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pOpParam,
3430b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                 sizeof(MP3DEC_UAlgOutBufParamStruct),
3431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 MP3DEC_UAlgOutBufParamStruct);
3432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml->pOpParam->ulFrameCount = DONT_CARE;
34332eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            pTemp_lcml->pOpParam->ulIsLastBuffer = 0;
3434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp->nFlags = NORMAL_BUFFER;
3436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            ((MP3DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
3437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>>>>>>>>>>> OutBuffHeader[%d] = %p\n", i, pTemp);
3438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp:  >>>> OutBuffHeader[%d]->pBuffer = %p\n", i, pTemp->pBuffer);
3439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "::Comp: Op : pTemp_lcml[%d] = %p\n", i, pTemp_lcml);
3440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp_lcml++;
3441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
3444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, ":: Exiting Fill_LCMLInitParams");
3446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
3448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
3450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
3451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 MP3DEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition)
3455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nOutput;
3457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nNumBitsRead = 0;
3458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBytePosition = 0;
3459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8  nBitPosition =  0;
3460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBytePosition = *nPosition / 8;
3461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBitPosition =  *nPosition % 8;
3462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (bIcreasePosition)
3464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *nPosition += nBits;
3465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOutput = ((OMX_U32)pBuffer[nBytePosition] << (24+nBitPosition) );
3466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nNumBitsRead = nNumBitsRead + (8 - nBitPosition);
3467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nNumBitsRead < nBits)
3468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
3469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nOutput = nOutput | ( pBuffer[nBytePosition + 1] << (16+nBitPosition));
3470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nNumBitsRead = nNumBitsRead + 8;
3471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nNumBitsRead < nBits)
3473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
3474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nOutput = nOutput | ( pBuffer[nBytePosition + 2] << (8+nBitPosition));
3475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nNumBitsRead = nNumBitsRead + 8;
3476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nNumBitsRead < nBits)
3478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
3479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nOutput = nOutput | ( pBuffer[nBytePosition + 3] << (nBitPosition));
3480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nNumBitsRead = nNumBitsRead + 8;
3481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOutput = nOutput >> (32 - nBits) ;
3483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return nOutput;
3484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
34862eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>/* ========================================================================== */
34872eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>/**
3488b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* @SignalIfAllBuffersAreReturned() This function send signals if OMX returned all buffers to app
34892eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>*
34902eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>* @param AACDEC_COMPONENT_PRIVATE *pComponentPrivate
34912eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>*
34922eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>* @pre None
34932eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>*
34942eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>* @post None
34952eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>*
34962eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>* @return None
34972eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>*/
34982eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>/* ========================================================================== */
34992eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>void SignalIfAllBuffersAreReturned(MP3DEC_COMPONENT_PRIVATE *pComponentPrivate)
35002eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>{
35012eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>    if((pComponentPrivate->nEmptyThisBufferCount == pComponentPrivate->nEmptyBufferDoneCount) && (pComponentPrivate->nFillThisBufferCount == pComponentPrivate->nFillBufferDoneCount))
35022eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>    {
3503b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if(pthread_mutex_lock(&bufferReturned_mutex) != 0)
35042eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        {
35052eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_ERROR4(pComponentPrivate->dbg, "%d :: bufferReturned_mutex mutex lock error\n",__LINE__);
35062eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        }
35072eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        pthread_cond_broadcast(&bufferReturned_condition);
35082eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        OMX_PRINT2(pComponentPrivate->dbg, ":: Sending pthread signal that OMX has returned all buffers to app\n");
35092eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        if(pthread_mutex_unlock(&bufferReturned_mutex) != 0)
35102eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        {
35112eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>            OMX_ERROR4(pComponentPrivate->dbg, "%d :: bufferReturned_mutex mutex unlock error\n",__LINE__);
35122eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        }
35132eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>        return;
35142eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>    }
35152eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>}
35162eb872487f5d31bc01507d26515208c0f4fedb2d<Benny.Wong@motorola.com>
3517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*  =========================================================================*/
3518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*  func    MP3DEC_HandleUSNError
3519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*
3520b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*  desc    Handles error messages returned by the dsp
3521b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*
3522b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*@return n/a
3523b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*
3524b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*  =========================================================================*/
3525b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid MP3DEC_HandleUSNError (MP3DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg)
3526b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{
3527b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pHandle = NULL;
3528b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U8 pending_buffers = OMX_FALSE;
3529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U32 i;
3530b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    switch (arg)
3531b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {
3532b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_WARN_CONCEALED:
3533b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_WARN_UNDERFLOW:
3534b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_WARN_OVERFLOW:
3535b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_WARN_ENDOFDATA:
3536b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_ERROR4(pComponentPrivate->dbg,  "Algorithm Error" );
3537b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* all of these are informative messages, Algo can recover, no need to notify the
3538b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             * IL Client at this stage of the implementation */
3539b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
3540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_WARN_PLAYCOMPLETED:
3541b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            {
3543b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_ERROR4(pComponentPrivate->dbg, "IUALG_WARN_PLAYCOMPLETED!\n");
3544b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifndef UNDER_CE
3545b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3546b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   pComponentPrivate->pHandle->pApplicationPrivate,
3547b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   OMX_EventBufferFlag,
3548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   OMX_DirOutput,
3549b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   OMX_BUFFERFLAG_EOS,
3550b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   NULL);
3551b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            if(pComponentPrivate->dasfmode){
3552b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                       pComponentPrivate->pHandle->pApplicationPrivate,
3554b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                       OMX_EventBufferFlag,
3555b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                       (OMX_U32)NULL,
3556b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                       OMX_BUFFERFLAG_EOS,
3557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                       NULL);
3558b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
3559b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pComponentPrivate->pLcmlBufHeader[0]->pIpParam->bLastBuffer = 0;
3560b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
3561b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /* add callback to application to indicate SN/USN has completed playing of current set of date */
3562b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3563b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   pComponentPrivate->pHandle->pApplicationPrivate,
3564b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   OMX_EventBufferFlag,
3565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   (OMX_U32)NULL,
3566b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   OMX_BUFFERFLAG_EOS,
3567b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                   NULL);
3568b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
3569b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
3570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
3571b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3572b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__
3573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_BAD_HANDLE:
3574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_DATA_CORRUPT:
3575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_NOT_SUPPORTED:
3576b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_ARGUMENT:
3577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_NOT_READY:
3578b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        case IUALG_ERR_GENERAL:
3579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            {
3581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                /* all of these are fatal messages, Algo can not recover
3582b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                 * hence return an error */
3583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                OMX_ERROR4(pComponentPrivate->dbg,  "Algorithm Error, cannot recover" );
3584b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponentPrivate->bIsInvalidState=OMX_TRUE;
3585b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponentPrivate->curState = OMX_StateInvalid;
3586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pHandle = pComponentPrivate->pHandle;
3587b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                pComponentPrivate->cbInfo.EventHandler(pHandle,
3588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        pHandle->pApplicationPrivate,
3589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_EventError,
3590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_ErrorInvalidState,
3591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        OMX_TI_ErrorSevere,
3592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        NULL);
3593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
3594b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
3595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
3596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        default:
3597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            break;
3598b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
3599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong}
3600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED
3602b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid MP3_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData)
3603b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{
3604b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMMANDTYPE Cmd = OMX_CommandStateSet;
3605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_STATETYPE state = OMX_StateIdle;
3606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent;
3607b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    MP3DEC_COMPONENT_PRIVATE *pCompPrivate = NULL;
3608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pCompPrivate = (MP3DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
3610b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3611b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesPreempted) {
3612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if (pCompPrivate->curState == OMX_StateExecuting ||
3613b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivate->curState == OMX_StatePause) {
3614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
3615b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            write (pCompPrivate->cmdDataPipe[1], &state ,sizeof(OMX_U32));
3616b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pCompPrivate->bPreempted = 1;
3617b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
3618b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
3619b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    else if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesAcquired){
3620b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pCompPrivate->cbInfo.EventHandler (pHandle,
3621b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                           pHandle->pApplicationPrivate,
3622b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                           OMX_EventResourcesAcquired, 0,0,
3623b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                           NULL);
3624b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
3625b65f253fdc60f6208a54911bee793d225f23cdf8James Dong}
3626b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
3627