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