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/* ============================================================================= 22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Texas Instruments OMAP (TM) Platform Software 23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Use of this software is controlled by the terms and conditions found 26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * in the license agreement under which this software has been supplied. 27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @file OMX_WmaDec_Utils.c 30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements OMX Component for WMA decoder that 32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * is fully compliant with the OMX Audio specification 1.0. 33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path $(CSLPATH)\ 35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev 0.1 37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------------------------------------------------------- 39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History 41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! =================================== 42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 10-Sept-2005 mf: Initial Version. Change required per OMAPSWxxxxxxxxx 43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! to provide _________________. 44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 10-Sept-2005 mf: 47b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *! This is newest file 48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */ 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/ 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * INCLUDE FILES 54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/ 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/ 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h> 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h> 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h> 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 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#include <errno.h> 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dlfcn.h> 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h> 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WmaDec_Utils.h" 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "wmadecsocket_ti.h" 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <decode_common_ti.h> 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "usn.h" 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define HASHINGENABLE 1 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid sleep(DWORD Duration) 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Sleep(Duration); 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @WMADECFill_LCMLInitParams () This function is used by the component thread to 96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * fill the all of its initialization parameters, buffer deatils etc 97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to LCML structure, 98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param plcml_Init pointer to LCML structure to be filled 101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECFill_LCMLInitParams(OMX_COMPONENTTYPE* pComponent, 110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_DSP *plcml_Init, OMX_U16 arr[]) 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp; 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int size_lcml; 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 index; 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pTemp_lcml = NULL; 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_STRMATTR *strmAttr = NULL; 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle; 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate, *pComponentPrivate_CC; 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = pComponent->pComponentPrivate; 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC = pComponentPrivate; 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (LCML_DSP_INTERFACE *)pComponent; 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 12700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "[WMADECFill_LCMLInitParams] pComponent = %p",pComponent); 12800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "[WMADECFill_LCMLInitParams] pComponentPrivate = %p", 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate); 13000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entered WMADECFill_LCMLInitParams",__LINE__); 13100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: WMADECFill_LCMLInitParams - pComponentPrivate = %p", 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate); 13300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: WMADECFill_LCMLInitParams - pHandle = %p",__LINE__, 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle); 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nRuntimeInputBuffers = nIpBuf; 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WMADEC_BUFFER_SIZE; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nRuntimeOutputBuffers = nOpBuf; 141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferSize; 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Fill Input Buffers Info for LCML */ 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.nBuffers = nIpBuf; 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.nSize = nIpBufSize; 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD; 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Fill Output Buffers Info for LCML */ 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.nBuffers = pComponentPrivate_CC->pOutputBufferList->numBuffers; 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.nSize = nOpBufSize; 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD; 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Copy the node information */ 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.nNumOfDLLs = 3; 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].uuid = &WMADECSOCKET_TI_UUID; 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *) plcml_Init->NodeInfo.AllUUIDs[0].DllName,WMADEC_DLL_NAME); 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].uuid = &WMADECSOCKET_TI_UUID; 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *) plcml_Init->NodeInfo.AllUUIDs[1].DllName,WMADEC_DLL_NAME); 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID; 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *) plcml_Init->NodeInfo.AllUUIDs[2].DllName,WMADEC_USN_DLL_NAME); 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 17100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice =0; 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 174b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->pDynParams, sizeof(WMADEC_UALGParams), WMADEC_UALGParams); 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->first_buffer=1; 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->dasfmode == 1) 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pComponentPrivate->pParams, sizeof(WMADEC_AudioCodecParams), WMADEC_AudioCodecParams); 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_GENERIC(strmAttr, LCML_STRMATTR); 18300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,strmAttr); 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (strmAttr == NULL) 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 18700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "strmAttr - failed to malloc"); 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->strmAttr = strmAttr; 19200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,strmAttr); 19300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uSegid = 0; 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uAlignment = 0; 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uTimeout = -1; 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uBufsize = pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferSize; 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->uNumBufs = NUM_WMADEC_OUTPUT_BUFFERS_DASF; 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strmAttr->lMode = STRMMODE_PROCCOPY; 20100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.TypeofDevice =1; 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID; 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->DeviceInfo.DspStream = strmAttr; 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 20800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*copy the other information */ 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->SegID = OMX_WMADEC_DEFAULT_SEGMENT; 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Timeout = OMX_WMADEC_SN_TIMEOUT; 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Alignment = 0; 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->Priority = OMX_WMADEC_SN_PRIORITY; 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->ProfileID = -1; 21600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->iWmaSamplingFrequeny = WMADEC_DEFAULT_SAMPLING_FREQUENCY; 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 21900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*Accessing these 2 has the problem/creates problem in state transition tests*/ 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->iWmaChannels = 224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->wmaParams[OUTPUT_PORT]->nChannels; 22500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[0] = WMADEC_STREAM_COUNT; 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[1] = INPUT_PORT; 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[2] = DMM; 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate_CC->pInputBufferList->numBuffers) 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[3] = pComponentPrivate_CC->pInputBufferList->numBuffers; 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[3] = 1; 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[4] = OUTPUT_PORT; 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->dasfmode == 1) 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[5] = OUTSTRM; 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = NUM_WMADEC_OUTPUT_BUFFERS_DASF; 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 24800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "FILE MODE"); 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[5] = DMM; 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate_CC->pOutputBufferList->numBuffers) 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = pComponentPrivate_CC->pOutputBufferList->numBuffers; 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = 1; 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 25900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin index = WMADEC_STREAM_COUNT * 3 + 1; 26200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[index] = END_OF_CR_PHASE_ARGS; 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < index+1; i++) { 26900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "arr[%d] = %d",i,arr[i]); 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[7] = END_OF_CR_PHASE_ARGS; 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin plcml_Init->pCrPhArgs = arr; 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 27800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = nIpBuf * sizeof(LCML_WMADEC_BUFHEADERTYPE); 280b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_WMADEC_BUFHEADERTYPE); 28100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,pTemp_lcml); 28200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "Line %d::pTemp_lcml = %p",__LINE__,pTemp_lcml); 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTemp_lcml == NULL) 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Free previously allocated memory before bailing */ 286b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(strmAttr); 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->pLcmlBufHeader[INPUT_PORT] = pTemp_lcml; 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 29200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "nIpBuf = %ld",nIpBuf); 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nIpBuf; i++) 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate_CC->pInputBufferList->pBufHdr[i]; 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->dasfmode == 0) 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = 0; 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER; 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WMADEC_MINOR_VER; 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 312b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pIpParam, 313b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WMADEC_UAlgInBufParamStruct), 314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_UAlgInBufParamStruct); 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pTemp_lcml->pIpParam == NULL) 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Free previously allocated memory before bailing */ 318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(strmAttr); 319b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pTemp_lcml ); 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->pIpParam->bLastBuffer = 0; 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the application to indicate the last buffer */ 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size_lcml = pComponentPrivate_CC->pOutputBufferList->numBuffers * sizeof(LCML_WMADEC_BUFHEADERTYPE); 335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_WMADEC_BUFHEADERTYPE); 33600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,pTemp_lcml); 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTemp_lcml == NULL) 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Free previously allocated memory before bailing */ 340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(strmAttr); 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->pLcmlBufHeader[OUTPUT_PORT] = pTemp_lcml; 345b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 346b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->pOutputBufferList->EosFlagSent = 0; 347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->InputEosSet = 0; 348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i<nOpBuf; i++) 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp = pComponentPrivate_CC->pOutputBufferList->pBufHdr[i]; 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER; 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WMADEC_MINOR_VER; 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nVersion = pTemp->nVersion.nVersion; 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp++; 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->bPortDefsAllocated = 1; 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nLcml_nCntIp = 0; 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nLcml_nCntOpReceived = 0; 376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting WMADECFill_LCMLInitParams",__LINE__); 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->bInitParamsInitialized = 1; 380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @WMADEC_StartComponentThread() This function is called by the component to create 388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the component thread, command pipe, data pipe and LCML Pipe. 389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_StartComponentThread(OMX_HANDLETYPE pComponent) 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = 405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_attr_t attr; 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY; 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 41300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Inside WMADEC_StartComponentThread", __LINE__); 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Initialize all the variables*/ 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 0; 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsEOFSent = 0; 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 42000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "WMADEC_StartComponentThread pComponentPrivate = %p", 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate); 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdDataPipe); 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send buffers to the thread */ 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->dataPipe); 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->cmdPipe); 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Create the Component Thread */ 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), &attr, 449b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WMADEC_ComponentThread, pComponentPrivate); 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL, 452b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WMADEC_ComponentThread, pComponentPrivate); 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError || !pComponentPrivate->ComponentThread) 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bCompThreadStarted = 1; 460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 461b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 462b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 463b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 464b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 465b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 466b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 467b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 468b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @Mp3Dec_FreeCompResources() This function is called by the component during 475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe. 476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_FreeCompResources(OMX_HANDLETYPE pComponent) 488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{ 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *) 491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE err = OMX_ErrorNone; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf = 0; 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOpBuf = 0; 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 49800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: WMADEC_FreeCompResources", __LINE__); 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 50000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d:::pComponentPrivate->bPortDefsAllocated = %ld", 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate->bPortDefsAllocated); 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pPortDef[INPUT_PORT]->nBufferCountActual; 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferCountActual; 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bCompThreadStarted) 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[0]); 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->dataPipe[1]); 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[0]); 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdPipe[1]); 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 53500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[0]); 53700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 54000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 54200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error while closing cmdPipe",__LINE__); 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 54500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = close (pComponentPrivate->cmdDataPipe[1]); 54700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != err && OMX_ErrorNone == eError) 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 55000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 55200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error while closing cmdPipe",__LINE__); 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bPortDefsAllocated) 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 55900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[INPUT_PORT]) 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 56200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "freeing pComponentPrivate->pPortDef[INPUT_PORT] = \ 56400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong %p",pComponentPrivate->pPortDef[INPUT_PORT]); 565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pPortDef[INPUT_PORT]); 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 56700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[OUTPUT_PORT]) 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 57100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::[WMADEC_FreeCompResources] ", __LINE__); 57200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[OUTPUT_PORT] = %p", 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]); 574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pPortDef[OUTPUT_PORT]); 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->wmaParams[INPUT_PORT]) 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 57900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->wmaParams[INPUT_PORT] = %p", 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wmaParams[INPUT_PORT]); 581b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->wmaParams[INPUT_PORT]); 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->wmaParams[OUTPUT_PORT]) 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 58600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->wmaParams[OUTPUT_PORT] = %p", 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wmaParams[OUTPUT_PORT]); 58800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "wmaParams[OUTPUT_PORT]->nPortIndex = %ld", 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->wmaParams[OUTPUT_PORT]->nPortIndex); 590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->wmaParams[OUTPUT_PORT]); 591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "after pComponentPrivate->wmaParams[OUTPUT_PORT] = \ 59200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong %p",pComponentPrivate->wmaParams[OUTPUT_PORT]); 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 0; 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 59700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "\n\n FreeCompResources: Destroying mutexes.\n"); 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex); 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold); 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex); 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->InIdle_threshold); 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex); 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold); 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event)); 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->InIdle_event)); 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event)); 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 61300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "Exiting Successfully WMADEC_FreeCompResources()"); 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * WMADEC_CleanupInitParams() This functions cleans up initialization 622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * parameters when shutting down 623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX Error code 631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CleanupInitParams(OMX_HANDLETYPE pComponent) 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *) 638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pTemp_lcml; 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf = 0; 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i=0; 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->strmAttr); 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pDynParams, WMADEC_UALGParams); 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->dasfmode == 1) 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 652b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pParams, WMADEC_AudioCodecParams); 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->nRuntimeInputBuffers; 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml = pComponentPrivate->pLcmlBufHeader[INPUT_PORT]; 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pTemp_lcml) 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nIpBuf; i++) 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 66200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "freeing pTemp_lcml->pIpParam = %p", pTemp_lcml->pIpParam); 663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT_DSPALIGN(pTemp_lcml->pIpParam, WMADEC_UAlgInBufParamStruct); 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pTemp_lcml++; 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 66700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "freeing pComponentPrivate->pLcmlBufHeader[INPUT_PORT] = %p", 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[INPUT_PORT]); 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 67000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[FREE] %p",__LINE__, 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[INPUT_PORT]); 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 673b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[INPUT_PORT]); 67400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "freeing pComponentPrivate->pLcmlBufHeader[OUTPUT_PORT] = %p", 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[OUTPUT_PORT]); 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 67700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[FREE] %p",__LINE__, 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[OUTPUT_PORT]); 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 680b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pComponentPrivate->pLcmlBufHeader[OUTPUT_PORT]); 68100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "Exiting Successfully WMADEC_CleanupInitParams()"); 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @WMADEC_StopComponentThread() This function is called by the component during 688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe. 689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_StopComponentThread(OMX_HANDLETYPE pComponent) 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *) 705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pComponentPrivate; 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int pthreadError = 0; 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Join the component thread */ 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bIsStopping = 1; 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->cmdPipe[1], &pComponentPrivate->bIsStopping, sizeof(OMX_U16)); 71400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:::About to call pthread_join",__LINE__); 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join (pComponentPrivate->ComponentThread, 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)&threadError); 71700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d:::called pthread_join",__LINE__); 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 72100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error while closing Component Thread - pthreadError = %d", 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pthreadError); 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Check for the errors */ 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError) 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 72900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error while closing Component Thread",__LINE__); 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 73100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "Exiting Successfully from Stop Component thread"); 732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return eError; 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @WMADECHandleCommand() This function is called by the component when ever it 739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the command from the application 740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate Component private data 742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WMADECHandleCommand (WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE command; 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STATETYPE commandedState; 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 commandData; 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U16 i; 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle; 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle; 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 76600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "WMADECHandleCommand"); 76700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering WMADECHandleCommand Function - curState = %d", 768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate->curState); 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin read (pComponentPrivate->cmdPipe[0], &command, sizeof (command)); 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)(read) == -1){ 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError, 775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorSevere, 776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 77800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: Just read from the command pipe",__LINE__); 77900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: command = %d",__LINE__,command); 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData)); 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)(read) == -1){ 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError, 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 79000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: command = %d",__LINE__,command); 79100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: commandData = %ld",__LINE__,commandData); 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedCommand(pComponentPrivate->pPERFcomp, 795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin command, 796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin commandData, 797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleLLMM); 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (command == OMX_CommandStateSet) 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin commandedState = (OMX_STATETYPE)commandData; 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(commandedState) 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateIdle: 807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = WMADEC_CommandToIdle(pComponentPrivate); 808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateExecuting: 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = WMADEC_CommandToExecuting(pComponentPrivate); 813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateLoaded: 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = WMADEC_CommandToLoaded(pComponentPrivate); 818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StatePause: 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = WMADEC_CommandToPause(pComponentPrivate); 823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateWaitForResources: 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = WMADEC_CommandToWaitForResources(pComponentPrivate); 829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateInvalid: 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 83400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd OMX_StateInvalid:", 835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == commandedState) 838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorSameState, 843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 84500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application", 846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateWaitForResources && 851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateInvalid && 852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState != OMX_StateLoaded) 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy, (void *)pArgs); 857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 85800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMajor, 866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CleanupInitParams(pHandle); 869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case OMX_StateMax: 87300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd OMX_StateMax::", 874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 876b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRSTATE2(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Unknown::", 878b65f253fdc60f6208a54911bee793d225f23cdf8James Dong __LINE__); 879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* End of Switch */ 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandMarkBuffer) 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 88500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received %d",__LINE__); 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->pMarkBuf) 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 88800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "command OMX_CommandMarkBuffer received %d",__LINE__); 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TODO Need to handle multiple marks */ 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData); 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandPortDisable) 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->bDisableCommandPending) 896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0){ 897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable port */ 898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) { 899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->bBufferPending[%d] = %ld",i, 900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i]); 901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (WMADEC_IsPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i],OMX_DirInput)) { 902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Real solution is flush buffers from DSP. Until we have the ability to do that 903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin we just call EmptyBufferDone() on any pending buffers */ 90400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Forcing EmptyBufferDone"); 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PREF(pComponentPrivate->pInputBufferList->pBufHdr[i], pBuffer), 908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[i]); 914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled = OMX_FALSE; 918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == -1){ 921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* disable port */ 922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled = OMX_FALSE; 923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1) 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled = OMX_FALSE; 928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) 929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bNoIdleOnStop = OMX_TRUE; 931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_ControlCodec( 935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 94400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "commandData = %ld",commandData); 94500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated = %d", 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated); 94700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated = %d", 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated); 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0) 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated) 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if input unpopulated */ 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin INPUT_PORT, 960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1) 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated) 973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if output unpopulated */ 975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, 980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == -1){ 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated && 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated) 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return cmdcomplete event if inout & output unpopulated */ 996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin INPUT_PORT, 1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortDisable, 1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, 1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 0; 1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandPending = 1; 1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDisableCommandParam = commandData; 1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandPortEnable) 1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->bEnableCommandPending){ 1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0 || commandData == -1) 1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable in port */ 102400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "setting input port to enabled"); 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled = OMX_TRUE; 102600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled = %d", 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled); 1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x1 || commandData == -1) 1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* enable out port */ 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled = OMX_TRUE; 103400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled = %d", 1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled); 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting && pComponentPrivate->bDspStoppedWhileExecuting){ 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE; 1039b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart,(void *)pArgs); 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 104700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "commandData = %ld",commandData); 104800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "pComponentPrivate->curState = %d", 1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState); 105000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated = %d", 1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated); 1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x0 ) 1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->curState == OMX_StateLoaded || 1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated) 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin INPUT_PORT, NULL); 1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == 0x1) 1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->curState == 1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateLoaded || 1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated) 1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal){ 1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, NULL); 1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->reconfigOutputPort){ 1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->reconfigOutputPort = 0; 1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADECFill_LCMLInitParamsEx(pHandle,commandData); 1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 109900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pComponentPrivate->nNumInputBufPending=%ld",pComponentPrivate->nNumInputBufPending); 1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++){ 1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]){ 1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pLcmlHdr; 1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (!WMADEC_IsPending(pComponentPrivate, 1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i], 1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput) ){ 1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADECGetCorresponding_LCMLHeader( 1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate, 1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput, 1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin &pLcmlHdr); 1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_SetPending(pComponentPrivate, 1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i], 1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput); 111400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "QUEUEING INPUT BUFFER"); 111500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "nfilledLen= %ld",pComponentPrivate->pInputBufHdrPending[i]->nFilledLen); 1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(WMADEC_UAlgInBufParamStruct), 1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) 1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 112600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "ERROR IN QUEUEBUFFER"); 1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntIp++; 1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending=0; 1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if(commandData == -1 ) 1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->curState == OMX_StateLoaded || 1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated && 1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated)) 1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->AlloBuf_waitingsignal) 1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex); 1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->AlloBuf_waitingsignal = 0; 1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold); 1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex); 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin INPUT_PORT, NULL); 1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandPortEnable, 1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, NULL); 1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 0; 1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->reconfigOutputPort = 0; 1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADECFill_LCMLInitParamsEx(pHandle,commandData); 1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandPending = 1; 1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bEnableCommandParam = commandData; 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (command == OMX_CommandFlush) 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 aParam[3] = {0}; 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(commandData == 0x0 || commandData == -1) 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->nUnhandledEmptyThisBuffers == 0) { 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE; 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0x0; 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0x0; 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecFlush_waitingsignal == 0){ 1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex); 1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl, (void*)aParam); 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecFlush_waitingsignal == 0){ 1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecFlush_threshold, &pComponentPrivate->codecFlush_mutex); 1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecFlush_waitingsignal = 0; 1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex); 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else { 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushInputPortCommandPending = OMX_TRUE; 1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(commandData == 0x1 || commandData == -1) 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nUnhandledFillThisBuffers == 0) { 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE; 1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin //ComponentPrivate->first_buff = 0; 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0x1; 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0x0; 1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "Flushing output port"); 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecFlush_waitingsignal == 0){ 1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecFlush_mutex); 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecControlStrmCtrl, (void*)aParam); 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecFlush_waitingsignal == 0){ 1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecFlush_threshold, &pComponentPrivate->codecFlush_mutex); 1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->codecFlush_waitingsignal = 0; 1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecFlush_mutex); 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushOutputPortCommandPending = OMX_TRUE; 1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 124500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting WMADECHandleCommand Function",__LINE__); 124600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning %d",__LINE__,eError); 1247b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone && eError != EXIT_COMPONENT_THRD ) { 1248b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1249b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 1251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 1252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 1253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 1254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @WMADECHandleDataBuf_FromApp() This function is called by the component when ever it 1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the buffer from the application 1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate Component private data 1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHeader Buffer from the application 1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none 1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECHandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader, 1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 127700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "At handle data buff from app device string is =%p",pComponentPrivate->sDeviceString); 127800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "At handle databuff from app pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated =%d", 1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated); 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL; 1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir; 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pLcmlHdr; 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle; 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate_CC; 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3]; 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "hello"; 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC = pComponentPrivate; 1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle; 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 129300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering WMADECHandleDataBuf_FromApp Function",__LINE__); 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Find the direction of the received buffer from buffer list */ 1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WMADECGetBufferDirection(pBufHeader, &eDir); 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 129900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: The PBufHeader is not found in the list", __LINE__); 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1305b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->nUnhandledEmptyThisBuffers--; 1306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState == OMX_StateIdle){ 1307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader); 1310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return input buffers", __LINE__, __FUNCTION__); 1311b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1312b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn = pComponentPrivate->pPortDef[OMX_DirInput]; 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( (pBufHeader->nFilledLen > 0) || (pBufHeader->nFlags & OMX_BUFFERFLAG_EOS)) 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBypassDSP = 0; 1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WMADECGetCorresponding_LCMLHeader(pComponentPrivate, 1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pBuffer, 1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirInput, 1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pLcmlHdr); 1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 132300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Invalid Buffer Came ...",__LINE__); 1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 132700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d Comp:: Sending Filled Input buffer = %p, %p to LCML", 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pBufHeader,pBufHeader->pBuffer); 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 133000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pBufHeader->nFilledLen :%ld ",pBufHeader->nFilledLen); 1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pIpParam->bLastBuffer = 0; 1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBufHeader,pBuffer), 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn->nBufferSize, 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /** ring tone**/ 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->SendAfterEOS == 1){ 1341686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) 1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 pValues[4]; 134500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: ---- Comp: DASF Functionality is ON ---",__LINE__); 1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pHeaderInfo->iChannel == 1) 1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat = WMA_MONO_CHANNEL; 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat = WMA_STEREO_NON_INTERLEAVED; 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 135400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iAudioFormat = %d", pComponentPrivate->pParams->iAudioFormat); 1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iStrmId = pComponentPrivate->streamID; 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iSamplingRate = 1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHeaderInfo->iSamplePerSec; 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 135900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iSamplingRate = %ld", 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iSamplingRate); 136100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iStrmId = %ld", 1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iStrmId); 136300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iAudioFormat = %d", 1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat); 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[1] = (OMX_U32)pComponentPrivate->pParams; 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[2] = sizeof(WMADEC_AudioCodecParams); 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[3] = OUTPUT_PORT; 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 137400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec StreamControl..", 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef ANDROID //this is used to separate changes made for integration with opencore 2.1 or later versions 1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* check if the buffer contains config data, it should only be the case in the fist input buffer*/ 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader->nFlags & OMX_BUFFERFLAG_CODECCONFIG){ 1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->bConfigData = 1; /* changed the if statement to use the buffer flag, now this flag doesnt do anything 1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin we will leave it for now incase it becomes useful */ 138500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: UTIL: Before parsing ",__LINE__); 138600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong eError=WMADEC_Parser( pBufHeader->pBuffer,pComponentPrivate->rcaheader, pComponentPrivate->dbg); 138700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: UTIL: After parsing ", __LINE__); 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 139000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Parsing invalid ...",__LINE__); 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*******************Updating if needed*********************/ 139400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "OLD: pComponentPrivate->wmaParams[OUTPUT_PORT]->nSamplingRate=%ld ",pComponentPrivate->wmaParams[OUTPUT_PORT]->nSamplingRate); 1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* if(pComponentPrivate->wma_op->nSamplingRate != iSamplePerSec){ 1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->wma_op->nSamplingRate=iSamplePerSec; 1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->reconfigOutputPort=1; 139800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "=================RECONFIGURATION NEEDED==============="); 139900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "NEW: pComponentPrivate->wmaParams[OUTPUT_PORT]->nSamplingRate=%d ",pComponentPrivate->wmaParams[OUTPUT_PORT]->nSamplingRate); 1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->wma_op->nChannels != iChannel){ 1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->wma_op->nChannels = iChannel; 1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->reconfigOutputPort=1; 140400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "=================RECONFIGURATION NEEDED==============="); 1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->reconfigOutputPort){ 1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventPortSettingsChanged, 1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, 1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 141300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "================= sent reconfig event to client==============="); */ 1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen = 0; 1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone ( 1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle, 1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader 1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // } 1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bConfigData = 0; 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pComponentPrivate->dasfmode ) 1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->iOutputFormat = WMA_IAUDIO_BLOCK; /* EAUDIO_BLOCKED */ 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->iOutputFormat = WMA_IAUDIO_INTERLEAVED; /* EAUDIO_INTERLEAVED */ 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->size = sizeof( WMADEC_UALGParams ); 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = WMA_IUALG_CMD_SETSTATUS; 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)( pComponentPrivate->pDynParams ); 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof( WMADEC_UALGParams ); 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void *)&cmdValues; 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlAlgCtrl, (void *)p); 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 144500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec algctrl..", __LINE__); 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBypassDSP = 0; 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)(pComponentPrivate->pLcmlHandle))->pCodecinterfacehandle, 1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)pArgs); 1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 145400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Start..", __LINE__); 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 0; 1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHeader->nFlags & OMX_BUFFERFLAG_EOS){ 1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->pIpParam->bLastBuffer = 1; 1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 1; 1462b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->InputEosSet = 1; 1463b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufferList->EosFlagSent = 0; 146400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: OMX_WmaDec_Utils.c : pComponentPrivate->SendAfterEOS %d",__LINE__,pComponentPrivate->SendAfterEOS); 1465b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Store tick count information*/ 1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndexTick[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount; 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Store time stamp information */ 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->arrBufIndex[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp; 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex++; 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferCountActual; 147200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Output Buffer TimeStamp %lld", __LINE__, pComponentPrivate->arrBufIndex[pComponentPrivate->IpBufindex]); 1473686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato#ifdef ANDROID 1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pComponentPrivate->first_buffer) 1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->rcaheader->iPayload=pBufHeader->nFilledLen; 1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->rcaheader->iMaxPacketSize = pComponentPrivate->rcaheader->iPayload+31; 1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memmove(pBufHeader->pBuffer+75,pBufHeader->pBuffer,pBufHeader->nFilledLen); 1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(pBufHeader->pBuffer,0x00,75); 1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 16, &pComponentPrivate->rcaheader->iMaxPacketSize, 2); 1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 36, &pComponentPrivate->rcaheader->iTypeSpecific, 4); 1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 42, &pComponentPrivate->rcaheader->iFormatTag, 2); 1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 44, &pComponentPrivate->rcaheader->iChannel, 2); 1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 46, &pComponentPrivate->rcaheader->iSamplePerSec, 4); 1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 50, &pComponentPrivate->rcaheader->iAvgBytesPerSec, 4); 1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 54, &pComponentPrivate->rcaheader->iBlockAlign, 2); 1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 56, &pComponentPrivate->rcaheader->iValidBitsPerSample, 2); 1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 64, &pComponentPrivate->rcaheader->iEncodeOptV, 2); 1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 71, &pComponentPrivate->rcaheader->iPayload, 4); 1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen+=75; 1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->first_buffer=0; 1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else 1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memmove(pBufHeader->pBuffer+5,pBufHeader->pBuffer,pBufHeader->nFilledLen); 1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memset(pBufHeader->pBuffer,0x00,5); 1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin memcpy(pBufHeader->pBuffer + 1, &pComponentPrivate->rcaheader->iPayload, 4); 1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen+=5; 1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 150000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Before sending input buffer"); 150100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pBufHeader->nFilledLen=%ld",pBufHeader->nFilledLen); 1502686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato#endif 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->bDspStoppedWhileExecuting) 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WMADEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!pComponentPrivate->reconfigOutputPort){ 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput); 1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen, 1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(WMADEC_UAlgInBufParamStruct), 1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) 1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 152100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "ERROR IN QUEUEBUFFER"); 152200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d ::IssuingDSP IP: Error Occurred", 1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->lcml_nCntIp++; 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 153100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: UTIL: Bypassing the sending of input buffers to lcml",__LINE__); 1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader; 153300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: UTIL: pComponentPrivate->nNumInputBufPending=%ld",__LINE__, 1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending); 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader 1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 154000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Don't queue buffers during a reconfig"); 1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PREF(pBufHeader,pBuffer), 1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nFilledLen = 0; 1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader); 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1559686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato else if (pComponentPrivate->curState == OMX_StatePause) 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader; 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBypassDSP = 1; 156800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Forcing EmptyBufferDone"); 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PREF(pComponentPrivate->pInputBufferList->pBufHdr[0], pBuffer), 1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, PERF_ModuleHLMM); 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->nFilledLen = 0; 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle, 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->pBufHdr[0]); 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader->pMarkData) 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* copy mark to output buffer header */ 1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = 1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pMarkData; 1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = 1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->hMarkTargetComponent; 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* trigger event handler if we are supposed to */ 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && 1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader->pMarkData) 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate->pHandle, 1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventMark, 0, 0, pBufHeader->pMarkData); 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bFlushInputPortCommandPending) 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_SendCommand(pComponentPrivate->pHandle, 1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush,0,NULL); 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (eDir == OMX_DirOutput) 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nUnhandledFillThisBuffers--; 1608b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pComponentPrivate->curState == OMX_StateIdle){ 1609b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, 1610b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1611b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pBufHeader); 1612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2(pComponentPrivate->dbg, ":: %d %s In idle state return output buffers", __LINE__, __FUNCTION__); 1613b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 161500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending output buffer to LCML "); 161600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d Comp:: Sending Emptied Output buffer=%p to LCML", 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pBufHeader); 1618b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate_CC->pPERFcomp, 1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PREF(pBufHeader,pBuffer), 1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 0, 1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleCommonLayer); 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1625686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if (pComponentPrivate->bBypassDSP == 0) { 1626686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if (pComponentPrivate->curState == OMX_StateExecuting) { 1627686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if(!(pComponentPrivate->reconfigInputPort || pComponentPrivate->reconfigOutputPort)){ 1628686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if (!WMADEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)){ 1629686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if(!pComponentPrivate->bDspStoppedWhileExecuting){ 1630686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato WMADEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput); 1631686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato pComponentPrivate->LastOutputBufferHdrQueued = pBufHeader; 1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *)pBufHeader->pBuffer, 1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pBufHeader->nAllocLen, 1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 0, NULL); 1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone ) 1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 164100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: IssuingDSP OP: Error Occurred", 1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorHardware; 1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1646b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->lcml_nOpBuf++; 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1649b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } else{ 1650b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 165100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Don't queue while doing a reconfig:: output buffer, num pending = %ld", pComponentPrivate->nNumOutputBufPending); 1652b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1653686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato }else if (pComponentPrivate->curState == OMX_StatePause) { 1654b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader; 1655686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato } 1656686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato } 1657686af8b7f8582fe7b4982fae3c9bb134a3cf1dabMasaki Sato if (pComponentPrivate->bFlushOutputPortCommandPending) { 1658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_SendCommand( pComponentPrivate->pHandle, OMX_CommandFlush, 1, NULL); 1659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 166300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d : BufferHeader %p, Buffer %p Unknown ..........", 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pBufHeader, pBufHeader->pBuffer); 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 166800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d : Exiting from WMADECHandleDataBuf_FromApp ",__LINE__); 1669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 1670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1672b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 1673b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 1674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 1675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 1676b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * WMADECGetBufferDirection () This function is used by the component thread to 1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * request a buffer from the application. Since it was called from 2 places, 1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * it made sense to turn this into a small function. 1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pData pointer to WMA Decoder Context Structure 1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCur pointer to the buffer to be requested to be filled 1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval none 1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECGetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader, OMX_DIRTYPE *eDir) 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate; 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 nBuf; 1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBuf = NULL; 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int flag = 1, i; 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 170100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering WMADECGetBufferDirection Function",__LINE__); 170200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: pComponentPrivate = %p",__LINE__,pComponentPrivate); 1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Search this buffer in input buffers list */ 170400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: WMADECGetBufferDirection Function",__LINE__); 170500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: pComponentPrivate = %p",__LINE__,pComponentPrivate); 170600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: pComponentPrivate->pInputBufferList = %p", 1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pInputBufferList); 170800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: pComponentPrivate->pInputBufferList->numBuffers = %d", 1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pInputBufferList->numBuffers); 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuf = pComponentPrivate->pInputBufferList->numBuffers; 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nBuf; i++) 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i]; 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader == pBuf) 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *eDir = OMX_DirInput; 171800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Buffer %p is INPUT BUFFER",__LINE__, pBufHeader); 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin flag = 0; 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Search this buffer in input buffers list */ 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuf = pComponentPrivate->pOutputBufferList->numBuffers; 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nBuf; i++) 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBufHeader == pBuf) 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *eDir = OMX_DirOutput; 173300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Buffer %p is OUTPUT BUFFER",__LINE__, 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader); 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin flag = 0; 1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (flag == 1) 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 174200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Buffer %p is Not Found in the List",__LINE__, 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBufHeader); 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 174800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR1(pComponentPrivate->dbg, "%d :: Exiting WMADECGetBufferDirection Function",__LINE__); 1749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 1750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1751b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 1752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 1753b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 1754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 1755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 1756b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * WMADECHandleDataBuf_FromLCML () This function is used by the component thread to 1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * request a buffer from the application. Since it was called from 2 places, 1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * it made sense to turn this into a small function. 1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pData pointer to WMA Decoder Context Structure 1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCur pointer to the buffer to be requested to be filled 1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval none 1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECHandleDataBuf_FromLCML(WMADEC_COMPONENT_PRIVATE* pComponentPrivate, LCML_WMADEC_BUFHEADERTYPE* msgBuffer) 1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ret = 0; 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)pComponentPrivate->pHandle; 177800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering WMADECHandleDataBuf_FromLCML Function",__LINE__); 177900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: pComponentPrivate = %p",__LINE__, pComponentPrivate); 178000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering WMADECHandleDataBuf_FromLCML Function", __LINE__); 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ret == -1) 1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 178400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error While reading from the LCML Pipe",__LINE__); 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 178900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: Entering WMADECHandleDataBuf_FromLCML Function",__LINE__); 1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(pComponentPrivate->bIsStopping)) 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (msgBuffer->eDir == OMX_DirInput) 1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 179500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d: Component Sending Empty Input buffer%p to App",__LINE__,msgBuffer->buffer); 179600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "Sending Empty INPUT BUFFER to App = %p", msgBuffer->buffer->pBuffer); 1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(msgBuffer->buffer,pBuffer), 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, PERF_ModuleHLMM); 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->nFilledLen = 0; 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer); 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (msgBuffer->eDir == OMX_DirOutput) 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 181200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d: Component Sending Filled Output buffer%p to App size = %ld", 1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,msgBuffer->buffer,msgBuffer->buffer->nFilledLen); 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->pBuffer, 1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nFilledLen, 1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Copying tick count information to output buffer*/ 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->nTickCount = (OMX_U32)pComponentPrivate->arrBufIndexTick[pComponentPrivate->OpBufindex]; 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Copying time stamp information to output buffer */ 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrBufIndex[pComponentPrivate->OpBufindex]; 1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->OpBufindex++; 1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferCountActual; 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pHandle, 1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 183400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "nOutstandingFillDones = %ld\n", pComponentPrivate->nOutStandingFillDones); 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 183800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: Wrong Direction dir = %d", __LINE__,msgBuffer->eDir); 183900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d: Component Got buffer %p From LCML", __LINE__,msgBuffer->buffer); 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 184600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: Entering WMADECHandleDataBuf_FromLCML Function", 1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (msgBuffer->eDir == OMX_DirInput) 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 185000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d: Component Sending Empty Input buffer%p to App", 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,msgBuffer->buffer); 185200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "Sending Empty INPUT BUFFER to App = %p", 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->pBuffer); 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(msgBuffer->buffer,pBuffer), 1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, PERF_ModuleHLMM); 1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->nFilledLen = 0; 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone (pHandle, 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer); 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nEmptyBufferDoneCount++; 1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (msgBuffer->eDir == OMX_DirOutput) 1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 186800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d: Component Sending Filled Output buffer%p to App", 1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,msgBuffer->buffer); 187000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending Filled OUTPUT BUFFER to App = %p", 1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msgBuffer->buffer->pBuffer); 1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingBuffer(pComponentPrivate->pPERFcomp, 1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->pBuffer, 1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer->nFilledLen, 1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone (pHandle, 1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin msgBuffer->buffer); 1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutStandingFillDones--; 188300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "nOutstandingFillDones = %ld\n", pComponentPrivate->nOutStandingFillDones); 1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 188700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting WMADECHandleDataBuf_FromLCML Function", 1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__); 1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Callback() function will be called LCML component to write the msg 1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param msgBuffer This buffer will be returned by the LCML 1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/ 1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECLCML_Callback (TUsnCodecEvent event,void * args [10]) 1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U8 *pBuffer = args[1]; 1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pLcmlHdr; 1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate_CC = NULL; 1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef WMADEC_DEBUG 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *phandle; 1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLcmlHandle; 1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i=0; 1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int numCalls; 1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC = 1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (WMADEC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate; 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate_CC->pHandle; 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef WMADEC_DEBUG 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)args[6]; 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate_CC->pLcmlHandle; 1927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(event) 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspError: 193100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecDspError"); 1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInternalError: 193500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecInternalError"); 1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecInitError: 193900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecInitError"); 1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecDspMessageRecieved: 194300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecDspMessageRecieved"); 1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferProcessed: 194700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferProcessed"); 1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStarted: 195100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStarted"); 1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingPaused: 195500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingPaused"); 1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingStoped: 195900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingStoped"); 1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecProcessingEof: 196300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecProcessingEof"); 1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecBufferNotProcessed: 196700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecBufferNotProcessed"); 1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecAlgCtrlAck: 197100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecAlgCtrlAck"); 1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case EMMCodecStrmCtrlAck: 197500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] EMMCodecStrmCtrlAck"); 1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin default: 197900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "[LCML CALLBACK EVENT] Got event = %d",event); 1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 198200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate_CC->dbg, "%d :: Entering the WMADECLCML_Callback Function",__LINE__); 1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate_CC->dbg, "args = %p ",args[0]); 1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate_CC->dbg, "event = %d ",event); 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == EMMCodecBufferProcessed) { 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( (OMX_U32)args [0] == EMMCodecInputBuffer) { 198800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate_CC->dbg, "%d :: Input: pBuffer = %p",__LINE__, pBuffer); 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WMADECGetCorresponding_LCMLHeader(pComponentPrivate_CC, 1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, 1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirInput, 1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pLcmlHdr); 1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate_CC->pPERFcomp, 1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, PERF_ModuleCommonLayer); 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_ClearPending(pComponentPrivate_CC,pLcmlHdr->buffer, OMX_DirInput); 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 200200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate_CC->dbg, "%d :: Error: Invalid Buffer Came ...",__LINE__); 2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMXBufferStatus*)pLcmlHdr->buffer->pAppPrivate)->EmptyBufferDone = 1; 2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADECHandleDataBuf_FromLCML(pComponentPrivate_CC, pLcmlHdr); 2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((OMX_U32)args [0] == EMMCodecOuputBuffer) 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 201300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate_CC->dbg, "%d :: Output: pBuffer = %p",__LINE__, pBuffer); 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WMADEC_IsValid(pComponentPrivate_CC,pBuffer,OMX_DirOutput)) 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* If the buffer we get back from the DSP is not valid call FillBufferDone 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin on a valid buffer */ 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate_CC->pPERFcomp, 2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pOutputBufferList->pBufHdr[pComponentPrivate_CC->nInvalidFrameCount++]->pBuffer, 2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pOutputBufferList->pBufHdr[pComponentPrivate_CC->nInvalidFrameCount++]->nFilledLen, 2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_ModuleHLMM); 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->cbInfo.FillBufferDone (pComponentPrivate_CC->pHandle, 2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pOutputBufferList->pBufHdr[pComponentPrivate_CC->nInvalidFrameCount++] 2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->nOutStandingFillDones--; 2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WMADECGetCorresponding_LCMLHeader(pComponentPrivate_CC, 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirOutput, 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pLcmlHdr); 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_ClearPending(pComponentPrivate_CC,pLcmlHdr->buffer, OMX_DirOutput); 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 203900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate_CC->dbg, "%d :: Error: Invalid Buffer Came ...", 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2043b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2044b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2045b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(pComponentPrivate_CC->InputEosSet || pComponentPrivate_CC->pOutputBufferList->EosFlagSent) 2046b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2047b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2(pComponentPrivate_CC->dbg, " EOS Flag OR INPUT EOS "); 2048b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->InputEosSet = 0; 2049b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->pOutputBufferList->EosFlagSent = 0; 2050b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pLcmlHdr->buffer->nFlags |= OMX_BUFFERFLAG_EOS; 2051b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHdr->buffer->nFilledLen = (OMX_U32)args[8]; 2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 205500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate_CC->dbg, "pLcmlHdr->buffer->nFilledLen = %ld", pLcmlHdr->buffer->nFilledLen); 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate_CC->pPERFcomp, 2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,pBuffer), 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pLcmlHdr->buffer,nFilledLen), 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->lcml_nCntOpReceived++; 206400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "pComponentPrivate_CC->lcml_nCntOpReceived = %ld\n", pComponentPrivate_CC->lcml_nCntOpReceived); 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate_CC->nLcml_nCntIp >= 1) && 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate_CC->nLcml_nCntOpReceived == 1)) 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate_CC->pPERFcomp, 2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMXBufferStatus*)pLcmlHdr->buffer->pAppPrivate)->FillBufferDone = 1; 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 207700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate_CC->dbg, " OUTPUT RETURNING pBuffer->nFilledLen =%ld",pLcmlHdr->buffer->nFilledLen); 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADECHandleDataBuf_FromLCML(pComponentPrivate_CC, pLcmlHdr); 2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event == EMMCodecStrmCtrlAck) 2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 208400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate_CC->dbg, "%d :: GOT MESSAGE USN_DSPACK_STRMCTRL ----",__LINE__); 2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[1] == (void *)USN_STRMCMD_FLUSH) 2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle = pComponentPrivate_CC->pHandle; 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( args[2] == (void *)EMMCodecInputBuffer) 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate_CC->nNumInputBufPending; i++) { 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate_CC->pPERFcomp, 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pComponentPrivate_CC->pInputBufHdrPending[i],pBuffer), 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->pInputBufHdrPending[i]->nFilledLen = 0; 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EmptyBufferDone (pComponentPrivate_CC->pHandle, 2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pInputBufHdrPending[i]); 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nEmptyBufferDoneCount++; 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->pInputBufHdrPending[i] = NULL; 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nNumInputBufPending=0; 2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate_CC->codecFlush_mutex); 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->codecFlush_waitingsignal == 0){ 2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->codecFlush_waitingsignal = 1; 2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate_CC->codecFlush_threshold); 211400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate_CC->dbg, "flush ack. received. for input port"); 2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate_CC->codecFlush_mutex); 2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // mutex above signals that the dsp side has finished flushing and processing can continue 2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pHandle, 2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin INPUT_PORT, 2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( args[2] == (void *)EMMCodecOuputBuffer) 2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (args[0] == (void *)USN_ERR_NONE ) 2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i < pComponentPrivate_CC->nNumOutputBufPending; i++) { 2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate_CC->pPERFcomp, 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pComponentPrivate_CC->pOutputBufHdrPending[i],pBuffer), 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pComponentPrivate_CC->pOutputBufHdrPending[i],nFilledLen), 2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 2140b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.FillBufferDone (pComponentPrivate_CC->pHandle, 2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pOutputBufHdrPending[i] 2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ); 2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nOutStandingFillDones--; 2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->pOutputBufHdrPending[i] = NULL; 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->nNumOutputBufPending=0; 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate_CC->codecFlush_mutex); 2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->codecFlush_waitingsignal == 0){ 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->codecFlush_waitingsignal = 1; 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate_CC->codecFlush_threshold); 215400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate_CC->dbg, "flush ack. received. for output port"); 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate_CC->codecFlush_mutex); 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate_CC->pHandle, 2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandFlush, 2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OUTPUT_PORT, 2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(event == EMMCodecProcessingStoped) 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2175b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 217631fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato for (i = 0; i < pComponentPrivate_CC->nNumInputBufPending; i++) { 217731fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->cbInfo.EmptyBufferDone (pComponentPrivate_CC->pHandle, 217831fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pHandle->pApplicationPrivate, 217931fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pInputBufHdrPending[i]); 218031fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pInputBufHdrPending[i] = NULL; 218131fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato } 218231fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->nNumInputBufPending = 0; 218331fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato for (i=0; i < pComponentPrivate_CC->nNumOutputBufPending; i++) { 218431fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->cbInfo.FillBufferDone (pComponentPrivate_CC->pHandle, 218531fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pHandle->pApplicationPrivate, 218631fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pOutputBufHdrPending[i]); 218731fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->nOutStandingFillDones--; 218831fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->pOutputBufHdrPending[i] = NULL; 218931fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato } 219031fe63f0022f74595e2acf6a0114f82c97554ae1Masaki Sato pComponentPrivate_CC->nNumOutputBufPending=0; 2191b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_lock(&pComponentPrivate_CC->codecStop_mutex); 2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate_CC->codecStop_waitingsignal == 0){ 2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->codecStop_waitingsignal = 1; 2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate_CC->codecStop_threshold); 219500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate_CC->dbg, "stop ack. received. stop waiting for sending disable command completed"); 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2197b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&pComponentPrivate_CC->codecStop_mutex); 2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate_CC->bNoIdleOnStop) 2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StateIdle; 2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, 2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WMA_Decoder_COMPONENT, 2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 1234, NULL); 2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate_CC->bPreempted == 0) { 2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate_CC->pHandle, 2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->pHandle->pApplicationPrivate, 2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState, 2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->bDspStoppedWhileExecuting = OMX_TRUE; 2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->bNoIdleOnStop= OMX_FALSE; 2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event == EMMCodecProcessingPaused) 2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StatePause; 2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate, 2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate_CC->curState, 2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event == EMMCodecDspError) 2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2237b65f253fdc60f6208a54911bee793d225f23cdf8James Dong switch ( (OMX_U32) args [4]) 2238eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong { 2239b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* USN_ERR_NONE,: Indicates that no error encountered during execution of the command and the command execution completed succesfully. 2240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_WARNING,: Indicates that process function returned a warning. The exact warning is returned in Arg2 of this message. 2241b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_PROCESS,: Indicates that process function returned a error type. The exact error type is returnd in Arg2 of this message. 2242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_PAUSE,: Indicates that execution of pause resulted in error. 2243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_STOP,: Indicates that execution of stop resulted in error. 2244b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_ALGCTRL,: Indicates that execution of alg control resulted in error. 2245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_STRMCTRL,: Indiactes the execution of STRM control command, resulted in error. 2246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * USN_ERR_UNKNOWN_MSG,: Indicates that USN received an unknown command. */ 224736733d62c0d4c565da10b34978e587d0fda0f1adJames Dong 2248b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__ 2249b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_PAUSE: 2250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_STOP: 2251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_ALGCTRL: 2252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_STRMCTRL: 2253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_UNKNOWN_MSG: 2254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2255b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2256b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->bIsInvalidState=OMX_TRUE; 2257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->curState = OMX_StateInvalid; 2258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle = pComponentPrivate_CC->pHandle; 2259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate_CC->cbInfo.EventHandler(pHandle, 2260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 2261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 2262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ErrorInvalidState, 2263b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 2264b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 2265eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong } 2266b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2269b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_WARNING: 2270b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case USN_ERR_PROCESS: 2271b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WMADEC_HandleUSNError (pComponentPrivate_CC, (OMX_U32)args[5]); 2272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 2274b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(event == EMMCodecDspMessageRecieved) { 227900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate_CC->dbg, "%d :: commandedState = %p",__LINE__,args[0]); 228000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate_CC->dbg, "%d :: arg1 = %p",__LINE__,args[1]); 228100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate_CC->dbg, "%d :: arg2 = %p",__LINE__,args[2]); 2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__ 2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event ==EMMCodecInitError) { 2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Cheking for MMU_fault */ 2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((args[4] == (void *)USN_ERR_UNKNOWN_MSG) && (args[5] == NULL)) { 2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->bIsInvalidState=OMX_TRUE; 2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StateInvalid; 2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate_CC->pHandle; 2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pHandle, 2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (event ==EMMCodecInternalError) { 2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Cheking for MMU_fault */ 2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((args[4] == (void *)USN_ERR_UNKNOWN_MSG) && (args[5] == NULL)) { 2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->bIsInvalidState=OMX_TRUE; 2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->curState = OMX_StateInvalid; 2308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate_CC->pHandle; 2309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC->cbInfo.EventHandler(pHandle, 2310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorInvalidState, 2313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 232100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate_CC->dbg, "%d :: Exiting the WMADECLCML_Callback Function",__LINE__); 2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * WMADEC_GetCorresponding_LCMLHeader() function will be called by WMADEC_LCML_Callback 2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * component to write the msg 2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer, Event which gives to details about USN status 2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param LCML_NBAMRENC_BUFHEADERTYPE **ppLcmlHdr 2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_Error_BadParameter The input parameter pointer is null 2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECGetCorresponding_LCMLHeader(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, 2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *pBuffer, 2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir, 2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE **ppLcmlHdr) 2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pLcmlBufHeader; 2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate_CC; 2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nIpBuf; 2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nOpBuf; 2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC = pComponentPrivate; 2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate_CC->pInputBufferList->numBuffers; 2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate_CC->pOutputBufferList->numBuffers; 2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (!pComponentPrivate_CC->bInitParamsInitialized) 2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Sleep(0); 2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 236200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Inside WMADECGetCorresponding_LCMLHeader..",__LINE__); 236300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: eDir = %d",__LINE__,eDir); 2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eDir == OMX_DirInput) { 2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 236700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: pComponentPrivate_CC = %p",__LINE__, 2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate_CC); 236900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: pComponentPrivate_CC->pLcmlBufHeader[INPUT_PORT] = %p", 2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate_CC->pLcmlBufHeader[INPUT_PORT]); 2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[INPUT_PORT]; 237300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: nIpBuf = %d",__LINE__,nIpBuf); 2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nIpBuf; i++) 2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 237600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffer = %p",pBuffer); 237700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pLcmlBufHeader->buffer->pBuffer = %p", 2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader->buffer->pBuffer); 2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) 2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 238200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d::Corresponding LCML Header Found",__LINE__); 2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader++; 2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (eDir == OMX_DirOutput) 2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[OUTPUT_PORT]; 239200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffer = %p",pBuffer); 239300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pLcmlBufHeader->buffer- = %p",pLcmlBufHeader->buffer); 239400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pLcmlBufHeader->buffer->pBuffer = %p", 2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pLcmlBufHeader->buffer->pBuffer); 239600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: nOpBuf = %d",__LINE__,nOpBuf); 2397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(i=0; i<nOpBuf; i++) 2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pBuffer == pLcmlBufHeader->buffer->pBuffer) 2401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 240200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffer = %p",pBuffer); 240300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "pLcmlBufHeader->buffer->pBuffer = %p", 2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader->buffer->pBuffer); 2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *ppLcmlHdr = pLcmlBufHeader; 240600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d::Corresponding LCML Header Found",__LINE__); 2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlBufHeader++; 2410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 241400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d:: Invalid Buffer Type :: exiting...",__LINE__); 2415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/ 2423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * WMADEC_GetLCMLHandle() 2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_HANDLETYPE 2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -------------------------------------------------------------------*/ 2429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE WMADECGetLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *handle; 2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE); 2436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 2437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *error; 2438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError; 2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!handle) 2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(dlerror(), stderr); 2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle = dlsym (handle, "GetHandle"); 2448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((error = dlerror()) != NULL) 2449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(error, stderr); 2451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = (*fpGetHandle)(&pHandle); 2455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 2456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 245800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "eError != OMX_ErrorNone..."); 2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = NULL; 2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 2464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 2468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=================================================================*/ 2471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*WINDOWS Explicit dll load procedure 2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ===================================================================*/ 2473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_HANDLETYPE WMADECGetLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 2477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pHandle = NULL; 2478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError; 2479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HINSTANCE hDLL; // Handle to DLL 2480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 2481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0); 2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDLL == NULL) 2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 248400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "BML Load Failed!!!"); 2485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 2486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle")); 2489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!fpGetHandle1) 2490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin // handle the error 2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FreeLibrary(hDLL); 2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin return pHandle; 2494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin // call the function 2497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = fpGetHandle1(&pHandle); 2498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) { 2499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 250000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "eError != OMX_ErrorNone..."); 2501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = NULL; 2502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 2503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate; 2506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pHandle; 2508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=================================================================*/ 2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**@FreeLCMLHandle */ 2517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*==================================================================*/ 2518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECFreeLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int retValue; 2522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bLcmlHandleOpened) 2525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retValue = dlclose(pComponentPrivate->pLcmlHandle); 2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (retValue != 0) 2529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 2531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLcmlHandleOpened = 0; 2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*=================================================================*/ 2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** @ FreeLCMLHandle */ 2540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*==================================================================*/ 2541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECFreeLCMLHandle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int retValue; 2545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->bLcmlHandleOpened) 2548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin retValue = FreeLibrary(pComponentPrivate->pLcmlHandle); 2551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (retValue == 0) /* Zero Indicates failure */ 2552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 2554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLcmlHandleOpened = 0; 2556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_CommandToIdle() description for WMADEC_CommandToIdle 2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CommandToIdle(). 2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Idle 2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 2568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 2570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 2572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CommandToIdle(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE rm_error = OMX_ErrorNone; 2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 arr[50]; 2585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int inputPortFlag = 0; 2586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int outputPortFlag = 0; 2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "hello"; 2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 2590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *pLcmlDsp; 2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 259300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Idle ",__LINE__); 259400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "curstate = %d",pComponentPrivate->curState); 2595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateIdle) 2596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 2598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorSameState, 2599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, NULL); 260000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application",__LINE__); 2601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded) 2603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundarySetup); 2606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->dasfmode == 1) 2608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled= FALSE; 2610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated= FALSE; 2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->streamID == 0) 2613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 261400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "**************************************"); 261500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, ":: Error = OMX_ErrorInsufficientResources"); 261600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "**************************************"); 2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateInvalid; 2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 2624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorSevere, 2625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) 2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 263100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: In while loop OMX_StateLoaded [INPUT_PORT]->bPopulated %d ", 2632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated); 263300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: In while loop OMX_StateLoaded [INPUT_PORT]->bEnabled %d ", 2634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled); 263500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: In while loop OMX_StateLoaded [OUTPUT_PORT]->bPopulated %d ", 2636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated); 263700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: In while loop OMX_StateLoaded [OUTPUT_PORT]->bEnabled %d ", 2638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled); 2639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated && 2641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled) 2642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inputPortFlag = 1; 2644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated && 2647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled) 2648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inputPortFlag = 1; 2650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated && 2653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled) 2654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin outputPortFlag = 1; 2656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated && 2659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled) 2660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin outputPortFlag = 1; 2662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (inputPortFlag && outputPortFlag) 2665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* From Loaded to Idle. All enable ports are populated. */ 2669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InLoaded_readytoidle = 1; 2670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex); 2672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InLoaded_threshold, 2673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pComponentPrivate->InLoaded_mutex); 2674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*---------------------*/ 2675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex); 2676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event)); 2678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 268100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Inside WMADECHandleCommand",__LINE__); 2682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) WMADECLCML_Callback; 2683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (OMX_HANDLETYPE) WMADECGetLCMLHandle(pComponentPrivate); 268400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Inside WMADECHandleCommand",__LINE__); 2685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pLcmlHandle == NULL) 2686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 268700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: LCML Handle is NULL........exiting..",__LINE__); 2688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Got handle of dsp via phandle filling information about DSP specific things */ 2692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 2693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = WMADECFill_LCMLInitParams(pHandle, pLcmlDsp, arr); 2694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 2695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 269600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from WMADECFill_LCMLInitParams()", 2697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 2698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 270100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 2702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle; 2703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*filling create phase params */ 2705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) WMADECLCML_Callback; 270600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: Calling LCML_InitMMCodec...",__LINE__); 2707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 2709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TeeDN will be default for decoder component */ 271000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "WMA decoder support TeeDN"); 271100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "pComponentPrivate Before calling InitMMCodec = %p", 2712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate); 2713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 271400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "&pComponentPrivate = %p",&pComponentPrivate); 271500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "pLcmlHandle = %p",pLcmlHandle); 271600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "p = %p",p); 271700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "pLcmlHandle->pCodecinterfacehandle = %p", 2718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle); 2719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 2721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb,(OMX_STRING)pComponentPrivate->sDeviceString); 272200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "pComponentPrivate After calling InitMMCodec = %p", 2723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate); 2724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 2726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 272700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error returned from LCML_Init() error = %d",__LINE__, eError); 2728b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* send an event to client */ 2729b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* client should unload the component if the codec is not able to load */ 2730b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler (pHandle, 2731b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 2732b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 2733b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 2734b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 2735b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 2736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 2739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle, 2740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin p,&pLcmlHandle,(void *)p,&cb); 2741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 2742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 274300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error : InitMMCodec failed...>>>>>> ",__LINE__); 2744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef HASHINGENABLE 2750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Enable the Hashing Code */ 2751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, OMX_TRUE); 2752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (eError != OMX_ErrorNone) { 275300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "Failed to set Mapping State"); 2754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 2755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 275900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: WMADEC: About to call RMProxy_SendCommand", __LINE__); 2760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->rmproxyCallback.RMPROXY_Callback = 2761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void *) WMAD_ResourceManagerCallback; 2762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateWaitForResources){ 2764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, 2765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WMA_Decoder_COMPONENT, 2766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMA_CPU, 1234, NULL); 2767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 276800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: WMADEC: RMProxy_SendCommand returned %d", 2769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin __LINE__,rm_error); 2770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(rm_error == OMX_ErrorNone) 2771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 2772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* resource is available */ 2773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 2774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 2775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 2779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | 2782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundarySetup); 2783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, 2785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WMA_Decoder_COMPONENT, 2786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle,0,NULL); 2787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(rm_error == OMX_ErrorInsufficientResources){ 2790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* resource is not available, need set state to OMX_StateWaitForResources */ 2791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 2792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 2797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 279800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: WMADEC: Error - insufficient resources", __LINE__); 2799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 280100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "Setting to OMX_StateIdle - Line %d",__LINE__); 2802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 2803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, 2804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventCmdComplete, 2806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_CommandStateSet, 2807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->curState, 2808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 281100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d :: WMADEC: State has been Set to Idle",__LINE__); 2812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | 2815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundarySetup); 2816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateExecuting) 2820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 2822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef HASHINGENABLE 2823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Hashing Change*/ 2824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 2825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 2826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 282700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "Error occurred in Codec mapping flush!"); 2828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Set the bIsStopping bit */ 2831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | 2833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundarySteadyState); 2834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 283600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2(pComponentPrivate->dbg, "%d :: WMADEC: About to set bIsStopping bit", __LINE__); 2837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 2838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 2839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec( 2841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 2842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop,(void *)pArgs); 2843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 2844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 2845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; // reset the wait condition for next time 2846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 2847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 2849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 285000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Stop..", __LINE__); 2851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 285400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d: Codec has been stopped", __LINE__); 2855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(pComponentPrivate->curState == OMX_StatePause) 2858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 286000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: Comp: Stop Command Received",__LINE__); 2861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE 2862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Hashing Change*/ 2863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle; 2864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 2865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 286600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "Error occurred in Codec mapping flush!"); 2867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | 2872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundarySteadyState); 2873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 2876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->codecStop_mutex); 2877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 2879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin MMCodecControlStop, 2880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (void *)pArgs); 2881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->codecStop_waitingsignal == 0){ 2882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->codecStop_threshold, &pComponentPrivate->codecStop_mutex); 2883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->codecStop_waitingsignal = 0; 2884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->codecStop_mutex); 2885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateIdle; 2887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, 2890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WMA_Decoder_COMPONENT, 2891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateIdle, 1234, NULL); 2892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(rm_error != OMX_ErrorNone) 2893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ERROR4(pComponentPrivate->dbg, "%d :: ERROR: Send Comman Failed", __LINE__); 2895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 289900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d :: The component is stopped",__LINE__); 2900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 2901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete,OMX_CommandStateSet, 2903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 2904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* This means, it is invalid state from application */ 290900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 2910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 2911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 2912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 2914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 2915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 2916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 2919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 2920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2921b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 2922b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 2923b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 2924b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 2925b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 2926b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 2930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_CommandToLoaded() description for WMADEC_CommandToLoaded 2932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CommandToLoaded(). 2933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Loaded 2934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 2935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 2937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 2939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 2940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 2941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 2942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 2943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CommandToLoaded(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 2944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = 2947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 2948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 2949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "hello"; 295100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Loaded - curState = %d", 2952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate->curState); 2953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateLoaded) 2954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 2956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 2959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 296100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application",__LINE__); 2962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 296400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d: pComponentPrivate->pInputBufferList->numBuffers = %d", 2965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate->pInputBufferList->numBuffers); 296600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "%d: pComponentPrivate->pOutputBufferList->numBuffers = %d", 2967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate->pOutputBufferList->numBuffers); 2968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources) 2970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 297100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Loaded",__LINE__); 2972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup); 2975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateLoaded; 2977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup); 2980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 2982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 2986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 298900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, "%d :: In side OMX_StateLoaded State: ",__LINE__); 2990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateIdle && 2991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState != OMX_StateWaitForResources) 2992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 299300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 2994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 2995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 2996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 2998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 2999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 300000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Invalid State Given by Application",__LINE__); 3001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | PERF_BoundaryCleanup); 3005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 300600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d", 3007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers); 300800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->numBuffers = %d", 3009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers); 3010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) 3011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 301200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "HandleCommand - in while(1) loop"); 3013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate->pInputBufferList->numBuffers && 3014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin !pComponentPrivate->pOutputBufferList->numBuffers) 3015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->InIdle_goingtoloaded = 1; 3019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 3020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->InIdle_mutex); 3021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->InIdle_threshold, 3022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &pComponentPrivate->InIdle_mutex); 3023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex); 3024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 3025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_WaitForEvent(&(pComponentPrivate->InIdle_event)); 3026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Now Deinitialize the component No error should be returned from 3031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * this function. It should clean the system as much as possible */ 303200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE1(pComponentPrivate->dbg, "%d :: In side OMX_StateLoaded State: ",__LINE__); 3033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlDestroy, (void *)p); 303500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE1(pComponentPrivate->dbg, "%d :: In side OMX_StateLoaded State: ",__LINE__); 3036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 3037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 303800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d : Error: in Destroying the codec: no. %x",__LINE__, eError); 3039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 304100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Loaded",__LINE__); 3042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pComponentPrivate->pPERF, -1, 0, PERF_ModuleComponent); 3044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = EXIT_COMPONENT_THRD; 3046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 0; 3047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send StateChangeNotification to application */ 3048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bLoadedCommandPending = OMX_FALSE; 3049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 3052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone && eError != EXIT_COMPONENT_THRD ) { 3053b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3054b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 3055b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 3056b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 3057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 3058b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3059b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_CommandToExecuting() description for WMADEC_CommandToExecuting 3066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CommandToExecuting(). 3067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Executing 3068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CommandToExecuting(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 3078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 3081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 3082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "hello"; 3085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pLcmlHdr = NULL; 3087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 cmdValues[3]; 3088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *pArgs = "damedesuStr"; 3089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 3091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int rm_error; 3092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 309300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Executing ",__LINE__); 3094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateExecuting) 3095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 3097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 3098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 310200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application",__LINE__); 3103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateIdle) 3106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 310700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Sending commands to DSP via LCML_ControlCodec third argument 3109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin is not used for time being */ 3110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 3112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 3113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->dasfmode == 1) 3114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 pValues[4]; 311600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: ---- Comp: DASF Functionality is ON ---",__LINE__); 3117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pHeaderInfo->iChannel == 1) 3118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat = WMA_MONO_CHANNEL; 3120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat = WMA_STEREO_NON_INTERLEAVED; 3124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 312500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iAudioFormat = %d", pComponentPrivate->pParams->iAudioFormat); 3126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iStrmId = pComponentPrivate->streamID; 3127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iSamplingRate = 3128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHeaderInfo->iSamplePerSec; 3129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 313000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iSamplingRate = %ld", 3131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iSamplingRate); 313200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iStrmId = %ld", 3133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iStrmId); 313400f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "pParams->iAudioFormat = %d", 3135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pParams->iAudioFormat); 3136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[0] = USN_STRMCMD_SETCODECPARAMS; 3138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[1] = (OMX_U32)pComponentPrivate->pParams; 3139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[2] = sizeof(WMADEC_AudioCodecParams); 3140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pValues[3] = OUTPUT_PORT; 3141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStrmCtrl,(void *)pValues); 3143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 3144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 314500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec StreamControl..", 3146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__); 3147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pComponentPrivate->dasfmode ) 3151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 315200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP2(pComponentPrivate->dbg, "Setting WMA_IAUDIO_BLOCK"); 3153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->iOutputFormat = WMA_IAUDIO_BLOCK; /* EAUDIO_BLOCKED */ 3154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 315700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "Setting WMA_IAUDIO_INTERLEAVED"); 3158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->iOutputFormat = WMA_IAUDIO_INTERLEAVED; /* EAUDIO_INTERLEAVED */ 3159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDynParams->size = sizeof( WMADEC_UALGParams ); 3161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[0] = WMA_IUALG_CMD_SETSTATUS; 3163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[1] = (OMX_U32)( pComponentPrivate->pDynParams ); 3164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cmdValues[2] = sizeof( WMADEC_UALGParams ); 3165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin p = (void *)&cmdValues; 3167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlAlgCtrl, (void *)p); 3169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 3171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 317200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec algctrl..", __LINE__); 3173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bBypassDSP = 0; 3176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)(pComponentPrivate->pLcmlHandle))->pCodecinterfacehandle, 3178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)pArgs); 3179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone) 3181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 318200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d: Error Occurred in Codec Start..", __LINE__); 3183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 318500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE2(pComponentPrivate->dbg, ": Codec Has Been Started "); 3186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->SendAfterEOS = 1; /*Enrique Zertuche, added because it wasnt set compared with the mp3*/ 3188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StatePause) 3190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 319100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlStart, (void *)pArgs); 3194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 3195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 319600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "Error While Resuming the codec"); 3197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nNumInputBufPending < 3200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->numBuffers) 3201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = pComponentPrivate->pInputBufferList->numBuffers; 3203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) 3206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pInputBufHdrPending[i]) 3208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WMADEC_IsPending(pComponentPrivate, 3210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i], 3211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirInput) ) 3212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADECGetCorresponding_LCMLHeader( 3214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate, 3215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 3216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirInput, &pLcmlHdr); 3217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_SetPending(pComponentPrivate, 3219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i], 3220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirInput); 3221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecInputBuffer, 3224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->pBuffer, 3225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nAllocLen, 3226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pInputBufHdrPending[i]->nFilledLen, 3227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_U8 *) pLcmlHdr->pIpParam, 3228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(WMADEC_UAlgInBufParamStruct), 3229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 3230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumInputBufPending = 0; 3234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nNumOutputBufPending < 3235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers) 3236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 3238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->numBuffers; 3239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) 3241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pOutputBufHdrPending[i]) 3243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!WMADEC_IsPending(pComponentPrivate, 3245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i], 3246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirOutput) ) 3247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADECGetCorresponding_LCMLHeader( 3249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate, 3250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 3251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_DirOutput, &pLcmlHdr); 3252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_SetPending(pComponentPrivate, 3254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i], 3255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DirOutput); 3256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->LastOutputBufferHdrQueued = 3258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]; 3259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecOuputBuffer, 3262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, 3263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen, 3264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen, 3265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL, 3266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sizeof(WMADEC_UAlgInBufParamStruct), 3267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin NULL); 3268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nNumOutputBufPending = 0; 3272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 327500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 3277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 3278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 328200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Invalid State Given by Application",__LINE__); 3283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 3286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin rm_error = RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, 3287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_WMA_Decoder_COMPONENT, 3288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_StateExecuting, 1234, NULL); 3289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateExecuting; 3293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryStart | 3295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundarySteadyState); 3296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 3297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Send state change notificaiton to Application */ 329800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "About to call EventHandler"); 3299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler( pHandle, pHandle->pApplicationPrivate, 3300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, OMX_CommandStateSet, 3301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, NULL); 3302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 3303b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 3304b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3305b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 3306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 3307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 3308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 3309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_CommandToPause() description for WMADEC_CommandToPause 3317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CommandToPause(). 3318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Paused 3319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CommandToPause(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 3329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = 3332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 3333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle; 3334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *p = "hello"; 3338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 333900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d: WMADECHandleCommand: Cmd Pause",__LINE__); 3340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StatePause) 3341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate, 3343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorSameState, 3344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, NULL); 3345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 334600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application",__LINE__); 3347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState != OMX_StateExecuting && 3350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState != OMX_StateIdle) 3351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 335200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 3355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 3356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMajor, 3359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 336100f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Invalid State Given by Application",__LINE__); 3362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 3365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundarySteadyState); 3366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 336700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRSTATE1(pComponentPrivate->dbg, "About to command to pause"); 3368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 3369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EMMCodecControlPause, (void *)p); 3370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 3372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 337300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d : Error: in Pausing the codec",__LINE__); 3374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 3375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3377b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 3378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* notify RM that codec is paused, resources can be redistributed if needed */ 3379b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = RMProxy_NewSendCommand(pHandle, 3380b65f253fdc60f6208a54911bee793d225f23cdf8James Dong RMProxy_StateSet, 3381b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_WMA_Decoder_COMPONENT, 3382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_StatePause, 3383b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1234, 3384b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3385b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 3386eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong 3387b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c\n",__LINE__); 3388b65f253fdc60f6208a54911bee793d225f23cdf8James Dong EXIT: 3389b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone ) { 3390b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 3391b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 3392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 3393b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError, 3394b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 3395b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3396b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_CommandToWaitForResources() description for WMADEC_CommandToWaitForResources 3402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_CommandToWaitForResources(). 3403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded 3404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin to WaitForResources 3405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADEC_CommandToWaitForResources(WMADEC_COMPONENT_PRIVATE *pComponentPrivate) 3415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 3418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->curState == OMX_StateWaitForResources) 3422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 342300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pHandle, 3426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 3427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 3428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorSameState, 3429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorMinor, 3430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 343200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR2(pComponentPrivate->dbg, "%d :: Error: Same State Given by Application",__LINE__); 3433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->curState == OMX_StateLoaded) 3435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 343600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState = OMX_StateWaitForResources; 3438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 3440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 3441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 3442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 3443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->curState, 3444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 3445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 344800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 3451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pHandle->pApplicationPrivate, 3452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 3453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorIncorrectStateTransition, 3454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorMinor, 3455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "NULL"); 3456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_SetPending() description for WMADEC_SetPending 3464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_SetPending(). 3465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called when a buffer is queued to the LCML 3466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid WMADEC_SetPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, 3476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, 3477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir) 3478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) 3483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) 3485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) 3487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 1; 3489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************INPUT BUFFER %d IS PENDING \ 349000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong ******************************",i); 3491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) 3497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) 3499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1; 3501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "*******************OUTPUT BUFFER %d IS PENDING \ 350200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong ******************************",i); 3503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_ClearPending() description for WMADEC_ClearPending 3510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_ClearPending(). 3511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called when a buffer is returned from the LCML 3512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid WMADEC_ClearPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, 3523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, 3524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir) 3525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) 3530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) 3532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) 3534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pInputBufferList->bBufferPending[i] = 0; 3536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "*******************INPUT BUFFER %d IS RECLAIMED\ 353700f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong ******************************",i); 3538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) 3544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) 3546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0; 354800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "*******************OUTPUT BUFFER %d IS RECLAIMED******************************",i); 3549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_IsPending() description for WMADEC_IsPending 3557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_IsPending(). 3558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method returns the pending status to the buffer 3559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WMADEC_IsPending(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, 3569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pBufHdr, 3570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir) 3571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) 3576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) 3578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) 3580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pComponentPrivate->pInputBufferList->bBufferPending[i]; 3582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) 3588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) 3590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return pComponentPrivate->pOutputBufferList->bBufferPending[i]; 3592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return -1; 3596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_IsValid() description for WMADEC_Fill_LCMLInitParamsEx 3601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_IsValid(). 3602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method checks to see if a buffer returned from the LCML is valid. 3603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WMADEC_IsValid(WMADEC_COMPONENT_PRIVATE *pComponentPrivate, 3613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *pBuffer, 3614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_DIRTYPE eDir) 3615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int found=0; 3618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eDir == OMX_DirInput) 3620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) 3622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) 3624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin found = 1; 3626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 3630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) 3632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) 3634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin found = 1; 3636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return found; 3640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */ 3644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 3645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn WMADEC_Fill_LCMLInitParamsEx() description for WMADEC_Fill_LCMLInitParamsEx 3646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_Fill_LCMLInitParamsEx(). 3647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method fills the LCML init parameters. 3648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent handle for this instance of the component 3649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre 3651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post 3653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * 3654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE 3655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */ 3656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */ 3657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE WMADECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent,OMX_U32 indexport) 3659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 3661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nIpBuf,nIpBufSize,nOpBuf,nOpBufSize; 3662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 i; 3663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE *pTemp; 3664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int size_lcml; 3665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_WMADEC_BUFHEADERTYPE *pTemp_lcml = NULL; 3666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pHandle = (LCML_DSP_INTERFACE *)pComponent; 3667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin WMADEC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate; 3668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 366900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entered WMADECFill_LCMLInitParams",__LINE__); 367000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "%d :: WMADECFill_LCMLInitParams - pComponentPrivate = %p", 3671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pComponentPrivate); 367200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "%d :: WMADECFill_LCMLInitParams - pHandle = %p", 3673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin __LINE__,pHandle); 3674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBuf = pComponentPrivate->pInputBufferList->numBuffers; 3676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nIpBufSize = INPUT_WMADEC_BUFFER_SIZE; 3677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers; 3679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOpBufSize = pComponentPrivate->pPortDef[OUTPUT_BUFFER]->nBufferSize; 3680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 368200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "nIpBuf = %ld",nIpBuf); 368300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "nOpBuf = %ld",nOpBuf); 3684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(indexport == 0 || indexport == -1){ 368500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1(pComponentPrivate->dbg, "%d :: Comp: OMX_WmaDecUtils.c",__LINE__); 3686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nIpBuf * sizeof(LCML_WMADEC_BUFHEADERTYPE); 3687b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_WMADEC_BUFHEADERTYPE); 368800f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,pTemp_lcml); 368900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRDSP1(pComponentPrivate->dbg, "Line %d::pTemp_lcml = %p",__LINE__,pTemp_lcml); 3690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) 3692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 369300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Memory Allocation Failed",__LINE__); 3694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 3695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 3696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[INPUT_PORT] = pTemp_lcml; 3699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 370000f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER1(pComponentPrivate->dbg, "nIpBuf = %ld",nIpBuf); 3701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nIpBuf; i++) 3703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 3704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i]; 3705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 3706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nIpBufSize; 3707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nIpBufSize; 3708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER; 3709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WMADEC_MINOR_VER; 3710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 3711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 3712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 3713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirInput; 3714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 3715b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE_DSPALIGN(pTemp_lcml->pIpParam, 3716b65f253fdc60f6208a54911bee793d225f23cdf8James Dong sizeof(WMADEC_UAlgInBufParamStruct), 3717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin WMADEC_UAlgInBufParamStruct); 3718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pTemp_lcml->pIpParam == NULL) 3720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 3721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Free previously allocated memory before bailing */ 3722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pTemp_lcml != NULL) { 3723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MEMFREE_STRUCT(pTemp_lcml); 3724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 372600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error: Malloc Failed...Exiting..",__LINE__); 3727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 3728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->pIpParam->bLastBuffer = 0; 3730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 3732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 3733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 3734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 3735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(indexport == 1 || indexport == -1){ 3738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Allocate memory for all output buffer headers.. 3739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This memory pointer will be sent to LCML */ 3740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin size_lcml = nOpBuf * sizeof(LCML_WMADEC_BUFHEADERTYPE); 3741b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_MALLOC_SIZE(pTemp_lcml, size_lcml, LCML_WMADEC_BUFHEADERTYPE); 374200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p",__LINE__,pTemp_lcml); 3743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pTemp_lcml == NULL) 3745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 374600f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_ERROR4(pComponentPrivate->dbg, "%d :: Memory Allocation Failed",__LINE__); 3747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 3748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin goto EXIT; 3749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pLcmlBufHeader[OUTPUT_PORT] = pTemp_lcml; 3752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 3753b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufferList->EosFlagSent = 0; 3754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->InputEosSet = 0; 3755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin for (i=0; i<nOpBuf; i++) 3757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 3758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i]; 3759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE); 3760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nAllocLen = nOpBufSize; 3761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFilledLen = nOpBufSize; 3762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER; 3763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nVersion.s.nVersionMinor = WMADEC_MINOR_VER; 3764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nVersion = pTemp->nVersion.nVersion; 3765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->pPlatformPrivate = pHandle->pComponentPrivate; 3766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nTickCount = NOT_USED; 3767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* This means, it is not a last buffer. This flag is to be modified by 3768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application to indicate the last buffer */ 3769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 3770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->buffer = pTemp; 3771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml->eDir = OMX_DirOutput; 3772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp->nFlags = NORMAL_BUFFER; 3773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp++; 3774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTemp_lcml++; 3775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPortDefsAllocated = 1; 3778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting WMADECFill_LCMLInitParams",__LINE__); 3780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bInitParamsInitialized = 1; 3782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT: 3783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 3785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =========================================================================*/ 3786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func GetBits */ 3787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 3788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc Gets aBits number of bits from position aPosition of one buffer */ 3789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* and returns the value in a TUint value. */ 3790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* =========================================================================*/ 3791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 WMADEC_GetBits(OMX_U32* nPosition, OMX_U8 nBits, OMX_U8* pBuffer, OMX_BOOL bIcreasePosition) 3792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Entering WMADEC_GetBits",__LINE__); 3794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nOutput; 3795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nNumBitsRead = 0; 3796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nBytePosition = 0; 3797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nBitPosition = 0; 3798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBytePosition = *nPosition / 8; 3799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBitPosition = *nPosition % 8; 3800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (bIcreasePosition) 3802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *nPosition += nBits; 3803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = ((OMX_U32)pBuffer[nBytePosition] << (24+nBitPosition) ); 3804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + (8 - nBitPosition); 3805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 3806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 1] << (16+nBitPosition)); 3808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 3809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 3811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 2] << (8+nBitPosition)); 3813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 3814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nNumBitsRead < nBits) 3816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput | ( pBuffer[nBytePosition + 3] << (nBitPosition)); 3818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nNumBitsRead = nNumBitsRead + 8; 3819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nOutput = nOutput >> (32 - nBits) ; 3821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return nOutput; 3822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 3824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* func WMADEC_Parser */ 3825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* */ 3826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* desc Parses the WAVEFORMATEX data structure that is sent in the 1st */ 3827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* buffer and the it creates the RCA header and the block align */ 3828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==========================================================================*/ 382900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny WongOMX_ERRORTYPE WMADEC_Parser(OMX_U8* pBuffer, RCA_HEADER *pStreamData, struct OMX_TI_Debug dbg) 3830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 3831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError=0; 383200f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1 (dbg, "Entering WMADEC_Parser function"); 3833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 3834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin //These are the important fields that the socket node needs 3835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iTypeSpecific=0x1c; 3836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iFormatTag= *((OMX_U16*)(pBuffer)); 3837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pStreamData->iChannel=*((OMX_U16 *)(pBuffer+2)); 3838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iSamplePerSec=*((OMX_U32 *)(pBuffer+4)); 3839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iAvgBytesPerSec=*((OMX_U32 *)(pBuffer+8)); //check 3840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iBlockAlign=*((OMX_U16 *)(pBuffer+2+4+4+2)); 3841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iValidBitsPerSample=*((OMX_U16 *)(pBuffer+2+4+4+2+2)); 3842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pStreamData->iEncodeOptV=*((OMX_U16 *)(pBuffer+2+4+4+2+2+2+2+2+2)); 3843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pStreamData->iMaxPacketSize=pStreamData->iBlockAlign+31; 3844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*After this, the buffer has extra info, the Codc Specific Data Size which has 16 bites of length (2 bytes), and the Codec Specific Data of vari*/ 3846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin //Parsing information ended. 3847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (pStreamData->iFormatTag) 3849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case WAVE_FORMAT_MSAUDIO : 3852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 385300f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "WAVE_FORMAT_MSAUDIO"); 3854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 3855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Make Necessary validations for supported parameter for specific format here */ 3856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case WAVE_FORMAT_MSAUDIO_9 : 3858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 385900f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "WAVE_FORMAT_MSAUDIO_9"); 3860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 3861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Make Necessary validations for supported parameter for specific format here */ 3862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 3863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin case WAVE_FORMAT_MSAUDIO_9_LOOSELESS : 3864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 386500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT2 (dbg, "WAVE_FORMAT_MSAUDIO_9_LOOSELESS"); 3866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 3867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Make Necessary validations for supported parameter for specific format here */ 3868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin default: 3870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 3871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 3872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 3874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 387500f4c8bed7990ebaff8e20bd13b5dbdacbe22c29Benny Wong OMX_PRINT1 (dbg, "Exiting WMADEC_Parser function"); 3876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 3877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 3878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 3879b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* =========================================================================*/ 3880b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* func WMADEC_HandleUSNError */ 3881b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* */ 3882b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* desc Handles error messages returned by the dsp */ 3883b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* */ 3884b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*@return n/a */ 3885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* */ 3886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* =========================================================================*/ 3887b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid WMADEC_HandleUSNError (WMADEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 arg) 3888b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 3889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMPONENTTYPE *pHandle = NULL; 3890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U8 pending_buffers = OMX_FALSE; 3891b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 i; 3892b65f253fdc60f6208a54911bee793d225f23cdf8James Dong switch (arg) 3893b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3894b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_CONCEALED: 3895b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_UNDERFLOW: 3896b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_OVERFLOW: 3897b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_ENDOFDATA: 3898b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "Algorithm Error" ); 3899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* all of these are informative messages, Algo can recover, no need to notify the 3900b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * IL Client at this stage of the implementation */ 3901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3902b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3903b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_WARN_PLAYCOMPLETED: 3904b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3905b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2(pComponentPrivate->dbg, "%d :: GOT MESSAGE IUALG_WARN_PLAYCOMPLETED\n", __LINE__); 3906b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pOutputBufferList->EosFlagSent = 1; 3907b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler( 3908b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle, 3909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->pHandle->pApplicationPrivate, 3910b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventBufferFlag, 3911b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (OMX_U32) NULL, 3912b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_BUFFERFLAG_EOS, (OMX_PTR)OMX_BUFFERFLAG_EOS); 3913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3914b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3915b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef _ERROR_PROPAGATION__ 3917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_BAD_HANDLE: 3918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_DATA_CORRUPT: 3919b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_NOT_SUPPORTED: 3920b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_ARGUMENT: 3921b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_NOT_READY: 3922b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case IUALG_ERR_GENERAL: 3923b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3924b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 3925b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* all of these are fatal messages, Algo can not recover 3926b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * hence return an error */ 3927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4(pComponentPrivate->dbg, "Algorithm Error, cannot recover" ); 3928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->bIsInvalidState=OMX_TRUE; 3929b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->curState = OMX_StateInvalid; 3930b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle = pComponentPrivate->pHandle; 3931b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pComponentPrivate->cbInfo.EventHandler(pHandle, 3932b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle->pApplicationPrivate, 3933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventError, 3934b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ErrorInvalidState, 3935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_TI_ErrorSevere, 3936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3937b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3938b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3939b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 3940b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 3941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 3942b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3943b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 3944b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3945b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef RESOURCE_MANAGER_ENABLED 3947b65f253fdc60f6208a54911bee793d225f23cdf8James Dongvoid WMAD_ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 3948b65f253fdc60f6208a54911bee793d225f23cdf8James Dong{ 3949b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 3950b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_STATETYPE state = OMX_StateIdle; 3951b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent; 3952b65f253fdc60f6208a54911bee793d225f23cdf8James Dong WMADEC_COMPONENT_PRIVATE *pCompPrivate = NULL; 3953b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3954b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate = (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 3955b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3956b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesPreempted) { 3957b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (pCompPrivate->curState == OMX_StateExecuting || 3958b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->curState == OMX_StatePause) { 3959b65f253fdc60f6208a54911bee793d225f23cdf8James Dong write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd)); 3960b65f253fdc60f6208a54911bee793d225f23cdf8James Dong write (pCompPrivate->cmdDataPipe[1], &state ,sizeof(OMX_U32)); 3961b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3962b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->bPreempted = 1; 3963b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3964b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3965b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (*(cbData.RM_Error) == OMX_RmProxyCallback_ResourcesAcquired){ 3966b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pCompPrivate->cbInfo.EventHandler ( 3967b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pHandle, pHandle->pApplicationPrivate, 3968b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_EventResourcesAcquired, 0,0, 3969b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NULL); 3970b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3971b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3972b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 3973b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3974b65f253fdc60f6208a54911bee793d225f23cdf8James Dong} 3975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 3976b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 3977