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