1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==================================================================== 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Texas Instruments OMAP(TM) Platform Software 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied. 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==================================================================== */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file LCML_DspCodec.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements LCML for Linux 8.x 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\ 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 1.0 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------------------------------------------------------- 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! =================================== 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ============================================================================= */ 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <windows.h> 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <errno.h> 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 515807caa34823ecb34460de67103205d61669edccAndreas Huber#ifdef ANDROID 525807caa34823ecb34460de67103205d61669edccAndreas Huber#include <linux/prctl.h> 535807caa34823ecb34460de67103205d61669edccAndreas Huber#endif 545807caa34823ecb34460de67103205d61669edccAndreas Huber 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h> 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* Common WinCE and Linux Headers */ 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "LCML_DspCodec.h" 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "usn.h" 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define CEXEC_DONE 1 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*DSP_HNODE hDasfNode;*/ 6769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan#define ABS_DLL_NAME_LENGTH 128 68b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#undef LOG_TAG 69b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#define LOG_TAG "TI_LCML" 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 7169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan#define LCML_MALLOC(p,s,t) \ 7269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan p = (t*)malloc(s); \ 7369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (NULL == p){ \ 74b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, ERROR, 4, OMX_DBG_BASEMASK, "LCML:::::::: ERROR(#%d F:%s)!!! Ran out of memory while trying to allocate %d bytes!!!\n",__LINE__,__FUNCTION__,s); \ 7569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan }else { \ 76b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, OMX_DBG_BASEMASK, "LCML:::::::: (#%d F:%s)Success to allocate %d bytes ... pointer %p\n",__LINE__,__FUNCTION__,s,p); \ 7769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 7869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 7969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan#define LCML_FREE(p) \ 80b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, OMX_DBG_BASEMASK, "LCML:::::::: (#%d F:%s)Freeing pointer %p done",__LINE__,__FUNCTION__,p); \ 8169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan free(p); 8269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*Prototyping*/ 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE InitMMCodec(OMX_HANDLETYPE hInt, 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING codecName, 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *toCodecInitParams, 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *fromCodecInfoStruct, 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE *pCallbacks); 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE InitMMCodecEx(OMX_HANDLETYPE hInt, 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING codecName, 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *toCodecInitParams, 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *fromCodecInfoStruct, 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE *pCallbacks, 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING Args); 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForEvent(OMX_HANDLETYPE hComponent, 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TUsnCodecEvent event, 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *args[10]); 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE QueueBuffer(OMX_HANDLETYPE hComponent, 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TMMCodecBufferType bufType, 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *buffer, 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 bufferLen, 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 bufferSizeUsed , 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *auxInfo, 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 auxInfoLen, 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 *usrArg); 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ControlCodec(OMX_HANDLETYPE hComponent, 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TControlCmd iCodecCmd, 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *args[10]); 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE DmmMap(DSP_HPROCESSOR ProcHandle, 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 size, 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* pArmPtr, 112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin DMM_BUFFER_OBJ* pDmmBuf, 113b65f253fdc60f6208a54911bee793d225f23cdf8James Dong struct OMX_TI_Debug dbg); 114b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE DmmUnMap(DSP_HPROCESSOR ProcHandle, 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *pMapPtr, 117b65f253fdc60f6208a54911bee793d225f23cdf8James Dong void *pResPtr, 118b65f253fdc60f6208a54911bee793d225f23cdf8James Dong struct OMX_TI_Debug dbg); 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE DeleteDspResource(LCML_DSP_INTERFACE *hInterface); 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeResources(LCML_DSP_INTERFACE *hInterface); 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid* MessagingThread(void *arg); 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 12469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajanstatic int append_dsp_path(char * dll64p_name, char *absDLLname); 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* GetHandle function is called by OMX component to get LCML handle 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Handle of the component to be accessed 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** =========================================================================*/ 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE GetHandle(OMX_HANDLETYPE *hInterface ) 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE err = 0 ; 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pHandle; 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct LCML_CODEC_INTERFACE *dspcodecinterface ; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 140b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, OMX_DBG_BASEMASK, "%d :: GetHandle application\n",__LINE__); 141b65f253fdc60f6208a54911bee793d225f23cdf8James Dong LCML_MALLOC(*hInterface,sizeof(LCML_DSP_INTERFACE),LCML_DSP_INTERFACE); 14269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hInterface == NULL) 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInsufficientResources; 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(*hInterface, 0, sizeof(LCML_DSP_INTERFACE)); 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (LCML_DSP_INTERFACE*)*hInterface; 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 15269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(dspcodecinterface,sizeof(LCML_CODEC_INTERFACE),LCML_CODEC_INTERFACE); 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (dspcodecinterface == NULL) 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInsufficientResources; 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(dspcodecinterface, 0, sizeof(LCML_CODEC_INTERFACE)); 159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_DBG_INIT (dspcodecinterface->dbg, "TI_LCML"); 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pCodecinterfacehandle = dspcodecinterface; 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->InitMMCodec = InitMMCodec; 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->InitMMCodecEx = InitMMCodecEx; 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->WaitForEvent = WaitForEvent; 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->QueueBuffer = QueueBuffer; 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->ControlCodec = ControlCodec; 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 16869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(pHandle->dspCodec,sizeof(LCML_DSP),LCML_DSP); 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pHandle->dspCodec == NULL) 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin err = OMX_ErrorInsufficientResources; 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(pHandle->dspCodec, 0, sizeof(LCML_DSP)); 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_init (&pHandle->mutex, NULL); 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dspcodecinterface->pCodec = *hInterface; 178b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (dspcodecinterface->dbg, "GetHandle application handle %p dspCodec %p",pHandle, pHandle->dspCodec); 179b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (err); 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* InitMMCodecEx initialise the OMX Component specific handle to LCML. 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* The memory is allocated and the dsp node is created. Add notification object 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* to listener thread. 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Handle to LCML which is allocated and filled 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param codecName - not used 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param toCodecInitParams - not used yet 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param fromCodecInfoStruct - not used yet 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pCallbacks - List of callback that uses to call OMX 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param Args - additional arguments 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==========================================================================*/ 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE InitMMCodecEx(OMX_HANDLETYPE hInt, 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING codecName, 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * toCodecInitParams, 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * fromCodecInfoStruct, 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE *pCallbacks, 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING Args) 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 dllinfo; 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: InitMMCodecEx application\n", __LINE__); 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 215c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong if (hInt == NULL ) 216c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong { 217c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong eError = OMX_ErrorInsufficientResources; 218c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong goto ERROR; 219c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong } 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(Args ==NULL) 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin InitMMCodec(hInt, codecName, toCodecInitParams, fromCodecInfoStruct, pCallbacks); 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE * phandle; 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CREATEPHASEARGS crData; 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 22969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan int i = 0, k = 0; 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NODEATTRIN NodeAttrIn; 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_CBDATA *pArgs; 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin BYTE argsBuf[32 + sizeof(ULONG)]; 23369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan char abs_dsp_path[ABS_DLL_NAME_LENGTH]; 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef CEXEC_DONE 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin UINT argc = 1; 23669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan char argv[ABS_DLL_NAME_LENGTH]; 23769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan k = append_dsp_path(DSP_DOF_IMAGE, argv); 23869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (k < 0) 23969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: append_dsp_path returned an error!\n", __LINE__); 24169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 24269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 24369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int tmperr; 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)hInt)->pCodec); 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pPERF = PERF_Create(PERF_FOURCC('C','M','L',' '), 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleAudioDecode | PERF_ModuleAudioEncode | 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleVideoDecode | PERF_ModuleVideoEncode | 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleImageDecode | PERF_ModuleImageEncode | 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(phandle->pPERF, 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySetup); 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_init(&phandle->m_isStopped_mutex, NULL); 261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_buffer_count = 0; 262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* INIT DSP RESOURCE */ 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCallbacks) 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->dspCodec->Callbacks.LCML_Callback = pCallbacks->LCML_Callback; 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* INITIALIZATION OF DSP */ 273b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Entering Init_DSPSubSystem\n", __LINE__); 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DspManager_Open(0, NULL); 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP Manager Open", ERROR); 276b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "DspManager_Open Successful\n"); 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Attach and get handle to processor */ 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_Attach(TI_PROCESSOR_DSP, NULL, &(phandle->dspCodec->hProc)); 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Attach processor", ERROR); 281b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "DSPProcessor_Attach Successful\n"); 282b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Base Image is Already Loaded\n"); 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (dllinfo=0; dllinfo < phandle->dspCodec->NodeInfo.nNumOfDLLs; dllinfo++) 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 286b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Register Component Node\n",phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType); 28769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 28869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan k = append_dsp_path((char*)phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].DllName, abs_dsp_path); 28969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (k < 0) 29069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 291b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: append_dsp_path returned an error!\n", __LINE__); 29269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 29369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 29469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 29569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPManager_RegisterObject((struct DSP_UUID *)phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].uuid, 29769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType, abs_dsp_path); 29869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 29969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan DSP_ERROR_EXIT (status, "Register Component Library", ERROR); 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* NODE specific data */ 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.cbStruct = sizeof(struct DSP_NODEATTRIN); 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.iPriority = phandle->dspCodec->Priority; 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.uTimeout = phandle->dspCodec->Timeout; 306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong NodeAttrIn.uTimeout = 1000; /* WORKAROUND */ 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.uProfileID= phandle->dspCodec->ProfileID; 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Prepare Create Phase Argument */ 309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Prepare Create Phase Argument \n", __LINE__); 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TO DO check is application setting it properly */ 31169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan i = 0; 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->pCrPhArgs !=NULL) 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 31469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan while((phandle->dspCodec->pCrPhArgs[i] != END_OF_CR_PHASE_ARGS) && (i < LCML_DATA_SIZE)) 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 316b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: copying Create Phase Argument \n", i); 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin crData.cData[i] = phandle->dspCodec->pCrPhArgs[i]; 318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: CR PH arg[%d] = %d \n",__LINE__, i, crData.cData[i]); 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: ILLEGAL CREATEPHASE SET IT ..\n", __LINE__); 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 32969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (i >= LCML_DATA_SIZE) 33069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, 332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: Reached end of Create Phase Args Array. Did not find END_OF_CR_PHASE_ARGS marker. \n", __LINE__); 33369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 33469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 33569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 33669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* LCML_DPRINT("Create Phase args strlen = %d\n",strlen(crData.cData)); */ 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* crData.cbData = sizeof (ULONG) + strlen(crData.cData); */ 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin crData.cbData = i*2; 340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Create Phase args strlen = %ld\n", crData.cbData); 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Allocate(phandle->dspCodec->hProc, 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_UUID *)phandle->dspCodec->NodeInfo.AllUUIDs[0].uuid, 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_CBDATA*)&crData, 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &NodeAttrIn,&(phandle->dspCodec->hNode)); 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Allocate Component", ERROR); 347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DSPNode_Allocate Successfully\n", __LINE__); 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pArgs = (struct DSP_CBDATA *)argsBuf; 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy((char*)pArgs->cData, Args); 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pArgs->cbData = (ULONG)strlen ((char *)pArgs->cData); 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* For debugging on connect DSP nodes */ 354b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "[LCML] - struct DSP_CBDATA.cbData (length): %d %s\n", (int)pArgs->cbData, (char *)pArgs->cData); 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (phandle->dspCodec->DeviceInfo.TypeofDevice == 1) 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 358b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Audio Device Selected\n", __LINE__); 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Allocate(phandle->dspCodec->hProc, 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_UUID *)phandle->dspCodec->DeviceInfo.AllUUIDs[0].uuid, 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(phandle->dspCodec->hDasfNode)); 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DASF Allocate Component", ERROR); 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 367b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DASF DSPNode_Allocate Successfully\n", __LINE__); 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->DeviceInfo.DspStream != NULL) 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->DeviceInfo.TypeofRender == 0) 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* render for playback */ 373b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Render for playback\n", __LINE__); 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_ConnectEx(phandle->dspCodec->hNode, 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (phandle->dspCodec->hDasfNode), 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_STRMATTR *)phandle->dspCodec->DeviceInfo.DspStream, 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pArgs); 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Node Connect", ERROR); 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(phandle->dspCodec->DeviceInfo.TypeofRender == 1) 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* render for record */ 385b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Render for record\n", __LINE__); 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_ConnectEx(phandle->dspCodec->hDasfNode, 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->dspCodec->hNode, 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_STRMATTR *)phandle->dspCodec->DeviceInfo.DspStream, 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pArgs); 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Node Connect", ERROR); 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 397b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: ILLEGAL STREAM PARAMETER SET IT ..\n",__LINE__); 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Create(phandle->dspCodec->hNode); 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Create the Node", ERROR); 405b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: After DSPNode_Create !!! \n", __LINE__); 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Run(phandle->dspCodec->hNode); 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Goto RUN mode", ERROR); 409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DSPNode_Run Successfully\n", __LINE__); 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((phandle->dspCodec->In_BufInfo.DataTrMethod == DMM_METHOD) || (phandle->dspCodec->Out_BufInfo.DataTrMethod == DMM_METHOD)) 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification; 414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 41669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION) 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification == NULL) 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification, 0, sizeof(struct DSP_NOTIFICATION)); 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_RegisterNotify(phandle->dspCodec->hNode, DSP_NODEMESSAGEREADY, DSP_SIGNALEVENT, notification); 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify", ERROR); 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[0] = notification; 42769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan#ifdef __ERROR_PROPAGATION__ 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification_mmufault; 42969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 430b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 43269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification_mmufault,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION); 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification_mmufault == NULL) 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 435b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification_mmufault,0,sizeof(struct DSP_NOTIFICATION)); 439b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_RegisterNotify(phandle->dspCodec->hProc, DSP_MMUFAULT, DSP_SIGNALEVENT, notification_mmufault); 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify DSP_MMUFAULT", ERROR); 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[1] = notification_mmufault; 443b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification_syserror ; 445b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 446b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 44869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification_syserror,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION); 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification_syserror == NULL) 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 451b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification_syserror,0,sizeof(struct DSP_NOTIFICATION)); 455b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_RegisterNotify(phandle->dspCodec->hProc, DSP_SYSERROR, DSP_SIGNALEVENT, notification_syserror); 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify DSP_SYSERROR", ERROR); 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[2] = notification_syserror; 459b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Listener thread */ 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pshutdownFlag = 0; 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_tidMessageThread = 0; 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->bUsnEos = OMX_FALSE; 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmperr = pthread_create(&phandle->g_tidMessageThread, 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MessagingThread, 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)phandle); 4705807caa34823ecb34460de67103205d61669edccAndreas Huber 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmperr || !phandle->g_tidMessageThread) 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 473b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Thread creation failed: 0x%x",tmperr); 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(phandle->pPERF, 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_tidMessageThread, 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURCC('C','M','L','T')); 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* init buffers buffer counter */ 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufinputcount = 0; 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufoutputcount = 0; 486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Arminputstorage[i] = NULL; 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Armoutputstorage[i] = NULL; 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pAlgcntlDmmBuf[i] = NULL; 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pStrmcntlDmmBuf[i] = NULL; 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->algcntlmapped[i] = 0; 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->strmcntlmapped[i] = 0; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(phandle->pPERF, 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySetup); 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinERROR: 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef CEXEC_DONE 50469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(argv); 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 506b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Exiting Init_DSPSubSystem\n error = %x\n", __LINE__, eError); 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* InitMMCodec initialise the OMX Component specific handle to LCML. 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* The memory is allocated and the dsp node is created. Add notification object 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* to listener thread. 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Handle to LCML which is allocated and filled 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param codecName - not used 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param toCodecInitParams - not used yet 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param fromCodecInfoStruct - not used yet 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pCallbacks - List of callback that uses to call OMX 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==========================================================================*/ 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE InitMMCodec(OMX_HANDLETYPE hInt, 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_STRING codecName, 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * toCodecInitParams, 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * fromCodecInfoStruct, 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE *pCallbacks) 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 dllinfo; 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE * phandle; 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef CEXEC_DONE 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin UINT argc = 1; 53569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan char argv[ABS_DLL_NAME_LENGTH]; 53669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan k = append_dsp_path(DSP_DOF_IMAGE, argv); 53769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (k < 0) 53869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 539b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: append_dsp_path returned an error!\n", __LINE__); 54069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 54169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 54269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CREATEPHASEARGS crData; 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 54669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan int i = 0, k =0; 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NODEATTRIN NodeAttrIn; 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int tmperr; 54969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan char abs_dsp_path[ABS_DLL_NAME_LENGTH]; 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 551b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: InitMMCodec application\n",__LINE__); 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 553c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong if (hInt == NULL ) 554c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong { 555c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong eError = OMX_ErrorInsufficientResources; 556c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong goto ERROR; 557c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong } 558c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)hInt)->pCodec); 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pPERF = PERF_Create(PERF_FOURCC('C','M','L',' '), 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleAudioDecode | PERF_ModuleAudioEncode | 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleVideoDecode | PERF_ModuleVideoEncode | 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleImageDecode | PERF_ModuleImageEncode | 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(phandle->pPERF, 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySetup); 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 571b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 572b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_init(&phandle->m_isStopped_mutex, NULL); 573b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_buffer_count = 0; 574b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 575b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* INIT DSP RESOURCE */ 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pCallbacks) 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->dspCodec->Callbacks.LCML_Callback = pCallbacks->LCML_Callback; 580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* INITIALIZATION OF DSP */ 588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Entering Init_DSPSubSystem\n", __LINE__); 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DspManager_Open(0, NULL); 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP Manager Open", ERROR); 591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "DspManager_Open Successful\n"); 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Attach and get handle to processor */ 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_Attach(TI_PROCESSOR_DSP, NULL, &(phandle->dspCodec->hProc)); 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Attach processor", ERROR); 596b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "DSPProcessor_Attach Successful\n"); 597b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Base Image is Already Loaded\n"); 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(dllinfo=0; dllinfo < phandle->dspCodec->NodeInfo.nNumOfDLLs; dllinfo++) 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 601b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Register Component Node\n",phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType); 60269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 60369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan k = append_dsp_path((char*)phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].DllName, abs_dsp_path); 60469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (k < 0) 60569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: append_dsp_path returned an error!\n", __LINE__); 60769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 60869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 60969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 61069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPManager_RegisterObject((struct DSP_UUID *)phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].uuid, 61269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan phandle->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType, 61369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan abs_dsp_path); 61469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Register Component Library", ERROR) 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* NODE specific data */ 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.cbStruct = sizeof(struct DSP_NODEATTRIN); 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.iPriority = phandle->dspCodec->Priority; 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.uTimeout = phandle->dspCodec->Timeout; 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.uTimeout = 1000; /* WORKAROUND */ 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NodeAttrIn.uProfileID= phandle->dspCodec->ProfileID; 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Prepare Create Phase Argument */ 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 627b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Prepare Create Phase Argument \n",__LINE__); 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* TO DO check is application setting it properly */ 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->pCrPhArgs !=NULL) 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 63169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan while((phandle->dspCodec->pCrPhArgs[i] != END_OF_CR_PHASE_ARGS) && (i < LCML_DATA_SIZE)) 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 633b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: copying Create Phase Argument \n",i); 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin crData.cData[i] =phandle->dspCodec->pCrPhArgs[i]; 635b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: CR PH arg[%d] = %d \n",__LINE__,i,crData.cData[i]); 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 641b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: ILLEGAL CREATEPHASE SET IT ..\n",__LINE__); 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 64669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (i >= LCML_DATA_SIZE) 64769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan { 648b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, 649b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: Reached end of Create Phase Args Array. Did not find END_OF_CR_PHASE_ARGS marker. \n", __LINE__); 65069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan eError = OMX_ErrorBadParameter; 65169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan goto ERROR; 65269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan } 65369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 65469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* LCML_DPRINT ("Create Phase args strlen = %d\n",strlen(crData.cData)); */ 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* crData.cbData = sizeof (ULONG) + strlen(crData.cData); */ 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin crData.cbData = i * 2; 658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Create Phase args strlen = %ld\n", crData.cbData); 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Allocate(phandle->dspCodec->hProc, 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_UUID *)phandle->dspCodec->NodeInfo.AllUUIDs[0].uuid, 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_CBDATA*)&crData, &NodeAttrIn, 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(phandle->dspCodec->hNode)); 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Allocate Component", ERROR); 665b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DSPNode_Allocate Successfully\n", __LINE__); 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->DeviceInfo.TypeofDevice == 1) 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Audio Device Selected\n", __LINE__); 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Allocate(phandle->dspCodec->hProc, 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_UUID *)phandle->dspCodec->DeviceInfo.AllUUIDs[0].uuid, 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(phandle->dspCodec->hDasfNode)); 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DASF Allocate Component", ERROR); 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 677b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DASF DSPNode_Allocate Successfully\n", __LINE__); 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->DeviceInfo.DspStream !=NULL) 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(phandle->dspCodec->DeviceInfo.TypeofRender == 0) 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* render for playback */ 683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Render for playback\n", __LINE__); 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Connect(phandle->dspCodec->hNode, 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->dspCodec->hDasfNode, 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_STRMATTR *)phandle->dspCodec->DeviceInfo.DspStream); 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Node Connect", ERROR); 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if(phandle->dspCodec->DeviceInfo.TypeofRender == 1) 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* render for record */ 694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Render for record\n", __LINE__); 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Connect(phandle->dspCodec->hDasfNode, 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->dspCodec->hNode, 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (struct DSP_STRMATTR *)phandle->dspCodec->DeviceInfo.DspStream); 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Node Connect", ERROR); 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 705b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: ILLEGAL STREAM PARAMETER SET IT ..\n",__LINE__); 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Create(phandle->dspCodec->hNode); 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "Create the Node", ERROR); 713b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: After DSPNode_Create !!! \n", __LINE__); 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Run (phandle->dspCodec->hNode); 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Goto RUN mode", ERROR); 717b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: DSPNode_Run Successfully\n", __LINE__); 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((phandle->dspCodec->In_BufInfo.DataTrMethod == DMM_METHOD) || 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (phandle->dspCodec->Out_BufInfo.DataTrMethod == DMM_METHOD)) 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification; 723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 72569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION); 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification == NULL) 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 728b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification,0,sizeof(struct DSP_NOTIFICATION)); 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_RegisterNotify(phandle->dspCodec->hNode, DSP_NODEMESSAGEREADY, DSP_SIGNALEVENT, notification); 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify", ERROR); 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[0] = notification; 736b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __ERROR_PROPAGATION__ 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification_mmufault; 738b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 739b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 74169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification_mmufault,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION); 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification_mmufault == NULL) 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 744b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification_mmufault,0,sizeof(struct DSP_NOTIFICATION)); 748b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_RegisterNotify(phandle->dspCodec->hProc, DSP_MMUFAULT, DSP_SIGNALEVENT, notification_mmufault); 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify DSP_MMUFAULT", ERROR); 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[1] = notification_mmufault; 752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NOTIFICATION* notification_syserror ; 754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Registering the Node for Messaging\n",__LINE__); 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 75769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(notification_syserror,sizeof(struct DSP_NOTIFICATION),struct DSP_NOTIFICATION); 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(notification_syserror == NULL) 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: malloc failed....\n",__LINE__); 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(notification_syserror,0,sizeof(struct DSP_NOTIFICATION)); 764b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_RegisterNotify(phandle->dspCodec->hProc, DSP_SYSERROR, DSP_SIGNALEVENT, notification_syserror); 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node register notify DSP_SYSERROR", ERROR); 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_aNotificationObjects[2] = notification_syserror; 768b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Listener thread */ 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pshutdownFlag = 0; 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_tidMessageThread = 0; 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmperr = pthread_create(&phandle->g_tidMessageThread, 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL, 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin MessagingThread, 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)phandle); 7795807caa34823ecb34460de67103205d61669edccAndreas Huber 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(tmperr || !phandle->g_tidMessageThread) 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 782b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "Thread creation failed: 0x%x",tmperr); 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto ERROR; 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(phandle->pPERF, 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->g_tidMessageThread, 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURCC('C','M','L','T')); 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* init buffers buffer counter */ 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufinputcount =0; 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufoutputcount =0; 795b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Arminputstorage[i] = NULL; 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Armoutputstorage[i] = NULL; 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pAlgcntlDmmBuf[i] = NULL; 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pStrmcntlDmmBuf[i] = NULL; 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->algcntlmapped[i] = 0; 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->strmcntlmapped[i] = 0; 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(phandle->pPERF, 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySetup); 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinERROR: 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef CEXEC_DONE 81369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(argv); 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 815b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInt)->dbg, "%d :: Exiting Init_DSPSubSystem\n", __LINE__); 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* The LCML_WaitForEvent Wait for a event sychronously 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Handle of the component to be accessed. This is the 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* component handle returned by the call to the GetHandle function. 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param event - Event occured 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param args - Array of "void *" that contains the associated arguments for 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* occured event 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE WaitForEvent(OMX_HANDLETYPE hComponent, 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TUsnCodecEvent event, 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * args[10] ) 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* The LCML_QueueBuffer send data to DSP convert it into USN format and send 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* it to DSP via setbuff 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param [in] hInterface - Handle of the component to be accessed. This is 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* the component handle returned by the call to the GetHandle function. 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param bufType - type of buffer 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param buffer - pointer to buffer 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param bufferLen - length of buffer 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param bufferSizeUsed - length of used buffer 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param auxInfo - pointer to parameter 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param auxInfoLen - length of parameter 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param usrArg - not used 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==========================================================================*/ 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE QueueBuffer (OMX_HANDLETYPE hComponent, 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TMMCodecBufferType bufType, 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 * buffer, OMX_S32 bufferLen, 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 bufferSizeUsed ,OMX_U8 * auxInfo, 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_S32 auxInfoLen ,OMX_U8 * usrArg ) 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE * phandle; 865b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 streamId = 0; 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 868757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan char * tmp2=NULL; 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DMM_BUFFER_OBJ* pDmmBuf=NULL; 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int commandId; 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg; 872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_U32 MapBufLen=0; 873b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_BOOL mappedBufferFound = false; 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 875b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "%d :: QueueBuffer application\n",__LINE__); 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 877b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (hComponent == NULL ) 878c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong { 879c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong eError = OMX_ErrorInsufficientResources; 880b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 881c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong } 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)hComponent)->pCodec); 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 885b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "LCML QueueBuffer: phandle->iBufinputcount is %lu (%p) \n", phandle->iBufinputcount, phandle); 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(phandle->pPERF, 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin buffer, 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bufferSizeUsed, 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleComponent, 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode); 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&phandle->mutex); 89569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_MALLOC(tmp2,sizeof(TArmDspCommunicationStruct) + 256,char); 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmp2 == NULL) 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 90169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan memset(tmp2,0,sizeof(TArmDspCommunicationStruct)+256); 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct = (TArmDspCommunicationStruct *)(tmp2 + 128); 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iBufferPtr = (OMX_U32) buffer; 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iBufferSize = bufferLen; 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iParamPtr = (OMX_U32) auxInfo; 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iParamSize = auxInfoLen; 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*USN updation */ 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iBufSizeUsed = bufferSizeUsed ; 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iArmArg = (OMX_U32) buffer; 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iArmParamArg = (OMX_U32) auxInfo; 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* if the bUsnEos flag is set interpret the usrArg as a buffer header */ 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (phandle->bUsnEos == OMX_TRUE) { 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iEOSFlag = (((OMX_BUFFERHEADERTYPE*)usrArg)->nFlags & 0x00000001); 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iEOSFlag = 0; 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iUsrArg = (OMX_U32) usrArg; 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufoutputcount = phandle->iBufoutputcount % QUEUE_SIZE; 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufinputcount = phandle->iBufinputcount % QUEUE_SIZE; 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->Bufoutindex = phandle->iBufoutputcount; 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->BufInindex = phandle->iBufinputcount; 924b65f253fdc60f6208a54911bee793d225f23cdf8James Dong switch (bufType) 925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 926b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case EMMCodecInputBufferMapBufLen: 927b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bufType = EMMCodecInputBuffer; 928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong MapBufLen = 1; 929b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 930b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case EMMCodecOutputBufferMapBufLen: 931b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bufType = EMMCodecOuputBuffer; 932b65f253fdc60f6208a54911bee793d225f23cdf8James Dong MapBufLen = 1; 933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 934b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case EMMCodecInputBufferMapReuse: 935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bufType = EMMCodecInputBuffer; 936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->ReUseMap = 1; 937b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 938b65f253fdc60f6208a54911bee793d225f23cdf8James Dong case EMMCodecOutputBufferMapReuse: 939b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bufType = EMMCodecOuputBuffer; 940b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->ReUseMap = 1; 941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 942b65f253fdc60f6208a54911bee793d225f23cdf8James Dong default: 943b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((bufType >= EMMCodecStream0) && (bufType <= (EMMCodecStream0 + 20))) 947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin streamId = bufType - EMMCodecStream0; 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iStreamID = streamId; 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (bufType == EMMCodecInputBuffer || !(streamId % 2)) 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Arminputstorage[phandle->iBufinputcount] = phandle->commStruct; 956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = phandle->dspCodec->InDmmBuffer; 957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + phandle->iBufinputcount; 958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufinputcount++; 959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufinputcount = phandle->iBufinputcount % QUEUE_SIZE; 960b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "VPP port %lu use InDmmBuffer (%lu) %p\n", streamId, phandle->iBufinputcount, pDmmBuf); 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (bufType == EMMCodecOuputBuffer || streamId % 2) 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->Armoutputstorage[phandle->iBufoutputcount] = phandle->commStruct; 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = phandle->dspCodec->OutDmmBuffer; 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + phandle->iBufoutputcount; 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufoutputcount++; 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->iBufoutputcount = phandle->iBufoutputcount % QUEUE_SIZE; 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 973b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Unrecognized buffer type.."); 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 975757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan if(tmp2) 976757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan { 977757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan free(tmp2); 978757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan phandle->commStruct = NULL; 979757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan } 980b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin commandId = USN_GPPMSG_SET_BUFF|streamId; 983b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Sending command ID 0x%x",commandId); 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( pDmmBuf == NULL) 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 987b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 989b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "buffer = 0x%p bufferlen = %ld auxInfo = 0x%p auxInfoLen %ld\n", 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin buffer, bufferLen, auxInfo, auxInfoLen ); 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iArmbufferArg = (OMX_U32)buffer; 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((buffer != NULL) && (bufferLen != 0)) 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 i; 996b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DSP_STATUS status; 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 998b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (phandle->ReUseMap) 999b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1000b65f253fdc60f6208a54911bee793d225f23cdf8James Dong mappedBufferFound = false; 1001b65f253fdc60f6208a54911bee793d225f23cdf8James Dong for(i = 0; i <= phandle->mapped_buffer_count; i++) 1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1003b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(phandle->mapped_dmm_buffers[i].pAllocated == buffer) 1004b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1005b65f253fdc60f6208a54911bee793d225f23cdf8James Dong mappedBufferFound = true; 1006b65f253fdc60f6208a54911bee793d225f23cdf8James Dong *pDmmBuf = phandle->mapped_dmm_buffers[i]; 1007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Re-using pDmmBuf %p mapped %p\n", pDmmBuf, pDmmBuf->pMapped); 1008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(bufType == EMMCodecInputBuffer) 1010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Issue a memory flush for input buffer to ensure cache coherency */ 1012b65f253fdc60f6208a54911bee793d225f23cdf8James Dong status = DSPProcessor_FlushMemory(phandle->dspCodec->hProc, pDmmBuf->pAllocated, bufferSizeUsed, (bufferSizeUsed > 512*1024) ? 3: 0); 1013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(DSP_FAILED(status)) 1014b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1015b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1016b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1017b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1019b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if(bufType == EMMCodecOuputBuffer) 1020b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1021b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Issue an memory invalidate for output buffer */ 1022b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (bufferLen > 512*1024) 1023b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1024b65f253fdc60f6208a54911bee793d225f23cdf8James Dong status = DSPProcessor_FlushMemory(phandle->dspCodec->hProc, pDmmBuf->pAllocated, bufferLen, 3); 1025b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(DSP_FAILED(status)) 1026b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1027b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1028b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1029b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1030b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 1031b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1032b65f253fdc60f6208a54911bee793d225f23cdf8James Dong status = DSPProcessor_InvalidateMemory(phandle->dspCodec->hProc, pDmmBuf->pAllocated, bufferLen); 1033b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(DSP_FAILED(status)) 1034b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1035b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1036b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1037b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1038b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 1040b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 1041b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1043b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1044b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(false == mappedBufferFound) 1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1046b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (bufType == EMMCodecInputBuffer || !(streamId % 2)) 1047b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1048b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->commStruct->iBufferSize = bufferSizeUsed ? bufferSizeUsed : bufferLen; 1049b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, bufferLen,buffer, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1050b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1051b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (bufType == EMMCodecOuputBuffer || streamId % 2) { 1052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, bufferLen, buffer, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1053b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1054b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) 1055b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1056b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1058b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1059b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*720p implementation */ 1060b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->commStruct->iBufferPtr = (OMX_U32) pDmmBuf->pMapped; 1061b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* storing reserve address for buffer */ 1062b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved = pDmmBuf->pReserved; 1063b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(phandle->mapped_buffer_count <= MAX_DMM_BUFFERS) 1064b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1065b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[phandle->mapped_buffer_count++] = *pDmmBuf; 1066b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 1068b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->commStruct->iBufferPtr = (OMX_U32) pDmmBuf->pMapped; 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1070b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1072b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1073b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Mapping buffer continously\n"); 1074b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (bufType == EMMCodecInputBuffer || !(streamId % 2)) 1075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1076b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (MapBufLen) 1077b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1078b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*using this option only when not mapping the entire memory region 1079b65f253fdc60f6208a54911bee793d225f23cdf8James Dong * can cause a DSP MMU FAULT or DSP SYS ERROR */ 1080b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, bufferLen, buffer, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1081b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1082b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 1083b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1084b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->commStruct->iBufferSize = bufferSizeUsed ? bufferSizeUsed : bufferLen; 1085b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Mapping Size %ld out of %ld", bufferSizeUsed, bufferLen); 1086b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, bufferSizeUsed ? bufferSizeUsed : bufferLen,buffer, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1087b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1088b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1089b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (bufType == EMMCodecOuputBuffer || streamId % 2) { 1090b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, bufferLen, buffer, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1091b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1092b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) 1093b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1094b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1095b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1096b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->commStruct->iBufferPtr = (OMX_U32) pDmmBuf->pMapped; 1097b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved = pDmmBuf->pReserved; 1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (auxInfoLen != 0 && auxInfo != NULL ) 1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1104b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "mapping parameter \n"); 1105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, phandle->commStruct->iParamSize, (void*)phandle->commStruct->iParamPtr, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1108b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iParamPtr = (OMX_U32 )pDmmBuf->pMapped ; 1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* storing reserve address for param */ 1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->paramReserved = pDmmBuf->pReserved; 1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1116b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, sizeof(TArmDspCommunicationStruct),(void *)phandle->commStruct, (pDmmBuf), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) 1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1119b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto MUTEX_UNLOCK; 1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1121b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* storing mapped address of struct */ 1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->commStruct->iArmArg = (OMX_U32)pDmmBuf->pMapped; 1124b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1125b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "sending SETBUFF \n"); 1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd = commandId; 1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1 = (int)pDmmBuf->pMapped; 1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg2 = 0; 1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1131b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "after SETBUFF \n"); 1132b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DSP_ERROR_EXIT (status, "Send message to node", MUTEX_UNLOCK); 1133b65f253fdc60f6208a54911bee793d225f23cdf8James DongMUTEX_UNLOCK: 1134eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong pthread_mutex_unlock(&phandle->mutex); 1135b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT: 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* The LCML_ControlCodec send command to DSP convert it into USN format and 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* send it to DSP 1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Handle of the component to be accessed. This is the 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* component handle returned by the call to the GetHandle function. 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param bufType - type of buffer 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param iCodecCmd - command refer TControlCmd 1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param args - pointer to send some specific command to DSP 1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return OMX_ERRORTYPE 1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* If the command successfully executes, the return code will be 1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_NoError. Otherwise the appropriate OMX error will be returned. 1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ControlCodec(OMX_HANDLETYPE hComponent, 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TControlCmd iCodecCmd, 1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * args[10]) 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE * phandle; 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1161b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "%d :: ControlCodec application\n",__LINE__); 1162c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong if (hComponent == NULL ) 1163c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong { 1164c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong eError= OMX_ErrorInsufficientResources; 1165b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1166c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong } 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE *)hComponent)->pCodec); 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedCommand(phandle->pPERF, 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) iCodecCmd, 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args, 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch (iCodecCmd) 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlPause: 1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg = {USN_GPPMSG_PAUSE, 0, 0}; 1180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Sending PAUSE command"); 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(phandle->pPERF, 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1, 1185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlStart: 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg = {USN_GPPMSG_PLAY, 0, 0}; 1194b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Sending PLAY --1 command"); 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(phandle->pPERF, 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1, 1199b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case MMCodecControlStop: 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg = {USN_GPPMSG_STOP, 0, 0}; 1208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Sending STOP command\n"); 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(phandle->pPERF, 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, 1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1, 1213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlDestroy: 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int pthreadError = 0; 1222b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Destroy the codec"); 1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(phandle->pPERF, 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(phandle->pPERF, 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin -1, 0, PERF_ModuleComponent); 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->pshutdownFlag = 1; 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join(phandle->g_tidMessageThread, NULL); 1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) 1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 1234b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "%d :: Error while closing Component Thread\n", pthreadError); 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "Destroy the codec %d",eError); 1237b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 1238b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*DeleteDspResource (phandle);*/ 1239b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (phandle->ReUseMap) 1240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1241b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_lock(&phandle->m_isStopped_mutex); 1242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*If you are able to obtain the lock then the Messaging thread has exited*/ 1243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->m_isStopped_mutex); 1244b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (phandle->ReUseMap) 1247b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1248b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 i; 1249b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* Unmap buffers */ 1251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong for(i=0; i< phandle->mapped_buffer_count; i++) 1252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(phandle->dspCodec->hProc,(void*)phandle->mapped_dmm_buffers[i].pMapped, 1254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].bufReserved, ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1255b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1256b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong for(i = 0; i <= phandle->mapped_buffer_count; i++) 1258b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].pAllocated = 0; 1260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].pReserved = 0; 1261b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].pMapped = 0; 1262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].bufReserved = 0; 1263b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].paramReserved = 0; 1264b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_dmm_buffers[i].nSize = 0; 1265b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1266b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->mapped_buffer_count = 0; 1268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1269b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DeleteDspResource (phandle); 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_OBJHANDLE pPERF = phandle->pPERF; 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeResources(phandle); 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pPERF, PERF_BoundaryComplete | PERF_BoundaryCleanup); 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(pPERF); 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* this case is for sending extra custom commands to DSP socket node */ 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlSendDspMessage: 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* todo: Check to see if the arguments are valid */ 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg = {(int)args[0], (int)args[1], (int)args[2]}; 1291b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "message to codec"); 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(phandle->pPERF, 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1, 1296b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlAlgCtrl: 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg; 1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 1306757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_lock(&phandle->mutex); 1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* searching for empty slot */ 1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (phandle->pAlgcntlDmmBuf[i] == NULL) 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1313b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(i >= QUEUE_SIZE) 1314b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1315b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1316b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorUndefined; 1317b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1318b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1319b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1320b65f253fdc60f6208a54911bee793d225f23cdf8James Dong LCML_MALLOC(phandle->pAlgcntlDmmBuf[i],sizeof(DMM_BUFFER_OBJ),DMM_BUFFER_OBJ); 1321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(phandle->pAlgcntlDmmBuf[i] == NULL) 1322b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1323b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 1324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memset(phandle->pAlgcntlDmmBuf[i],0,sizeof(DMM_BUFFER_OBJ)); 1329b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1330b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc,(int)args[2], args[1],(phandle->pAlgcntlDmmBuf[i]), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) 1332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1334b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1336b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->algcntlmapped[i] = 1; 1337b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd = USN_GPPMSG_ALGCTRL; 1338b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1 = (int)args[0]; 1339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg2 = (int)phandle->pAlgcntlDmmBuf[i]->pMapped; 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1341b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingCommand(phandle->pPERF, 1342b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd, 1343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1, 1344b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1346b65f253fdc60f6208a54911bee793d225f23cdf8James Dong status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong break; 1350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlStrmCtrl: 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg; 1354eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong 1355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_lock(&phandle->mutex); 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)args[0] == USN_STRMCMD_FLUSH) { 1357b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd = USN_GPPMSG_STRMCTRL | (int)args[1]; 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1 = USN_STRMCMD_FLUSH; 1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg2 = 0; 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->flush_pending[(int)args[1]]= 1; 1361b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __PERF_INSTRUMENTATION__ 1362b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingCommand(phandle->pPERF, 1363b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd, 1364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1, 1365b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1366b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1368b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* searching for empty slot */ 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (phandle->pStrmcntlDmmBuf[i] == NULL) 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1377b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(i >= QUEUE_SIZE) 1378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1379b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError=OMX_ErrorUndefined; 1380b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1381b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 138336733d62c0d4c565da10b34978e587d0fda0f1adJames Dong 1384b65f253fdc60f6208a54911bee793d225f23cdf8James Dong LCML_MALLOC(phandle->pStrmcntlDmmBuf[i],sizeof(DMM_BUFFER_OBJ),DMM_BUFFER_OBJ); 1385b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(phandle->pStrmcntlDmmBuf[i] == NULL) 1386b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1387b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 1388b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1389b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1390b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1391b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong memset(phandle->pStrmcntlDmmBuf[i],0,sizeof(DMM_BUFFER_OBJ)); //ATC 1393b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1394b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = DmmMap(phandle->dspCodec->hProc, (int)args[2], args[1],(phandle->pStrmcntlDmmBuf[i]), ((LCML_CODEC_INTERFACE *)hComponent)->dbg); 1395b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError != OMX_ErrorNone) 1396b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1397b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&phandle->mutex); 1398b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 1399b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1400b65f253fdc60f6208a54911bee793d225f23cdf8James Dong phandle->strmcntlmapped[i] = 1; 1401b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(phandle->dspCodec->DeviceInfo.TypeofRender == 0) 1402b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1403b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* playback mode */ 1404b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd = USN_GPPMSG_STRMCTRL | 0x01; 1405b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1 = (int)args[0]; 1406b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg2 = (int)phandle->pStrmcntlDmmBuf[i]->pMapped; 1407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if(phandle->dspCodec->DeviceInfo.TypeofRender == 1) 1409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1410b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* record mode */ 1411b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd = USN_GPPMSG_STRMCTRL; 1412b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1 = (int)args[0]; 1413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg2 = (int)phandle->pStrmcntlDmmBuf[i]->pMapped; 1414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_SendingCommand(phandle->pPERF, 1418b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwCmd, 1419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong msg.dwArg1, 1420b65f253fdc60f6208a54911bee793d225f23cdf8James Dong PERF_ModuleSocketNode); 1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_PutMessage (phandle->dspCodec->hNode, &msg, DSP_FOREVER); 1423757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_unlock(&phandle->mutex); 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "Send message to node", EXIT); 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1426b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "STRMControl: arg[0]: message = %x\n",(int)args[0]); 1427b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "STRMControl: arg[1]: address = %p\n",args[1]); 1428b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)hComponent)->dbg, "STRMControl: arg[2]: size = %d\n",(int)args[2]); 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case EMMCodecControlUsnEos: 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin phandle->bUsnEos = OMX_TRUE; 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1436b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* DmmMap () method is used to allocate the memory using DMM. 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param ProcHandle - Component identification number 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param size - Buffer header address, that needs to be sent to codec 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pArmPtr - Message used to send the buffer to codec 1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pDmmBuf - buffer id 1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone - Success 1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware - Hardware Error 1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE DmmMap(DSP_HPROCESSOR ProcHandle, 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 size, 1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void* pArmPtr, 1458b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DMM_BUFFER_OBJ* pDmmBuf, 1459b65f253fdc60f6208a54911bee793d225f23cdf8James Dong struct OMX_TI_Debug dbg) 1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorUndefined; 1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nSizeReserved = 0; 1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pDmmBuf == NULL) 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1467b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "pBuf is NULL\n"); 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pArmPtr == NULL) 1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1474b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "pBuf is NULL\n"); 1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Allocate */ 1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pAllocated = pArmPtr; 1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Reserve */ 1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nSizeReserved = ROUND_TO_PAGESIZE(size) + 2*DMM_PAGE_SIZE ; 1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_ReserveMemory(ProcHandle, nSizeReserved, &(pDmmBuf->pReserved)); 1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1487b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "DSPProcessor_ReserveMemory() failed - error 0x%x", (int)status); 1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->nSize = size; 1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1493b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1494b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2 (dbg, " DMM MAP Reserved: %p (for buf %p), size 0x%x (%d)", pDmmBuf->pReserved, pArmPtr, nSizeReserved,nSizeReserved); 1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Map */ 1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_Map(ProcHandle, 1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pAllocated,/* malloc'd data here*/ 1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin size , /* size */ 1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf->pReserved, /* reserved space */ 1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin &(pDmmBuf->pMapped), /* returned map pointer */ 1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0); /* final param is reserved. set to zero. */ 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1505b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "DSPProcessor_Map() failed - error 0x%x", (int)status); 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1509b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1 (dbg, "DMM Mapped: %p, size 0x%lx (%ld)",pDmmBuf->pMapped, size,size); 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Previously we used to Flush or Invalidate the mapped buffer. This was 1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * removed due to bridge is now handling the flush/invalidate operation */ 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* DmmUnMap () method is used to de-allocate the memory using DMM. 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param ProcHandle - Component identification number 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pMapPtr - Map address 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pResPtr - reserve adress 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone - Success 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware - Hardware Error 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1530b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_ERRORTYPE DmmUnMap(DSP_HPROCESSOR ProcHandle, void* pMapPtr, void* pResPtr, struct OMX_TI_Debug dbg ) 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pMapPtr == NULL) 1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1537b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "pMapPtr is NULL\n"); 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pResPtr == NULL) 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1543b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERROR4 (dbg, "pResPtr is NULL\n"); 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorBadParameter; 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_UnMap(ProcHandle,pMapPtr); 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1550b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4 (dbg, "DSPProcessor_UnMap() failed - error 0x%x",(int)status); 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (dbg, "unreserving structure =0x%p\n",pResPtr ); 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_UnReserveMemory(ProcHandle,pResPtr); 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(DSP_FAILED(status)) 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1557b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP4 (dbg, "DSPProcessor_UnReserveMemory() failed - error 0x%x", (int)status); 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* FreeResources () method is used to allocate the memory using DMM. 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface - Component identification number 1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone Success 1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware Hardware Error 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE FreeResources (LCML_DSP_INTERFACE *hInterface) 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *codec; 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1577b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 ((struct OMX_TI_Debug)(((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg), "%d :: LCML:: FreeResources\n",__LINE__); 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(hInterface->dspCodec != NULL) 1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 158069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(hInterface->dspCodec); 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hInterface->dspCodec = NULL; 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin codec = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE*)hInterface->pCodecinterfacehandle)->pCodec); 1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(codec != NULL) 1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin { 1586b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_destroy(&codec->m_isStopped_mutex); 1587757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_lock(&codec->mutex); 1588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 ((struct OMX_TI_Debug)(((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg), "%d :: LCML:: FreeResources\n",__LINE__); 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(codec->g_aNotificationObjects[0]!= NULL) 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 159269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(codec->g_aNotificationObjects[0]); 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin codec->g_aNotificationObjects[0] = NULL; 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __ERROR_PROPAGATION__ 1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(codec->g_aNotificationObjects[1]!= NULL) 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 159769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(codec->g_aNotificationObjects[1]); 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin codec->g_aNotificationObjects[1] = NULL; 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(codec->g_aNotificationObjects[2]!= NULL) 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 160269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(codec->g_aNotificationObjects[2]); 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin codec->g_aNotificationObjects[2] = NULL; 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 160569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan #endif 1606b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_DBG_CLOSE((struct OMX_TI_Debug )(((LCML_CODEC_INTERFACE*)hInterface->pCodecinterfacehandle)->dbg)); 160769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(((LCML_CODEC_INTERFACE*)hInterface->pCodecinterfacehandle)); 1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin hInterface->pCodecinterfacehandle = NULL; 1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1610757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_unlock(&codec->mutex); 1611757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_destroy (&codec->mutex); 1612757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan LCML_FREE(codec); 1613757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan codec = NULL; 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* DeleteDspResource () method is used to allocate the memory using DMM. 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param hInterface Component identification number 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone Success 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* OMX_ErrorHardware Hardware Error 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE DeleteDspResource(LCML_DSP_INTERFACE *hInterface) 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status; 1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS nExit; 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_NODEATTR nodeAttr; 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 dllinfo; 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *codec; 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Get current state of node, if it is running, then only terminate it */ 1636b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_GetAttr(hInterface->dspCodec->hNode, &nodeAttr, sizeof(nodeAttr)); 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "DeInit: Error in Node GetAtt ", EXIT); 1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Terminate(hInterface->dspCodec->hNode, &nExit); 1640b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg, "%d :: LCML:: Node Has Been Terminated --1\n",__LINE__); 1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin codec = (LCML_DSP_INTERFACE *)(((LCML_CODEC_INTERFACE*)hInterface->pCodecinterfacehandle)->pCodec); 1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(codec->g_aNotificationObjects[0]!= NULL) 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __ERROR_PROPAGATION__ 1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(codec->g_aNotificationObjects[1]!= NULL) 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* status = DSPNode_RegisterNotify(hInterface->dspCodec->hProc, 0, DSP_SIGNALEVENT, codec->g_aNotificationObjects[1]); 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT(status, "DSP node de-register notify", EXIT);*/ 1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hInterface->dspCodec->DeviceInfo.TypeofDevice == 1) { 1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* delete DASF node */ 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_Delete(hInterface->dspCodec->hDasfNode); 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "DeInit: DASF Node Delete ", EXIT); 1656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg, "%d :: Deleted the DASF node Successfully\n",__LINE__); 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* delete SN */ 1659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong status = DSPNode_Delete(hInterface->dspCodec->hNode); 1660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DSP_ERROR_EXIT (status, "DeInit: Codec Node Delete ", EXIT); 1661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg, "%d :: Deleted the node Successfully\n",__LINE__); 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg, "%d :: Entering UnLoadDLLs \n", __LINE__); 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for(dllinfo=0;dllinfo < hInterface->dspCodec->NodeInfo.nNumOfDLLs ;dllinfo++) 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1666b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)hInterface->pCodecinterfacehandle)->dbg, "%d :: Register Component Node\n",hInterface->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType); 1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPManager_UnregisterObject ((struct DSP_UUID *) hInterface->dspCodec->NodeInfo.AllUUIDs[dllinfo].uuid, 1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hInterface->dspCodec->NodeInfo.AllUUIDs[dllinfo].eDllType); 1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*DSP_ERROR_EXIT (status, "Unregister DSP Object, Socket UUID ", EXIT);*/ 1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* detach processor from gpp */ 1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPProcessor_Detach(hInterface->dspCodec->hProc); 1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "DeInit: DSP Processor Detach ", EXIT); 1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DspManager_Close(0, NULL); 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_ERROR_EXIT (status, "DeInit: DSPManager Close ", EXIT); 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** ======================================================================== 1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This is the function run in the message thread. It waits for an event 1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* signal from Bridge and then reads all available messages. 1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param[in] arg Unused - Required by pthreads API 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @retval OMX_ErrorNone Success, ready to roll 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin** ==========================================================================*/ 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid* MessagingThread(void* arg) 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* OMX_ERRORTYPE eError = OMX_ErrorUndefined; */ 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSP_STATUS status = DSP_SOK; 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_MSG msg = {0,0,0}; 1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin unsigned int index=0; 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_MESSAGINGTHREAD_STATE threadState = EMessagingThreadCodecStopped; 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int waitForEventsTimeout = 1000; 17019c3bf945ed7dc41aa31131051b1690d5c80996f3James Dong 17029c3bf945ed7dc41aa31131051b1690d5c80996f3James Dong // There is no need to set a timeout value for message retrieval. 17039c3bf945ed7dc41aa31131051b1690d5c80996f3James Dong // Just in case that we need to change it to a different value 17049c3bf945ed7dc41aa31131051b1690d5c80996f3James Dong // such as 10 ms? 17059c3bf945ed7dc41aa31131051b1690d5c80996f3James Dong const int getMessageTimeout = 0; 1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 17075807caa34823ecb34460de67103205d61669edccAndreas Huber#ifdef ANDROID 17085807caa34823ecb34460de67103205d61669edccAndreas Huber prctl(PR_SET_NAME, (unsigned long)"Messaging", 0, 0, 0); 17095807caa34823ecb34460de67103205d61669edccAndreas Huber#endif 17105807caa34823ecb34460de67103205d61669edccAndreas Huber 1711b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Inside the Messaging thread\n"); 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1713b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_DSP_INTERFACE *)arg)->pPERFcomp = 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Create(PERF_FOURCC('C','M','L','T'), 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleAudioDecode | PERF_ModuleAudioEncode | 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleVideoDecode | PERF_ModuleVideoEncode | 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleImageDecode | PERF_ModuleImageEncode | 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1720b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (((LCML_DSP_INTERFACE *)arg)->ReUseMap) 1721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1722b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_lock(&((LCML_DSP_INTERFACE *)arg)->m_isStopped_mutex); 1723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* get message from DSP */ 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (((LCML_DSP_INTERFACE *)arg)->pshutdownFlag == 1) 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1730b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Breaking out of loop inmessaging thread \n"); 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (threadState == EMessagingThreadCodecRunning) { 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin waitForEventsTimeout = 10000; 1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1737b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* set the timeouts lower when the codec is stopped so that thread deletion response will be faster */ 1738b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (threadState == EMessagingThreadCodecStopped) { 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin waitForEventsTimeout = 10; 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1742b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __ERROR_PROPAGATION__ 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPManager_WaitForEvents(((LCML_DSP_INTERFACE *)arg)->g_aNotificationObjects, 3, &index, waitForEventsTimeout); 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPManager_WaitForEvents(((LCML_DSP_INTERFACE *)arg)->g_aNotificationObjects, 1, &index, waitForEventsTimeout); 1746b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (DSP_SUCCEEDED(status)) 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "GOT notofication FROM DSP HANDLE IT \n"); 1750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __ERROR_PROPAGATION__ 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (index == 0){ 1752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Pull all available messages out of the message loop */ 1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (DSP_SUCCEEDED(status)) 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* since there is a message waiting, grab it and pass */ 1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = DSPNode_GetMessage(((LCML_DSP_INTERFACE *)arg)->dspCodec->hNode, &msg, getMessageTimeout); 1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (DSP_SUCCEEDED(status)) 1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_U32 streamId = (msg.dwCmd & 0x000000ff); 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int commandId = msg.dwCmd & 0xffffff00; 1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TMMCodecBufferType bufType ;/* = EMMCodecScratchBuffer; */ 1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TUsnCodecEvent event = EMMCodecInternalError; 1764b65f253fdc60f6208a54911bee793d225f23cdf8James Dong void * args[10] = {}; 1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TArmDspCommunicationStruct *tmpDspStructAddress = NULL; 1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *hDSPInterface = ((LCML_DSP_INTERFACE *)arg) ; 1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DMM_BUFFER_OBJ* pDmmBuf = NULL; 1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1769b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1770b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE FROM DSP HANDLE IT %d \n", index); 1771b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1772b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "msg = 0x%lx arg1 = 0x%lx arg2 = 0x%lx", msg.dwCmd, msg.dwArg1, msg.dwArg2); 1773b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1774b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Message EMMCodecOuputBuffer outside loop"); 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedCommand(hDSPInterface->pPERFcomp, 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, msg.dwArg1, 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode); 1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (commandId == USN_DSPMSG_BUFF_FREE ) 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1783b65f253fdc60f6208a54911bee793d225f23cdf8James Dong threadState = EMessagingThreadCodecRunning; 1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #ifdef __PERF_INSTRUMENTATION__ 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args [1], 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args [8], 1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1790b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&hDSPInterface->mutex); 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(streamId % 2)) 1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i = 0; 1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int j = 0; 1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bufType = streamId + EMMCodecStream0; 1797b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1798b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Address Arminputstorage %p \n", ((LCML_DSP_INTERFACE *)arg)->Arminputstorage); 1799b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1800b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Address dspinterface %p \n", ((LCML_DSP_INTERFACE *)arg)); 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufinputcount = hDSPInterface->iBufinputcount % QUEUE_SIZE; 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufinputcount; 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->Arminputstorage[i] != NULL && hDSPInterface ->Arminputstorage[i]->iArmArg == msg.dwArg1) 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1808b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "InputBuffer loop"); 1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = ((LCML_DSP_INTERFACE *)arg)->Arminputstorage[i] ; 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Arminputstorage[i] =NULL; 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->InDmmBuffer; 1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->BufInindex); 1813b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Address output matching index= %ld \n ",tmpDspStructAddress->BufInindex); 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 1818b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Message EMMCodecInputBuffer loop"); 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (streamId % 2) 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i = 0; 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int j = 0; 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bufType = streamId + EMMCodecStream0;; 1826b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Address Armoutputstorage %p \n ",((LCML_DSP_INTERFACE *)arg)->Armoutputstorage); 1827b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Address dspinterface %p \n ",((LCML_DSP_INTERFACE *)arg)); 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufoutputcount = hDSPInterface->iBufoutputcount % QUEUE_SIZE; 1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufoutputcount; 1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if( hDSPInterface ->Armoutputstorage[i] != NULL 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin && hDSPInterface ->Armoutputstorage[i]->iArmArg == msg.dwArg1) 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1836b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "output buffer loop"); 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Armoutputstorage[i] ; 1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface ->Armoutputstorage[i] =NULL; 1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->OutDmmBuffer; 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->Bufoutindex); 1841b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1842b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Address output matching index= %ld\n ",tmpDspStructAddress->Bufoutindex); 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 1847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1848b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "Message EMMCodecOuputBuffer loop"); 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress != NULL) 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *tmp2 = NULL; 1855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 18562ad894174d9c4b5025abc04321fb051284a228deJames Dong status = DSPProcessor_InvalidateMemory(hDSPInterface->dspCodec->hProc, 18572ad894174d9c4b5025abc04321fb051284a228deJames Dong tmpDspStructAddress, sizeof(TArmDspCommunicationStruct)); 18582ad894174d9c4b5025abc04321fb051284a228deJames Dong if (DSP_FAILED(status)) { 1859a0a88cf291e156344d5346c29824d996d1d81fabSteve Block ALOGE("Invalidate for communication structure failed. status = 0x%x\n", status); 18602ad894174d9c4b5025abc04321fb051284a228deJames Dong } 186108cf2e801dc7ec4f950a3f1245b21ff2b23d6b79James Dong 18622ad894174d9c4b5025abc04321fb051284a228deJames Dong // Only invalidate the memory when the pointer points to some valid memory region 18632ad894174d9c4b5025abc04321fb051284a228deJames Dong // otherwise, we will get logging spam 18642ad894174d9c4b5025abc04321fb051284a228deJames Dong if (tmpDspStructAddress->iArmParamArg != NULL && tmpDspStructAddress->iParamSize > 0) { 18652ad894174d9c4b5025abc04321fb051284a228deJames Dong status = DSPProcessor_InvalidateMemory(hDSPInterface->dspCodec->hProc, 18662ad894174d9c4b5025abc04321fb051284a228deJames Dong tmpDspStructAddress->iArmParamArg, tmpDspStructAddress->iParamSize); 18672ad894174d9c4b5025abc04321fb051284a228deJames Dong if (DSP_FAILED(status)) { 1868a0a88cf291e156344d5346c29824d996d1d81fabSteve Block ALOGE("Invalidate for arm parameter arguments failed. status = 0x%x\n", status); 18692ad894174d9c4b5025abc04321fb051284a228deJames Dong } 18702ad894174d9c4b5025abc04321fb051284a228deJames Dong } 187108cf2e801dc7ec4f950a3f1245b21ff2b23d6b79James Dong 1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) bufType; 1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; /* arm address fpr buffer */ 1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; /* arm address for param */ 1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; /* user arguments */ 1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (((LCML_DSP_INTERFACE *)arg)->bUsnEos) { 1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((OMX_BUFFERHEADERTYPE*)args[7])->nFlags |= tmpDspStructAddress->iEOSFlag; 1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* USN updates*/ 1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* managing buffers and free buffer logic */ 1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1889b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1890b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecBufferProcessed and now unmapping buffer type %p \n", args[2]); 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress ->iBufferPtr != (OMX_U32)NULL) 1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1894b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1895b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecBufferProcessed and now unmapping buufer %lx\n size=%ld", 1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress ->iBufferPtr, tmpDspStructAddress ->iBufferSize); 1897b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 1898b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 1899b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1900b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 1901b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 1902b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 1903b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1908b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1909b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecBufferProcessed and now unmapping parameter buufer\n"); 1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 1913b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1916b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1917b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecBufferProcessed and now unmapping structure =0x%p\n",tmpDspStructAddress ); 1918b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (char *)tmpDspStructAddress; 1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (tmp2 - 128); 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmp2) 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 192369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* free(tmpDspStructAddress); */ 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&hDSPInterface->mutex); 1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* End of USN_DSPMSG_BUFF_FREE */ 1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (commandId == USN_DSPACK_STOP) 1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1935b65f253fdc60f6208a54911bee793d225f23cdf8James Dong threadState = EMessagingThreadCodecStopped; 1936b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Start of USN_DSPACK_STOP */ 1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i = 0; 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int j = 0; 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int k = 0; 1941b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1942b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecProcessingStoped \n"); 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&hDSPInterface->mutex); 1944b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1945b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLSTOP: hDSPInterface->dspCodec->DeviceInfo.TypeofDevice %d\n", hDSPInterface->dspCodec->DeviceInfo.TypeofDevice); 1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->dspCodec->DeviceInfo.TypeofDevice == 0) 1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufinputcount = hDSPInterface->iBufinputcount % QUEUE_SIZE; 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufinputcount; 1951b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufoutputcount = hDSPInterface->iBufoutputcount % QUEUE_SIZE; 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin k = hDSPInterface->iBufoutputcount; 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1957b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1958b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLSTOP: %d hDSPInterface->Arminputstorage[i] = %p\n", i, hDSPInterface->Arminputstorage[i]); 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->Arminputstorage[i] != NULL) 1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *tmp2 = NULL; 1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* callback the component with the buffers that are being freed */ 1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Arminputstorage[i] ; 1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->InDmmBuffer; 1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->BufInindex); 1967b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1968b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "pDmmBuf->pMapped %p\n", pDmmBuf->pMapped); 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecInputBuffer; 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; /* arm address fpr buffer */ 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; /* arm address for param */ 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 1977b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; /* handle */ 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; /* user arguments */ 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* USN updates*/ 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 1983b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLSTOP: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 1984b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 1985b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 1986b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iBufferPtr != (OMX_U32)NULL) 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1989b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 1990b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 1991b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 1992b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 1993b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 1994b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2001b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2003b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2005b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (NULL != tmpDspStructAddress) 2006b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong tmp2 = (char*)tmpDspStructAddress; 2008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong tmp2 = ( tmp2 - 128); 2009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmp2) 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 201469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Arminputstorage[i] = NULL; 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args [1], 2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args [2], 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2028b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2029b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2030b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLSTOP: %d hDSPInterface->Armoutputstorage[k] = %p\n", k, hDSPInterface->Armoutputstorage[k]); 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->Armoutputstorage[k] != NULL) 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char * tmp2 = NULL; 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Armoutputstorage[k] ; 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->OutDmmBuffer; 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->Bufoutindex); 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecOuputBuffer; 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; /* arm address fpr buffer */ 2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; /* arm address for param */ 2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 2046b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; /* handle */ 2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; /* user arguments */ 2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* USN updates*/ 2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2050b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2051b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLSTOP: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 2052b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 2053b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 2054b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress ->iBufferPtr != (OMX_U32)NULL) 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2058b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress ->iBufferPtr is not NULL\n"); 2059b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 2060b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2061b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 2062b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 2063b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2064b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2069b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2070b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress->iParamPtr is not NULL\n"); 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2073b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2075b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (char *) tmpDspStructAddress; 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = ( tmp2 - 128); 2079b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2080b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(tmp2) 2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 208369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress->iBufSizeUsed = 0; 2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Armoutputstorage[k] = NULL; 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1], 2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args[2], 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin k++; 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin k = k % QUEUE_SIZE; 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&hDSPInterface->mutex); 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecProcessingStoped; 2109b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* end of USN_DSPACK_STOP */ 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (commandId == USN_DSPACK_PAUSE) 2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2113b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecProcessingPaused; 2115b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2116b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecProcessingPaused \n"); 2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (commandId == USN_DSPMSG_EVENT) 2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2121b65f253fdc60f6208a54911bee793d225f23cdf8James Dong threadState = EMessagingThreadCodecStopped; 2122b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecDspError; 2124b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2125b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "GOT MESSAGE EMMCodecDspError \n"); 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) msg.dwCmd; 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) msg.dwArg1; 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) msg.dwArg2; 2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (commandId == USN_DSPACK_ALGCTRL) 2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2133b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i; 2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecAlgCtrlAck; 2136757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_lock(&hDSPInterface->mutex); 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = ((LCML_DSP_INTERFACE *)arg)->pAlgcntlDmmBuf[i]; 2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pDmmBuf) && 2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((LCML_DSP_INTERFACE *)arg)->algcntlmapped[i]) && 2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pDmmBuf->pMapped == (void *)msg.dwArg2)) 2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2144b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2145b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 214669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(pDmmBuf); 2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = NULL; 2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->algcntlmapped[i] = 0; 2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->pAlgcntlDmmBuf[i] = NULL; 2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) msg.dwArg1; 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2155b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "GOT MESSAGE USN_DSPACK_ALGCTRL \n"); 2156757630763c2efcdb23925cd6413f2e36d46123beAnu Sundararajan pthread_mutex_unlock(&hDSPInterface->mutex); 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (commandId == USN_DSPACK_STRMCTRL) 2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2160b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i = 0; 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int j = 0; 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int ackType = 0; 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&hDSPInterface->mutex); 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->flush_pending[0] && (streamId == 0) && (msg.dwArg1 == USN_ERR_NONE)) 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->flush_pending[0] = 0; 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ackType = USN_STRMCMD_FLUSH; 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufinputcount = hDSPInterface->iBufinputcount % QUEUE_SIZE; 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufinputcount; 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2174b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2175b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: %d hDSPInterface->Arminputstorage[i] = %p\n", i, hDSPInterface->Arminputstorage[i]); 2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->Arminputstorage[i] != NULL) 2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *tmp2 = NULL; 2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Arminputstorage[i] ; 2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->InDmmBuffer; 2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->BufInindex); 2183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2184b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "pDmmBuf->pMapped %p\n", pDmmBuf->pMapped); 2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecInputBuffer; 2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; 2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; 2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 2193b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; 2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; 2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2199b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 2200b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 2201b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 2202b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 2203b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iBufferPtr != (OMX_U32)NULL) 2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 2207b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 2208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2209b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 2210b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 2211b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, 2212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2213b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2220b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, 2221b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2223b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2224b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2226b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (NULL != tmpDspStructAddress) 2227b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2228b65f253fdc60f6208a54911bee793d225f23cdf8James Dong tmp2 = (char*)tmpDspStructAddress; 2229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong tmp2 = ( tmp2 - 128); 2230b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2231b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2232b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmp2) 2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 223569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Arminputstorage[i] = NULL; 2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args [1], 2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args [2], 2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i]; 2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pDmmBuf) && 2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i]) && 2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pDmmBuf->pMapped == (void *)msg.dwArg2)) 2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2259b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2260b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 226169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(pDmmBuf); 2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = NULL; 2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i] = 0; 2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i] = NULL; 2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (hDSPInterface->flush_pending[1] && (streamId == 1) && (msg.dwArg1 == USN_ERR_NONE)) 2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->flush_pending[1] = 0; 2272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ackType = USN_STRMCMD_FLUSH; 2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufoutputcount = hDSPInterface->iBufoutputcount % QUEUE_SIZE; 2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufoutputcount; 2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2278b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2279b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: %d hDSPInterface->Armoutputstorage[i] = %p\n", i, hDSPInterface->Armoutputstorage[i]); 2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->Armoutputstorage[i] != NULL) 2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char * tmp2 = NULL; 2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Armoutputstorage[i] ; 2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->OutDmmBuffer; 2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->Bufoutindex); 2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecOuputBuffer; 2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; 2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; 2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 2295b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; 2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; 2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2299b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2300b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 2301b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 2302b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 2303b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress ->iBufferPtr != (OMX_U32)NULL) 2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2306b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 2307b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2308b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress ->iBufferPtr is not NULL\n"); 2309b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 2310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2311b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 2312b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 2313b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, 2314b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2315b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2320b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2321b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress->iParamPtr is not NULL\n"); 2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2324b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, 2325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (char *) tmpDspStructAddress; 2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = ( tmp2 - 128); 2332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(tmp2) 2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 233669ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress->iBufSizeUsed = 0; 2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Armoutputstorage[i] = NULL; 2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1], 2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args[2], 2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 2354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i]; 2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pDmmBuf) && 2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i]) && 2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pDmmBuf->pMapped == (void *)msg.dwArg2)) 2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2363b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 236569ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(pDmmBuf); 2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = NULL; 2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i] = 0; 2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i] = NULL; 2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (hDSPInterface->flush_pending[2] && (streamId == 2) && (msg.dwArg1 == USN_ERR_NONE)) 2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->flush_pending[0] = 0; 2376b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ackType = USN_STRMCMD_FLUSH; 2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufinputcount = hDSPInterface->iBufinputcount % QUEUE_SIZE; 2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufinputcount; 2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2382b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2383b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH (port 2): %d hDSPInterface->Arminputstorage[i] = %p (stream ID %lu)\n", i, hDSPInterface->Arminputstorage[i], streamId); 2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((hDSPInterface->Arminputstorage[i] != NULL) && (hDSPInterface->Arminputstorage[i]->iStreamID == streamId)) 2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *tmp2 = NULL; 2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Arminputstorage[i] ; 2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->InDmmBuffer; 2390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->BufInindex); 2391b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRBUFFER2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2392b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "pDmmBuf->pMapped %p\n", pDmmBuf->pMapped); 2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecInputBuffer; 2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; 2397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 2398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; 2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 2401b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; 2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; 2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2406b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 2408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 2409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 2410b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 2411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iBufferPtr != (OMX_U32)NULL) 2412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2413b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 2414b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 2415b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2416b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 2417b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 2418b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2419b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 2423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2426b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2428b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2429b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (char*)tmpDspStructAddress; 2432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = ( tmp2 - 128); 2433b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2434b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmp2) 2436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 243769ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Arminputstorage[i] = NULL; 2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args [1], 2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args [2], 2446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 2452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 2453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2454b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (hDSPInterface->flush_pending[3] && (streamId == 3) && (msg.dwArg1 == USN_ERR_NONE)) 2456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->flush_pending[1] = 0; 2458b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ackType = USN_STRMCMD_FLUSH; 2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin j = 0; 2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->iBufoutputcount = hDSPInterface->iBufoutputcount % QUEUE_SIZE; 2461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = hDSPInterface->iBufoutputcount; 2462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(j++ < QUEUE_SIZE) 2463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2464b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2465b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: %d hDSPInterface->Armoutputstorage[i] = %p (stream id %lu)\n", i, hDSPInterface->Armoutputstorage[i], streamId); 2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((hDSPInterface->Armoutputstorage[i] != NULL) && (hDSPInterface->Armoutputstorage[i]->iStreamID == streamId)) 2467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char * tmp2 = NULL; 2469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = hDSPInterface->Armoutputstorage[i] ; 2470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = hDSPInterface ->dspCodec->OutDmmBuffer; 2472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = pDmmBuf + (tmpDspStructAddress->Bufoutindex); 2473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecBufferProcessed; 2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) EMMCodecOuputBuffer; 2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) tmpDspStructAddress->iArmbufferArg; 2477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) tmpDspStructAddress->iBufferSize; 2478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[3] = (void *) tmpDspStructAddress->iArmParamArg; 2479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = (void *) tmpDspStructAddress->iParamSize; 2480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = (void *) tmpDspStructAddress->iArmArg; 2481b65f253fdc60f6208a54911bee793d225f23cdf8James Dong args[6] = (void *) arg; 2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[7] = (void *) tmpDspStructAddress->iUsrArg; 2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2486b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "LCMLFLUSH: tmpDspStructAddress->iBufferPtr %p, tmpDspStructAddress->iParamPtr %p, msg.dwArg1 %p\n", 2487b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iBufferPtr, 2488b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)tmpDspStructAddress->iParamPtr, 2489b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void *)msg.dwArg1); 2490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress ->iBufferPtr != (OMX_U32)NULL) 2491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2492b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 2493b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2494b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress ->iBufferPtr is not NULL\n"); 2495b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (!hDSPInterface->ReUseMap) 2496b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2497b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, 2498b65f253fdc60f6208a54911bee793d225f23cdf8James Dong (void*)tmpDspStructAddress->iBufferPtr, 2499b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->bufReserved, 2500b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2501b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (tmpDspStructAddress->iParamPtr != (OMX_U32)NULL) 2505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2506b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2507b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "tmpDspStructAddress->iParamPtr is not NULL\n"); 2508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DmmUnMap(hDSPInterface ->dspCodec->hProc, 2509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (void*)tmpDspStructAddress->iParamPtr, 2510b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pDmmBuf->paramReserved, 2511b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2513b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2514b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 2515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = (char *) tmpDspStructAddress; 2517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = ( tmp2 - 128); 2518b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, 2519b65f253fdc60f6208a54911bee793d225f23cdf8James Dong "%d :: LCML:: FreeResources\n",__LINE__); 2520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(tmp2) 2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 252269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(tmp2); 2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmp2 = NULL; 2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress->iBufSizeUsed = 0; 2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[8] = (void *) tmpDspStructAddress->iBufSizeUsed ; 2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->Armoutputstorage[i] = NULL; 2529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tmpDspStructAddress = NULL; 2530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_XferingBuffer(hDSPInterface->pPERFcomp, 2532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1], 2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) args[2], 2534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleSocketNode, 2535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i++; 2540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin i = i % QUEUE_SIZE; 2541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (ackType != USN_STRMCMD_FLUSH) { 2545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < QUEUE_SIZE; i++) 2546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i]; 2548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pDmmBuf) && 2549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i]) && 2550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pDmmBuf->pMapped == (void *)msg.dwArg2)) 2551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2552b65f253fdc60f6208a54911bee793d225f23cdf8James Dong DmmUnMap(hDSPInterface->dspCodec->hProc, pDmmBuf->pMapped, pDmmBuf->pReserved, 2553b65f253fdc60f6208a54911bee793d225f23cdf8James Dong ((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg); 255469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan LCML_FREE(pDmmBuf); 2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pDmmBuf = NULL; 2556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->strmcntlmapped[i] = 0; 2557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((LCML_DSP_INTERFACE *)arg)->pStrmcntlDmmBuf[i] = NULL; 2558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&hDSPInterface->mutex); 2563b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecStrmCtrlAck; 2565b65f253fdc60f6208a54911bee793d225f23cdf8James Dong bufType = streamId + EMMCodecStream0; 2566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) msg.dwArg1; /* SN error status */ 2567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) ackType; /* acknowledge Id */ 2568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) bufType; /* port Id */ 2569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2570b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "GOT MESSAGE USN_DSPACK_STRMCTRL \n"); 2571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin event = EMMCodecDspMessageRecieved; 2575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = (void *) msg.dwCmd; 2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[1] = (void *) msg.dwArg1; 2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[2] = (void *) msg.dwArg2; 2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "GOT MESSAGE EMMCodecDspMessageRecieved \n"); 2580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* call callback */ 2583b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "calling callback in application %p \n",((LCML_DSP_INTERFACE *)arg)->dspCodec); 2584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(hDSPInterface->pPERFcomp, 2586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwCmd, 2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin msg.dwArg1, 2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }/* end of internal if(DSP_SUCCEEDED(status)) */ 2593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2595b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "%d :: DSPManager_getmessage() failed: 0x%lx",__LINE__, status); 2596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }/* end of internal while loop*/ 2599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __ERROR_PROPAGATION__ 2600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong }/*end of if(index == 0)*/ 2601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (index == 1){ 2602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_PROCESSORSTATE procState; 2604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSPProcessor_GetState(((LCML_DSP_INTERFACE *)arg)->dspCodec->hProc, &procState, sizeof(procState)); 2605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 2607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwErrMask = %0x \n",procState.errInfo.dwErrMask); 2608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal1 = %0x \n",procState.errInfo.dwVal1); 2609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal2 = %0x \n",procState.errInfo.dwVal2); 2610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal3 = %0x \n",procState.errInfo.dwVal3); 2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, "MMU Fault Error.\n"); 2612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 2613b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TUsnCodecEvent event = EMMCodecDspError; 2615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * args[10]; 2616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *hDSPInterface = ((LCML_DSP_INTERFACE *)arg) ; 2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = NULL; 2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = NULL; 2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = NULL; 2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2622b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (index == 2){ 2625b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct DSP_PROCESSORSTATE procState; 2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin DSPProcessor_GetState(((LCML_DSP_INTERFACE *)arg)->dspCodec->hProc, &procState, sizeof(procState)); 2628b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* 2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwErrMask = %0x \n",procState.errInfo.dwErrMask); 2631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal1 = %0x \n",procState.errInfo.dwVal1); 2632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal2 = %0x \n",procState.errInfo.dwVal2); 2633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, " dwVal3 = %0x \n",procState.errInfo.dwVal3); 2634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fprintf(stdout, "SYS_ERROR Error.\n"); 2635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 2636b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin TUsnCodecEvent event = EMMCodecDspError; 2638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * args[10]; 2639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *hDSPInterface = ((LCML_DSP_INTERFACE *)arg) ; 2640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[0] = NULL; 2641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[4] = NULL; 2642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[5] = NULL; 2643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin args[6] = (void *) arg; /* handle */ 2644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin hDSPInterface->dspCodec->Callbacks.LCML_Callback(event,args); 2645b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 2646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2647b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif 2648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* end of external if(DSP_SUCCEEDED(status)) */ 2649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else 2650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2651b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRDSP2 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "%d :: DSPManager_WaitForEvents() failed: 0x%lx",__LINE__, status); 2652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* end of external while(1) loop */ 2655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* 720p implementation */ 2657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (((LCML_DSP_INTERFACE *)arg)->ReUseMap) 2658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong { 2659b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pthread_mutex_unlock(&((LCML_DSP_INTERFACE *)arg)->m_isStopped_mutex); 2660b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2661b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1 (((LCML_CODEC_INTERFACE *)((LCML_DSP_INTERFACE *)arg)->pCodecinterfacehandle)->dbg, "Exiting LOOP of LCML \n"); 2662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(((LCML_DSP_INTERFACE *)arg)->pPERFcomp); 2664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return (void*)OMX_ErrorNone; 2666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 266869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 266969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajanstatic int append_dsp_path(char * dll64p_name, char *absDLLname) 2670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 267169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan int len = 0; 2672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *dsp_path = NULL; 2673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!(dsp_path = getenv("DSP_PATH"))) 2674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMXDBG_PRINT(stderr, PRINT, 2, OMX_DBG_BASEMASK, "DSP_PATH Environment variable not set using /system/lib/dsp default"); 2676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dsp_path = "/system/lib/dsp"; 2677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 267869ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan len = strlen(dsp_path) + strlen("/") + strlen(dll64p_name) + 1 /* null terminator */; 267969ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan if (len >= ABS_DLL_NAME_LENGTH) return -1; 268069ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan 268169ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan strcpy(absDLLname,dsp_path); 268269ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan strcat(absDLLname,"/"); 268369ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan strcat(absDLLname,dll64p_name); 268469ee5a12119752a668f27361d6bccb4d8bfee3f0Anu Sundararajan return 0; 2685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2686