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