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/* ==============================================================================
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *             Texas Instruments OMAP (TM) Platform Software
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Use of this software is controlled by the terms and conditions found
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  in the license agreement under which this software has been supplied.
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * ============================================================================ */
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @file OMX_WmaDecoder.c
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements OMX Component for WMA decoder that
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * is fully compliant with the OMX Audio specification 1.5.
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path  $(CSLPATH)\
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev  0.1
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----------------------------------------------------------------------------
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *!
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! ===================================
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 12-Sept-2005 mf:  Initial Version. Change required per OMAPSWxxxxxxxxx
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! to provide _________________.
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *!
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * ============================================================================= */
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches -------------------------*/
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  INCLUDE FILES
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------program files ----------------------------------------*/
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_WmaDec_Utils.h"
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* interface with audio manager */
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinAM_COMMANDDATATYPE cmd_data;
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint fdwrite, fdread;
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint errno;
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 streamID;
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define WMA_DEC_ROLE "audio_decoder.wma"
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  EXTERNAL REFERENCES NOTE : only use if not found in header file
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  PUBLIC DECLARATIONS Defined here, used elsewhere
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  PRIVATE DECLARATIONS Defined here, used only here
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations -----------------------------------*/
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp,
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData);
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING pComponentName,
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID);
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand,
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam, OMX_PTR pCmdData);
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex,
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_PTR ComponentParamStruct);
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParamStruct);
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR pComponentConfigStructure);
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup);
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle);
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes);
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_HANDLETYPE hComponent,
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_HANDLETYPE hComponent,
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer);
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_HANDLETYPE hComponent,
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_STRING cParameterName,
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_INDEXTYPE* pIndexType);
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_HANDLETYPE hComponent,
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex);
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ComponentInit() Set the all the function pointers of component
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update the component function pointer to the handle
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_ErrorInsufficientResources If the malloc fails
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip = NULL, *pPortDef_op = NULL;
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_WMATYPE *wma_ip = NULL;
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *wma_op = NULL;
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    RCA_HEADER *rcaheader=NULL;
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d ::OMX_ComponentInit\n", __LINE__);
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Set the all component function pointer to the handle */
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetCallbacks = SetCallbacks;
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetComponentVersion = GetComponentVersion;
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SendCommand = SendCommand;
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetParameter = GetParameter;
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetParameter = SetParameter;
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetConfig = GetConfig;
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetState = GetState;
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->EmptyThisBuffer = EmptyThisBuffer;
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FillThisBuffer = FillThisBuffer;
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentTunnelRequest = ComponentTunnelRequest;
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentDeInit = ComponentDeInit;
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->AllocateBuffer = AllocateBuffer;
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FreeBuffer = FreeBuffer;
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->UseBuffer = UseBuffer;
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetConfig = SetConfig;
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetExtensionIndex = GetExtensionIndex;
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentRoleEnum = ComponentRoleEnum;
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Allocate the memory for Component private data area */
219b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pHandle->pComponentPrivate, WMADEC_COMPONENT_PRIVATE);
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize component data structures to default values */
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->sPortParam.nPorts = 0x2;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->sPortParam.nStartPortNumber = 0x0;
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNone;
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
228b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(wma_ip, OMX_AUDIO_PARAM_WMATYPE);
229b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(wma_op, OMX_AUDIO_PARAM_PCMMODETYPE);
230b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(rcaheader, RCA_HEADER);
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->wma_op=wma_op;
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->rcaheader=rcaheader;
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->wmaParams[INPUT_PORT] = wma_ip;
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->wmaParams[OUTPUT_PORT] = (OMX_AUDIO_PARAM_WMATYPE*)wma_op;
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = pHandle->pComponentPrivate;
240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pComponentPrivate->pInputBufferList, BUFFERLIST);
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_WMADEC");
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n", __LINE__);
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('W','M','A','_'),
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           PERF_ModuleLLMM |
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           PERF_ModuleAudioDecode);
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef ANDROID
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iIsOMXComponentMultiThreaded = OMX_TRUE;
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentNeedsNALStartCode = OMX_FALSE;
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalOutputBufferAlloc = OMX_FALSE;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsExternalInputBufferAlloc = OMX_FALSE;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsMovableInputBuffers = OMX_FALSE;
256b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate->iPVCapabilityFlags.iOMXComponentSupportsPartialFrames = OMX_FALSE;
257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate->iPVCapabilityFlags.iOMXComponentCanHandleIncompleteFrames = OMX_FALSE;
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pInputBufferList->numBuffers = 0; /* initialize number of buffers */
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
262b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pComponentPrivate->pOutputBufferList, BUFFERLIST);
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pOutputBufferList->numBuffers = 0; /* initialize number of buffers */
265b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pComponentPrivate->pHeaderInfo, WMA_HeadInfo);
266b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pComponentPrivate->pDspDefinition, TI_OMX_DSP_DEFINITION);
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Temporarily treat these as default values for Khronos tests */
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iPackets.dwLo           =   178 ;
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iPlayDuration.dwHi      =   0   ;
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iPlayDuration.dwLo      =   917760000 ;
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iMaxPacketSize          =   349 ;
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data1       =   -127295936 ;
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data2       =   23373 ;
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data3       =   4559 ;
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[0]    =   168 ;
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[1]    =   253 ;
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[2]    =   0   ;
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[3]    =   128 ;
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[4]    =   95  ;
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[5]    =   92  ;
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[6]    =   68  ;
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamType.Data4[7]    =   43  ;
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iTypeSpecific           =   28  ;
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iStreamNum              =   1   ;
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iFormatTag              =   353 ;
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iBlockAlign             =   40  ;
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iSamplePerSec           =   8000;
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iAvgBytesPerSec         =   625 ;
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iChannel                =   1   ;
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iValidBitsPerSample     =   16  ;
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iSizeWaveHeader         =   10  ;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iEncodeOptV             =   0   ;
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iValidBitsPerSample     =   16  ;
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iChannelMask            =   0   ;
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHeaderInfo->iSamplePerBlock         =   8704;
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bConfigData = 0;  /* assume the first buffer received will contain only config data, need to use bufferFlag instead */
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->reconfigInputPort = 0;
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->reconfigOutputPort = 0;
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < MAX_NUM_OF_BUFS; i++) {
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL;
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL;
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->dasfmode = 0;
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 0;
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkBuf = NULL;
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = NULL;
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyBufferDoneCount = 0;
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount = 0;
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bDisableCommandParam = 0;
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bEnableCommandParam = 0;
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers=0;
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers = 0;
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->SendAfterEOS = 0;
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bFlushOutputPortCommandPending = OMX_FALSE;
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bFlushInputPortCommandPending = OMX_FALSE;
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i=0; i < MAX_NUM_OF_BUFS; i++) {
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufHdrPending[i] = NULL;
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufHdrPending[i] = NULL;
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nInvalidFrameCount = 0;
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nNumInputBufPending = 0;
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nNumOutputBufPending = 0;
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bDisableCommandPending = 0;
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bEnableCommandPending = 0;
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bBypassDSP = OMX_FALSE;
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bNoIdleOnStop= OMX_FALSE;
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIdleCommandPending = OMX_FALSE;
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutStandingFillDones = 0;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.eEncoding = OMX_AUDIO_CodingWMA;
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.nIndex = 0;
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sInPortFormat.nPortIndex = INPUT_PORT;
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.eEncoding = OMX_AUDIO_CodingPCM;  /*chrisk*/
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.nIndex = 1;
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->sOutPortFormat.nPortIndex = OUTPUT_PORT;
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
351b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE(pComponentPrivate->sDeviceString, 100*sizeof(OMX_STRING), OMX_STRING);
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* PCM format defaults */
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->nPortIndex = 1;
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->nChannels = 2;
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->eNumData= OMX_NumericalDataSigned;
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->nBitPerSample = 16;
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->nSamplingRate = 44100;
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_op->ePCMMode = OMX_AUDIO_PCMModeLinear;
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* WMA format defaults */
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_ip->nPortIndex = 0;
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_ip->nChannels = 2;
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_ip->nBitRate = 32000;
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    wma_ip->nSamplingRate = 44100;
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* initialize role name */
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char *) pComponentPrivate->componentRole.cRole, WMA_DEC_ROLE);
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Initialize device string to the default value */
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char*)pComponentPrivate->sDeviceString,"/eteedn:i0:o0/codec\0");
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Removing sleep() calls. Initialization.*/
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL);
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL);
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL);
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL);
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL);
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL);
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->codecStop_mutex, NULL);
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->codecStop_threshold, NULL);
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->codecStop_waitingsignal = 0;
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->codecFlush_mutex, NULL);
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->codecFlush_threshold, NULL);
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->codecFlush_waitingsignal = 0;
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->AlloBuf_event));
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InLoaded_event));
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CreateEvent(&(pComponentPrivate->InIdle_event));
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Removing sleep() calls. Initialization.*/
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
407b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
408b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pPortDef_op,OMX_PARAM_PORTDEFINITIONTYPE );
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "%d ::pPortDef_ip = %p\n", __LINE__,pPortDef_ip);
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "%d ::pPortDef_op = %p\n", __LINE__,pPortDef_op);
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[INPUT_PORT]
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        = pPortDef_ip;
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((WMADEC_COMPONENT_PRIVATE*) pHandle->pComponentPrivate)->pPortDef[OUTPUT_PORT]
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        = pPortDef_op;
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nPortIndex = 0x0;
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountActual = NUM_WMADEC_INPUT_BUFFERS;
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferCountMin = NUM_WMADEC_INPUT_BUFFERS;
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->eDir = OMX_DirInput;
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bEnabled = OMX_TRUE;
424b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pPortDef_ip->nBufferAlignment = DSP_CACHE_ALIGNMENT;
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->nBufferSize = INPUT_WMADEC_BUFFER_SIZE;
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->bPopulated = 0;
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->eDomain = OMX_PortDomainAudio;
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_ip->format.audio.eEncoding = OMX_AUDIO_CodingWMA;
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nPortIndex = 0x1;
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountActual = NUM_WMADEC_OUTPUT_BUFFERS;
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->nBufferCountMin = NUM_WMADEC_OUTPUT_BUFFERS;
433b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pPortDef_op->nBufferAlignment = DSP_CACHE_ALIGNMENT;
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->eDir = OMX_DirOutput;
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bEnabled = OMX_TRUE;
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferSize == 0)
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDef_op->nBufferSize = OUTPUT_WMADEC_BUFFER_SIZE;
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDef_op->nBufferSize = pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferSize;
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->bPopulated = 0;
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->eDomain = OMX_PortDomainAudio;
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsInvalidState = OMX_FALSE;
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*    sPortFormat->eEncoding = OMX_AUDIO_CodingPCM; */ /*chrisk*/
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef_op->format.audio.eEncoding = OMX_AUDIO_CodingPCM;  /*chrisk*/
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: Initialize RM Proxy... \n", __LINE__);
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_NewInitalize();
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d ::Error returned from loading ResourceManagerProxy thread\n",
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__);
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d ::Start Component Thread \n", __LINE__);
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = WMADEC_StartComponentThread(pHandle);
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*OMX_PRINT1(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);*/
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d ::Error returned from the Component\n",
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__);
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((fdwrite=open(FIFO1,O_WRONLY))<0) {
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_TRACE4(pComponentPrivate->dbg, "[WMA Dec Component] - failure to open WRITE pipe\n");
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((fdread=open(FIFO2,O_RDONLY))<0) {
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_TRACE4(pComponentPrivate->dbg, "[WMA Dec Component] - failure to open READ pipe\n");
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d ::OMX_ComponentInit\n", __LINE__);
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ThreadCreated(pComponentPrivate->pPERF, pComponentPrivate->ComponentThread,
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_FOURCC('W','M','A','T'));
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, "%d ::OMX_ComponentInit - returning %d\n", __LINE__,eError);
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError == OMX_ErrorInsufficientResources)
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
500b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pPortDef_op);
501b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pPortDef_ip);
502b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->sDeviceString);
503b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pDspDefinition);
504b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pHeaderInfo);
505b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList);
506b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList);
507b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(wma_op);
508b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(wma_ip);
509b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pHandle->pComponentPrivate);
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetCallbacks() Sets application callbacks to the component
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update application callbacks
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to the component. So that component can make use of those call back
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * while sending buffers to the application. And also it will copy the
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * application private data to component memory
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent    handle for this instance of the component
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pAppData      Application private data
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent,
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pAppData)
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate =
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCallBacks == NULL) {
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Received the empty callbacks from the \
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                application\n",__LINE__);
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Copy the callbacks of the application to the component private */
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*copy the application private data to component memory */
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*               PERF_Boundary(pComponentPrivate->pPERFcomp,PERF_BoundaryComplete | PERF_BoundaryCleanup);*/
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetComponentVersion() This will return the component version
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will retrun the component version
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp               handle for this instance of the component
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentName       Name of the component
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentVersion    handle for this instance of the component
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pSpecVersion        application callbacks
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompnentUUID
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING pComponentName,
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside the GetComponentVersion\n");
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SendCommand() used to send the commands to the component
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will be used by the application.
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param phandle         handle for this instance of the component
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param Cmd             Command to be sent to the component
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParam          indicates commmad is sent using this method
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle,
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam,OMX_PTR pCmdData)
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet;
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pCompPrivate =
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCompPrivate->curState == OMX_StateInvalid){
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pCompPrivate->curState == OMX_StateInvalid){
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pCompPrivate->dbg, "%d :: WMADEC: Error Notofication Sent to App\n",__LINE__);
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler (
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle, pHandle->pApplicationPrivate,
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           OMX_EventError, OMX_ErrorInvalidState,0,
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           "Invalid State");
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pCompPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(pCompPrivate->pPERF,
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        Cmd,
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (Cmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam,
660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleComponent);
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(Cmd) {
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandStateSet:
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRSTATE2(pCompPrivate->dbg, "%d:::pCompPrivate->curState = %d\n",__LINE__,pCompPrivate->curState);
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nParam == OMX_StateLoaded) {
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivate->bLoadedCommandPending = OMX_TRUE;
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pCompPrivate->curState == OMX_StateLoaded) {
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) {
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler (
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle,
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorIncorrectStateTransition,
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   0,
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(nParam == OMX_StateInvalid) {
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->curState = OMX_StateInvalid;
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompPrivate->cbInfo.EventHandler (
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle,
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   0,
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandFlush:
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(nParam > 1 && nParam != -1) {
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortDisable:
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandPortEnable:
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_CommandMarkBuffer:
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (nParam > 0) {
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRDSP2(pCompPrivate->dbg, "%d :: WMADEC: Command Received Default \
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                      error\n",__LINE__);
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPrivate->cbInfo.EventHandler (
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle, pHandle->pApplicationPrivate,
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           OMX_EventError,
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           OMX_ErrorUndefined,0,
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           "Invalid Command");
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (Cmd == OMX_CommandMarkBuffer) {
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1],&pCmdData,sizeof(OMX_PTR));
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &nParam,
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     sizeof(OMX_U32));
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT2(pCompPrivate->dbg, "%d:::nRet = %d\n",__LINE__,nRet);
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pCompPrivate->dbg, "%d:::Inside SendCommand\n",__LINE__);
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetParameter() Gets the current configurations of the component
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParamIndex
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentParameterStructure
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp,
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure)
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE  *pComponentPrivate;
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure;
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*OMX_PARAM_BUFFERSUPPLIERTYPE *pBufferSupplier;*/
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure;
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pParameterStructure == NULL) {
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "pParameterStructure = %p\n",pParameterStructure);
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState == OMX_StateInvalid) {
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               hComp,
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               ((OMX_COMPONENTTYPE *)hComp)->pApplicationPrivate,
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventError,
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_ErrorIncorrectStateOperation,
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               0,
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               NULL);
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex){
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioInit:
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "OMX_IndexParamAudioInit\n");
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(ComponentParameterStructure, &pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[INPUT_PORT]->nPortIndex) {
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure,
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   pComponentPrivate->pPortDef[INPUT_PORT],
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   );
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[OUTPUT_PORT]->nPortIndex) {
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure,
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   pComponentPrivate->pPortDef[OUTPUT_PORT],
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   );
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[INPUT_PORT]->nPortIndex) {
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->sInPortFormat.nIndex) {
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, &pComponentPrivate->sInPortFormat,
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[OUTPUT_PORT]->nPortIndex){
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->sOutPortFormat.nIndex) {
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, &pComponentPrivate->sOutPortFormat,
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioWma:
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT2(pComponentPrivate->dbg, "%d :: GetParameter OMX_IndexParamAudioWma \n",__LINE__);
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: GetParameter nPortIndex %ld\n",__LINE__, ((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex);
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: GetParameter wmaParams->nPortIndex %ld\n",__LINE__, pComponentPrivate->wmaParams[INPUT_PORT]->nPortIndex);
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->wmaParams[INPUT_PORT]->nPortIndex)
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->wmaParams[INPUT_PORT], sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE*)(ComponentParameterStructure))->nPortIndex ==
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->wmaParams[OUTPUT_PORT]->nPortIndex)
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->wmaParams[OUTPUT_PORT], sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(ComponentParameterStructure,
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               (OMX_AUDIO_PARAM_PCMMODETYPE*)pComponentPrivate->wma_op,
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               sizeof(OMX_AUDIO_PARAM_PCMMODETYPE)
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               );
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirInput) {
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n");
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*  memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_BUFFERSUPPLIERTYPE *)(ComponentParameterStructure))->nPortIndex == OMX_DirOutput) {
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, ":: GetParameter OMX_IndexParamCompBufferSupplier \n");
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*memcpy(ComponentParameterStructure, pBufferSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE)); */
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR2(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from GetParameter");
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamVideoInit:
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamImageInit:
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamOtherInit:
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*#ifdef ANDROID
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering OMX_IndexParamVideoInit\n", __LINE__);
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          OMX_PRINT1(pComponentPrivate->dbg, "%d :: Entering OMX_IndexParamImageInit/OtherInit\n", __LINE__);
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          memcpy(ComponentParameterStructure,pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          eError = OMX_ErrorNone;
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          #else
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          eError = OMX_ErrorUnsupportedIndex;
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          #endif*/
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef ANDROID
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case (OMX_INDEXTYPE) PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX:
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRDSP1(pComponentPrivate->dbg, "Entering PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX::%d\n", __LINE__);
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PV_OMXComponentCapabilityFlagsType* pCap_flags = (PV_OMXComponentCapabilityFlagsType *) ComponentParameterStructure;
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (NULL == pCap_flags)
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "%d :: ERROR PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__);
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError =  OMX_ErrorBadParameter;
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR2(pComponentPrivate->dbg, "%d :: Copying PV_OMX_COMPONENT_CAPABILITY_TYPE_INDEX\n", __LINE__);
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pCap_flags, &(pComponentPrivate->iPVCapabilityFlags), sizeof(PV_OMXComponentCapabilityFlagsType));
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorNone;
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting GetParameter:: %x\n",__LINE__,nParamIndex);
953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetParameter() Sets configuration paramets to the component
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nParamIndex
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompParam
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pCompParam)
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE  *pComponentPrivate;
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pComponentParam = NULL;
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole;
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_AUDIO_PARAM_PCMMODETYPE *wma_op;
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCompParam == NULL) {
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch(nParamIndex) {
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentParam = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* 0 means Input port */
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentParam->nPortIndex == 0) {
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentParam->eDir != OMX_DirInput) {
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRBUFFER4(pComponentPrivate->dbg, "%d :: Invalid input buffer Direction\n",__LINE__);
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (pComponentParam->nPortIndex == 1) {
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* 1 means Output port */
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentParam->eDir != OMX_DirOutput) {
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadParameter;
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferSize = pComponentParam->nBufferSize;
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              if (pComponentParam->nBufferSize != OUTPUT_WMADEC_BUFFER_SIZE) {
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              eError = OMX_ErrorBadParameter;
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              OMX_PRINT1(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              goto EXIT;
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              }
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              if (pComponentParam->format.audio.eEncoding != OMX_AUDIO_CodingPCM) {
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              eError = OMX_ErrorBadParameter;
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              goto EXIT;
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin              } */
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioWma:
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_AUDIO_PARAM_WMATYPE *pCompWmaParam =
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                (OMX_AUDIO_PARAM_WMATYPE *)pCompParam;
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* 0 means Input port */
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pCompWmaParam->nPortIndex == 0) {
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_PRCOMM2(pComponentPrivate->dbg, "pCompWmaParam->nPortIndex == 0\n");
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(((WMADEC_COMPONENT_PRIVATE*)
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pHandle->pComponentPrivate)->wmaParams[INPUT_PORT],
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pCompWmaParam, sizeof(OMX_AUDIO_PARAM_WMATYPE));
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } else if (pCompWmaParam->nPortIndex == 1) {
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->wmaParams[OUTPUT_PORT]->nSize = pCompWmaParam->nSize;
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->wmaParams[OUTPUT_PORT]->nPortIndex = pCompWmaParam->nPortIndex;
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->wmaParams[OUTPUT_PORT]->nBitRate = pCompWmaParam->nBitRate;
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->wmaParams[OUTPUT_PORT]->eFormat = pCompWmaParam->eFormat;
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[INPUT_PORT]->nPortIndex) {
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[INPUT_PORT],
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   pCompParam,
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   );
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[OUTPUT_PORT]->nPortIndex) {
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->pPortDef[OUTPUT_PORT],
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   pCompParam,
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   sizeof(OMX_PARAM_PORTDEFINITIONTYPE)
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   );
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState != OMX_StateLoaded) {
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorIncorrectStateOperation;
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pCompParam) {
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamAudioPcm:
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(pCompParam){
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            wma_op = (OMX_AUDIO_PARAM_PCMMODETYPE *)pCompParam;
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(pComponentPrivate->wma_op, wma_op, sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else{
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->pPortDef[INPUT_PORT]->nPortIndex) {
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyInput;
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex ==
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[OUTPUT_PORT]->nPortIndex) {
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRINT2(pComponentPrivate->dbg, ":: SetParameter OMX_IndexParamCompBufferSupplier \n");
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = OMX_BufferSupplyOutput;
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(&sBufferSupplier, pCompParam, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_ERROR2(pComponentPrivate->dbg, ":: OMX_ErrorBadPortIndex from SetParameter");
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetConfig() Gets the current configuration of to the component
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nConfigIndex
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentConfigStructure
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate;
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_STREAM_INFO *streamInfo;
1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1156b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(streamInfo, TI_OMX_STREAM_INFO);
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside   GetConfig\n");
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nConfigIndex == OMX_IndexCustomWmaDecStreamIDConfig)
1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* copy component info */
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        streamInfo->streamId = pComponentPrivate->streamID;
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO));
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (nConfigIndex == OMX_IndexCustomDebug) {
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(streamInfo)
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        free(streamInfo);
1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        streamInfo = NULL;
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting  GetConfig\n");
1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  SetConfig() Sets the configraiton to the component
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param hComp         handle for this instance of the component
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nConfigIndex
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ComponentConfigStructure
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate;
1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMA_HeadInfo* headerInfo = NULL;
1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DSP_DEFINITION* pDspDefinition = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure;
1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*int flagValue = 0;*/
1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_S16* deviceString;
1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "%d :: Entering SetConfig\n", __LINE__);
1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pHandle == NULL) {
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "%d :: Invalid HANDLE OMX_ErrorBadParameter \n",__LINE__);
1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate =  (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRSTATE1(pComponentPrivate->dbg, "Set Config %d\n",__LINE__);
1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch (nConfigIndex) {
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomWMADECHeaderInfoConfig:
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentPrivate->pDspDefinition,pDspDefinition,sizeof(TI_OMX_DSP_DEFINITION));
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        headerInfo = pDspDefinition->wmaHeaderInfo;
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(pComponentPrivate->pHeaderInfo,headerInfo,sizeof(WMA_HeadInfo));
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pDspDefinition->dasfMode == 0){
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->dasfmode = 0;
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (pComponentPrivate->pDspDefinition->dasfMode == 1) {
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->dasfmode = 1;
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if(pComponentPrivate->pDspDefinition->dasfMode == 2) {
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->dasfmode = 1;
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->streamID = pDspDefinition->streamId;
1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case  OMX_IndexCustomWmaDecDataPath:
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        deviceString = (OMX_S16*)ComponentConfigStructure;
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (deviceString == NULL)
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        dataPath = *deviceString;
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch(dataPath)
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_APPLICATION:
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_DECODER, pComponentPrivate->streamID);
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_APPLICATION_RTMIXER:
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING);
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case DATAPATH_ACDN:
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING);
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case OMX_IndexCustomDebug:
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	break;
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting SetConfig\n", __LINE__);
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Returning = 0x%x\n",__LINE__,eError);
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  GetState() Gets the current state of the component
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCompomponent handle for this instance of the component
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pState
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE error = OMX_ErrorUndefined;
1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pState) {
1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        error = OMX_ErrorBadParameter;
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMXDBG_PRINT(stderr, ERROR, 4, 0, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pHandle && pHandle->pComponentPrivate) {
1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState =  ((WMADEC_COMPONENT_PRIVATE*)
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pHandle->pComponentPrivate)->curState;
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState = OMX_StateLoaded;
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    error = OMX_ErrorNone;
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return error;
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  EmptyThisBuffer() This callback is used to send the input buffer to
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  component
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent       handle for this instance of the component
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nPortIndex       input port index
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBuffer          buffer to be sent to codec
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer)
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate =
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret=0;
1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WMADEC_COMPONENT_PRIVATE*)
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate)->pPortDef[INPUT_PORT];
1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->nFilledLen,
1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nInputPortIndex != INPUT_PORT) {
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       && pComponentPrivate->curState != OMX_StateIdle) {
1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: Component Sending Filled ip buff %p to Component Thread\n",
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                  __LINE__,pBuffer);
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bBypassDSP == 0) {
1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->app_nBuf--;
1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = pBuffer->pMarkData;
1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent;
1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledEmptyThisBuffers++;
1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof(OMX_BUFFERHEADERTYPE*));
1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (ret == -1) {
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_TRACE4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__);
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nEmptyThisBufferCount++;
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**-------------------------------------------------------------------*
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  FillThisBuffer() This callback is used to send the output buffer to
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  the component
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent    handle for this instance of the component
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param nPortIndex    output port number
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBuffer       buffer to be sent to codec
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent,
1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer)
1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate =
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (WMADEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet=0;
1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "%d :: Component Sending Emptied op buff %p to Component Thread\n",
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   __LINE__,pBuffer);
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "\n------------------------------------------\n\n");
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WMADEC_COMPONENT_PRIVATE*)
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate)->pPortDef[OUTPUT_PORT];
1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer->pBuffer,
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       0,
1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer == NULL) {
1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "About to return OMX_ErrorBadParameter on line %d\n",__LINE__);
1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorVersionMismatch;
1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffer->nOutputPortIndex != OUTPUT_PORT) {
1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError  = OMX_ErrorBadPortIndex;
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "FillThisBuffer Line %d\n",__LINE__);
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffer->nFilledLen = 0;
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "FillThisBuffer Line %d\n",__LINE__);
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Filling the Output buffer with zero */
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset (pBuffer->pBuffer,0,pBuffer->nAllocLen);
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "FillThisBuffer Line %d\n",__LINE__);
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkBuf = %p\n",pComponentPrivate->pMarkBuf);
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pMarkData = %p\n",pComponentPrivate->pMarkData);
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->pMarkBuf){
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "FillThisBuffer Line %d\n",__LINE__);
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent;
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData;
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkBuf = NULL;
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pMarkData) {
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "FillThisBuffer Line %d\n",__LINE__);
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkData;
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nUnhandledFillThisBuffers++;
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pComponentPrivate->dataPipe[1], &pBuffer,
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                  sizeof (OMX_BUFFERHEADERTYPE*));
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: Error in Writing to the Data pipe\n", __LINE__);
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * OMX_ComponentDeinit() this methold will de init the component
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle)
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* inform audio manager to remove the streamID*/
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* compose the data */
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate =
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (WMADEC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate;
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct OMX_TI_Debug dbg;
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    dbg = pComponentPrivate->dbg;
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d ::ComponentDeInit\n",__LINE__);
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryStart | PERF_BoundaryCleanup);
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef DSP_RENDERING_ON
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(fdwrite);
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    close(fdread);
1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError =  RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource,
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_WMA_Decoder_COMPONENT, 0, 1234, NULL);
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(dbg, "%d ::OMX_AmrDecoder.c :: Error returned from destroy ResourceManagerProxy thread\n",
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__);
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_Deinitalize();
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(dbg, "%d ::Error returned from destroy ResourceManagerProxy thread\n",
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__);
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d ::ComponentDeInit\n",__LINE__);
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bIsStopping = 1;
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = WMADEC_StopComponentThread(pHandle);
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d ::ComponentDeInit\n",__LINE__);
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Wait for thread to exit so we can get the status into "error" */
1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* close the pipe handles */
1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_FreeCompResources(pHandle);
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d ::After WMADEC_FreeCompResources\n",__LINE__);
1588b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pHeaderInfo);
1589b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pDspDefinition);
1590b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList);
1591b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList);
1592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->sDeviceString);
1593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate->rcaheader);
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_BoundaryComplete | PERF_BoundaryCleanup);
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERF);
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1600b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MEMFREE_STRUCT(pComponentPrivate);
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(dbg, "%d ::After free(pComponentPrivate)\n",__LINE__);
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DBG_CLOSE(dbg);
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  ComponentTunnelRequest() this method is not implemented in 1.5
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This method will update application callbacks
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application.
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_TUNNELSETUPTYPE* pTunnelSetup)
1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "===========================Inside the ComponentTunnelRequest==============================\n");
1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, ERROR, 4, 0, "Inside the ComponentTunnelRequest\n");
1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  AllocateBuffer()
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComp         handle for this instance of the component
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCallBacks    application callbacks
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param ptr
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nPortIndex,
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_PTR pAppPrivate,
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_IN OMX_U32 nSizeBytes)
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate;
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WMADEC_COMPONENT_PRIVATE*)
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate)->pPortDef[nPortIndex];
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: pPortDef = %p\n", __LINE__,pPortDef);
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled);
1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "pPortDef->bEnabled = %d\n", pPortDef->bEnabled);
1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->AlloBuf_waitingsignal = 1;
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex);
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_WaitForEvent(&(pComponentPrivate->AlloBuf_event));
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE);
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset(pBufferHeader, 0x0, sizeof(OMX_BUFFERHEADERTYPE));
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_SIZE_DSPALIGN(pBufferHeader->pBuffer, nSizeBytes, OMX_U8);
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(NULL == pBufferHeader->pBuffer) {
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "%d :: Malloc Failed\n",__LINE__);
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBufferHeader) {
1697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT(pBufferHeader);
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == INPUT_PORT)
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pInputBufferList->numBuffers,pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers]);
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1;
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "Allocate Buffer Line %d\n",__LINE__);
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers);
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pPortDef->nBufferCountMin = %ld\n",pPortDef->nBufferCountMin);
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == OUTPUT_PORT) {
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pOutputBufferList->pBufHdr[%d] = %p\n",pComponentPrivate->pOutputBufferList->numBuffers,pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers]);
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1;
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled)&&
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled) &&
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER;
1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = WMADEC_MINOR_VER;
1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, "Line %d\n",__LINE__);
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *pBuffer = pBufferHeader;
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated) {
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     OMX_CommandPortEnable,
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->bEnableCommandParam,NULL);
1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        (*pBuffer)->pBuffer, nSizeBytes,
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleMemory);
1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "AllocateBuffer returning %d\n",eError);
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn FreeBuffer() description for FreeBuffer
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin FreeBuffer().
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Called by the OMX IL client to free a buffer.
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_HANDLETYPE hComponent,
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* buff;
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int inputIndex = -1;
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int outputIndex = -1;
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle;
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < MAX_NUM_OF_BUFS; i++) {
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pInputBufferList->pBufHdr[i];
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching input buffer\n");
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            inputIndex = i;
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n");
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i < MAX_NUM_OF_BUFS; i++) {
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        buff = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (buff == pBuffer) {
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "Found matching output buffer\n");
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            outputIndex = i;
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "This is not a match\n");
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "buff = %p\n",buff);
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pBuffer = %p\n",pBuffer);
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (inputIndex != -1) {
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) {
1843b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer, OMX_U8);
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingBuffer(pComponentPrivate->pPERF,
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer,
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->nAllocLen,
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           PERF_ModuleMemory);
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[FREE] %p\n",__LINE__,pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
1853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pInputBufferList->numBuffers--;
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers <
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[INPUT_PORT]->nBufferCountMin) {
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated = OMX_FALSE;
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled &&
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorPortUnpopulated,nPortIndex, NULL);
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (outputIndex != -1) {
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) {
1874b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_MEMFREE_STRUCT_DSPALIGN(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer, OMX_U8);
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_SendingBuffer(pComponentPrivate->pPERF,
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer,
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->nAllocLen,
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           PERF_ModuleMemory);
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[FREE] %p\n",__LINE__,pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
1886b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->numBuffers--;
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers <
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[OUTPUT_PORT]->nBufferCountMin) {
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated = OMX_FALSE;
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled &&
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->bLoadedCommandPending == OMX_FALSE &&
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           !pComponentPrivate->reconfigOutputPort &&
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           (pComponentPrivate->curState == OMX_StateIdle ||
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StateExecuting ||
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState == OMX_StatePause)) {
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorPortUnpopulated,nPortIndex, NULL);
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR2(pComponentPrivate->dbg, "%d::Returning OMX_ErrorBadParameter\n",__LINE__);
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((!pComponentPrivate->pInputBufferList->numBuffers &&
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         !pComponentPrivate->pOutputBufferList->numBuffers) &&
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded)
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded = 0;
1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InIdle_threshold);
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InIdle_event));
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Removing sleep() calls.  There are no allocated buffers. */
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bDisableCommandPending &&
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->pInputBufferList->numBuffers +
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pOutputBufferList->numBuffers == 0)) {
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers +
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOutputBufferList->numBuffers == 0) {
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         pComponentPrivate->bDisableCommandParam,NULL);
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bDisableCommandPending &&
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->pInputBufferList->numBuffers == 0)) {
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bDisableCommandPending = OMX_FALSE;
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler( pComponentPrivate->pHandle,
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventCmdComplete,
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_CommandPortDisable,
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                INPUT_PORT,
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bDisableCommandPending &&
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->pOutputBufferList->numBuffers == 0)) {
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bDisableCommandPending = OMX_FALSE;
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler( pComponentPrivate->pHandle,
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventCmdComplete,
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_CommandPortDisable,
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OUTPUT_PORT,
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "%d :: Exiting FreeBuffer\n", __LINE__);
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn UseBuffer() description for UseBuffer
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin UseBuffer().
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Called by the OMX IL client to pass a buffer to be used.
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_HANDLETYPE hComponent,
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nPortIndex,
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_PTR pAppPrivate,
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U32 nSizeBytes,
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_IN OMX_U8* pBuffer)
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef;
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate;
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader;
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef _ERROR_PROPAGATION__
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateInvalid){
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "PERF %d :: OMX_WmaDecoder.c\n",__LINE__);
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedBuffer(pComponentPrivate->pPERF,
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffer, nSizeBytes,
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleHLMM);
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = ((WMADEC_COMPONENT_PRIVATE*)
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate)->pPortDef[nPortIndex];
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled){
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->AlloBuf_waitingsignal = 1;
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        //wait for the port to be enabled before we accept buffers
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex);
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef = %p\n", __LINE__,pPortDef);
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRCOMM1(pComponentPrivate->dbg, "%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled);
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(!pPortDef->bEnabled) {
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_ERROR4(pComponentPrivate->dbg, "%d :: In AllocateBuffer\n", __LINE__);
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "pPortDef->bPopulated =%d\n",pPortDef->bPopulated);
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "nSizeBytes =%ld\n",nSizeBytes);
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pPortDef->nBufferSize =%ld\n",pPortDef->nBufferSize);
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pPortDef->bPopulated) {
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2039b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_MALLOC_GENERIC(pBufferHeader, OMX_BUFFERHEADERTYPE);
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "%d:[ALLOC] %p\n",__LINE__,pBufferHeader);
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBufferHeader == 0) {
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memset((pBufferHeader), 0x0, sizeof(OMX_BUFFERHEADERTYPE));
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == OUTPUT_PORT) {
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = nPortIndex;
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0;
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHeader->nOutputPortIndex = -1;
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0;
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if((pComponentPrivate->pPortDef[OUTPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[OUTPUT_PORT]->bEnabled)&&
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->pPortDef[INPUT_PORT]->bPopulated == pComponentPrivate->pPortDef[INPUT_PORT]->bEnabled) &&
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       (pComponentPrivate->InLoaded_readytoidle))
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InLoaded_readytoidle = 0;
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = WMADEC_MAJOR_VER;
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = WMADEC_MINOR_VER;
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->pBuffer = pBuffer;
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Line %d\n",__LINE__);
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    *ppBufferHdr = pBufferHeader;
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBufferHeader = %p\n",pBufferHeader);
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->bEnableCommandPending && pPortDef->bPopulated){
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "Sending command before exiting usbuffer\n");
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        SendCommand (pComponentPrivate->pHandle,
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     OMX_CommandPortEnable,
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->bEnableCommandParam,NULL);
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "exiting Use buffer\n");
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn GetExtensionIndex() description for GetExtensionIndex
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin GetExtensionIndex().
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Returns index for vendor specific settings.
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_HANDLETYPE hComponent,
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN  OMX_STRING cParameterName,
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_INDEXTYPE* pIndexType)
2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "GetExtensionIndex\n");
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!(strcmp(cParameterName,"OMX.TI.index.config.wmaheaderinfo"))) {
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWMADECHeaderInfoConfig;
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMXDBG_PRINT(stderr, DSP, 2, 0, "OMX_IndexCustomWMADECHeaderInfoConfig\n");
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.wmastreamIDinfo")))
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWmaDecStreamIDConfig;
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.index.config.wmadec.datapath")))
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pIndexType = OMX_IndexCustomWmaDecDataPath;
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(!(strcmp(cParameterName,"OMX.TI.WMA.Decode.Debug")))
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	*pIndexType = OMX_IndexCustomDebug;
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMXDBG_PRINT(stderr, PRINT, 1, 0, "Exiting GetExtensionIndex\n");
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn ComponentRoleEnum() description for ComponentRoleEnum()
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Returns the role at the given index
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_Core.h
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_HANDLETYPE hComponent,
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex)
2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    WMADEC_COMPONENT_PRIVATE *pComponentPrivate;
2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (WMADEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nIndex == 0){
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE);
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "::::In ComponenetRoleEnum: cRole is set to %s\n",cRole);
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorNoMore;
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================= */
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fns Sleep replace for WIN CE
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ */
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_CreateEvent(OMX_Event *event){
2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret = OMX_ErrorNone;
2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    HANDLE createdEvent = NULL;
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(event == NULL){
2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    event->event  = CreateEvent(NULL, TRUE, FALSE, NULL);
2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(event->event == NULL)
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = (int)GetLastError();
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return ret;
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_SignalEvent(OMX_Event *event){
2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = OMX_ErrorNone;
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(event == NULL){
2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    SetEvent(event->event);
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = (int)GetLastError();
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return ret;
2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_WaitForEvent(OMX_Event *event) {
2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = OMX_ErrorNone;
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(event == NULL){
2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    WaitForSingleObject(event->event, INFINITE);
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = (int)GetLastError();
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return ret;
2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinint OMX_DestroyEvent(OMX_Event *event) {
2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = OMX_ErrorNone;
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(event == NULL){
2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ret = OMX_ErrorBadParameter;
2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    CloseHandle(event->event);
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return ret;
2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2241