1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License as published by the Free Software Foundation; either
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Lesser General Public License for more details.
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* =============================================================================
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*             Texas Instruments OMAP (TM) Platform Software
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  Use of this software is controlled by the terms and conditions found
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* =========================================================================== */
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @file OMX_G726Encoder.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements OpenMAX (TM) 1.0 Specific APIs and its functionality
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* that is fully compliant with the Khronos OpenMAX (TM) 1.0 Specification
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g726_enc\src
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @rev  1.0
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! Revision History
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! ===================================
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! Gyancarlo Garcia: Initial Verision
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 05-Oct-2007
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* =========================================================================== */
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  INCLUDE FILES
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------program files ----------------------------------------*/
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G726Enc_Utils.h"
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  EXTERNAL REFERENCES NOTE : only use if not found in header file
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  PUBLIC DECLARATIONS Defined here, used elsewhere
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations --------------------------------*/
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  PRIVATE DECLARATIONS Defined here, used only here
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------data declarations -----------------------------------*/
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G726ENC_DEBUGMEM
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern void * DebugMalloc(int line, char *s, int size);
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinextern int DebugFree(void *dp, int line, char *s);
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeMalloc(x) DebugMalloc(__LINE__,__FILE__,x)
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeFree(z) DebugFree(z,__LINE__,__FILE__)
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeMalloc(x) calloc(1,x)
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define SafeFree(z) free(z)
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE hComp,
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_CALLBACKTYPE* pCallBacks, OMX_PTR pAppData);
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin										  OMX_STRING pComponentName,
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin										  OMX_VERSIONTYPE* pComponentVersion,
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin										  OMX_VERSIONTYPE* pSpecVersion,
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin										  OMX_UUIDTYPE* pComponentUUID);
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE hComp, OMX_COMMANDTYPE nCommand,
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       OMX_U32 nParam,OMX_PTR pCmdData);
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter(OMX_HANDLETYPE hComp, OMX_INDEXTYPE nParamIndex,
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								  OMX_PTR ComponentParamStruct);
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								   OMX_INDEXTYPE nParamIndex,
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								   OMX_PTR ComponentParamStruct);
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								OMX_INDEXTYPE nConfigIndex,
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								OMX_PTR pComponentConfigStructure);
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								OMX_INDEXTYPE nConfigIndex,
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin								OMX_PTR pComponentConfigStructure);
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE hComp, OMX_BUFFERHEADERTYPE* pBuffer);
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE hComp, OMX_STATETYPE* pState);
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_U32 nTunneledPort,
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_TUNNELSETUPTYPE* pTunnelSetup);
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle);
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_U32 nPortIndex,
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_PTR pAppPrivate,
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_U32 nSizeBytes);
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_U32 nPortIndex,
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_HANDLETYPE hComponent,
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U32 nPortIndex,
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_PTR pAppPrivate,
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U32 nSizeBytes,
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U8* pBuffer);
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_STRING cParameterName,
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_OUT OMX_INDEXTYPE* pIndexType);
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_IN OMX_HANDLETYPE hComponent,
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     OMX_OUT OMX_U8 *cRole,
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	     OMX_IN OMX_U32 nIndex);
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* interface with audio manager*/
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO1 "/dev/fifo.1"
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define FIFO2 "/dev/fifo.2"
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define PERMS 0666
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * OMX_ComponentInit() Set the all the function pointers of component
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update the component function pointer to the handle
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_ErrorInsufficientResources If the malloc fails
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComp)
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef_ip = NULL, *pPortDef_op = NULL;
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_AUDIO_PARAM_G726TYPE *G726_op = NULL;
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_AUDIO_PARAM_G726TYPE *G726_ip = NULL;
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_PORT_TYPE *pCompPort = NULL;
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE *pPortFormat = NULL;
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	int i = 0;
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering OMX_ComponentInit\n", __LINE__);
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/*Set the all component function pointer to the handle */
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetCallbacks = SetCallbacks;
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetComponentVersion = GetComponentVersion;
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SendCommand = SendCommand;
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetParameter = GetParameter;
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetParameter = SetParameter;
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetConfig = GetConfig;
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->SetConfig = SetConfig;
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->GetState = GetState;
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->EmptyThisBuffer = EmptyThisBuffer;
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FillThisBuffer = FillThisBuffer;
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentTunnelRequest = ComponentTunnelRequest;
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentDeInit = ComponentDeInit;
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->AllocateBuffer = AllocateBuffer;
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->FreeBuffer = FreeBuffer;
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->UseBuffer = UseBuffer;
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pHandle->GetExtensionIndex = GetExtensionIndex;
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->ComponentRoleEnum = ComponentRoleEnum;
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Allocate the memory for Component private data area */
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pHandle->pComponentPrivate, G726ENC_COMPONENT_PRIVATE);
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	memset(pHandle->pComponentPrivate, 0x0, sizeof(G726ENC_COMPONENT_PRIVATE));
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate = pHandle->pComponentPrivate;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pCompPort, G726ENC_PORT_TYPE);
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pCompPort[G726ENC_INPUT_PORT] = pCompPort;
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pCompPort, G726ENC_PORT_TYPE);
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT] = pCompPort;
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPortParam, OMX_PORT_PARAM_TYPE);
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize sPortParam data structures to default values */
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  	pComponentPrivate->sPortParam->nPorts = 0x2;
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->sPortParam->nStartPortNumber = 0x0;
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Malloc and Set pPriorityMgmt defaults */
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBCONF_INIT_STRUCT(pComponentPrivate->sPriorityMgmt, OMX_PRIORITYMGMTTYPE);
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Initialize sPriorityMgmt data structures to default values */
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->sPriorityMgmt->nGroupPriority = -1;
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->sPriorityMgmt->nGroupID = -1;
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(G726_op, OMX_AUDIO_PARAM_G726TYPE);
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(G726_op, OMX_AUDIO_PARAM_G726TYPE);
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->G726Params[G726ENC_OUTPUT_PORT] = G726_op;
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726_op->nPortIndex = G726ENC_OUTPUT_PORT;
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(G726_ip, OMX_AUDIO_PARAM_G726TYPE);
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(G726_ip, OMX_AUDIO_PARAM_G726TYPE);
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->G726Params[G726ENC_INPUT_PORT] = G726_ip;
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726_ip->nPortIndex = G726ENC_INPUT_PORT;
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* malloc and initialize number of input buffers */
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pComponentPrivate->pInputBufferList, G726ENC_BUFFERLIST);
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pInputBufferList->numBuffers = 0;
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* malloc and initialize number of output buffers */
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pComponentPrivate->pOutputBufferList, G726ENC_BUFFERLIST);
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pOutputBufferList->numBuffers = 0;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (i=0; i < G726ENC_MAX_NUM_OF_BUFS; i++) {
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->pBufHdr[i] = NULL;
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->pBufHdr[i] = NULL;
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->arrTickCount[i] = 0;
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->arrTimestamp[i] = 0;
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->IpBufindex = 0;
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->OpBufindex = 0;
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set input port defaults */
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBCONF_INIT_STRUCT(pPortDef_ip, OMX_PARAM_PORTDEFINITIONTYPE);
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortDef[G726ENC_INPUT_PORT] = pPortDef_ip;
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nPortIndex                         = G726ENC_INPUT_PORT;
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->eDir                               = OMX_DirInput;
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferCountActual                 = G726ENC_NUM_INPUT_BUFFERS;
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferCountMin                    = G726ENC_NUM_INPUT_BUFFERS;
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->nBufferSize                        = G726ENC_INPUT_BUFFER_SIZE_DASF;
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->bEnabled                           = OMX_TRUE;
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->bPopulated                         = OMX_FALSE;
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_ip->eDomain                            = OMX_PortDomainAudio;
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_ip->format.audio.eEncoding             = OMX_AUDIO_CodingPCM;
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_ip->format.audio.pNativeRender         = NULL;
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_ip->format.audio.bFlagErrorConcealment = OMX_FALSE;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 	/* Set output port defaults */
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBCONF_INIT_STRUCT(pPortDef_op, OMX_PARAM_PORTDEFINITIONTYPE);
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT] = pPortDef_op;
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nPortIndex                         = G726ENC_OUTPUT_PORT;
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->eDir                               = OMX_DirOutput;
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferCountMin                    = G726ENC_NUM_OUTPUT_BUFFERS;
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferCountActual                 = G726ENC_NUM_OUTPUT_BUFFERS;
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->nBufferSize                        = G726ENC_OUTPUT_BUFFER_SIZE;
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->bEnabled                           = OMX_TRUE;
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->bPopulated                         = OMX_FALSE;
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef_op->eDomain                            = OMX_PortDomainAudio;
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_op->format.audio.eEncoding             = OMX_AUDIO_CodingG726;
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_op->format.audio.pNativeRender         = NULL;
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef_op->format.audio.bFlagErrorConcealment = OMX_FALSE;
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set input port format defaults */
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat = pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat;
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->nPortIndex         = G726ENC_INPUT_PORT;
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->nIndex             = OMX_IndexParamAudioPcm;
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->eEncoding 			= OMX_AUDIO_CodingPCM;
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBMALLOC_STRUCT(pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set output port format defaults */
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat = pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat;
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_NBCONF_INIT_STRUCT(pPortFormat, OMX_AUDIO_PARAM_PORTFORMATTYPE);
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->nPortIndex         = G726ENC_OUTPUT_PORT;
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->nIndex             = OMX_IndexParamAudioPcm;
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortFormat->eEncoding 			= OMX_AUDIO_CodingG726;
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Setting dasf & acdn and MultiFrame modes to 0\n",__LINE__);
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->dasfMode = 0;
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->acdnMode = 0;
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->rtpMode = 0;
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pParams = NULL;
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->bInitParamsInitialized = 0;
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pMarkBuf = NULL;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->pMarkData = NULL;
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nEmptyBufferDoneCount = 0;
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nEmptyThisBufferCount = 0;
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nFillBufferDoneCount = 0;
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nFillThisBufferCount = 0;
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->strmAttr = NULL;
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->bDisableCommandParam = 0;
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (i=0; i < G726ENC_MAX_NUM_OF_BUFS; i++) {
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufHdrPending[i] = NULL;
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufHdrPending[i] = NULL;
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nNumInputBufPending = 0;
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nNumOutputBufPending = 0;
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->bDisableCommandPending = 0;
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bNoIdleOnStop= OMX_FALSE;
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nOutStandingFillDones = 0;
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G726FrameSize[0] = 24;
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G726FrameSize[1] = 20;
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G726FrameSize[2] = 4;
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->G726FrameSize[3] = 1;
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->lastOutBufArrived = NULL;
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->LastBufSent = 0;
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy((char*)pComponentPrivate->componentRole.cRole, "audio_encoder.g726");
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->sDeviceString = SafeMalloc(100*sizeof(OMX_STRING));
364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pComponentPrivate->sDeviceString == NULL) {
365b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	G726ENC_DPRINT("%d :: OMX_ErrorInsufficientResources", __LINE__);
366b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	eError = OMX_ErrorInsufficientResources;
367b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	goto EXIT;
368b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Initialize device string to the default value */
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy((char*)pComponentPrivate->sDeviceString,":srcul/codec\0");
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->AlloBuf_mutex, NULL);
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->AlloBuf_threshold, NULL);
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->AlloBuf_waitingsignal = 0;
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InLoaded_mutex, NULL);
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InLoaded_threshold, NULL);
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->InLoaded_readytoidle = 0;
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->InIdle_mutex, NULL);
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_init (&pComponentPrivate->InIdle_threshold, NULL);
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->InIdle_goingtoloaded = 0;
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G726ENC_StartComponentThread(pHandle);
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   	  G726ENC_DPRINT("%d :: Error returned from the Component\n",__LINE__);
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   	  goto EXIT;
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	eError = RMProxy_NewInitalize();
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: OMX_ComponentInit\n", __LINE__);
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (eError != OMX_ErrorNone) {
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: Error returned from loading ResourceManagerProxy thread\n",__LINE__);
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting OMX_ComponentInit\n", __LINE__);
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetCallbacks() Sets application callbacks to the component
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update application callbacks
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * to the component. So that component can make use of those call back
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * while sending buffers to the application. And also it will copy the
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * application private data to component memory
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pAppData      Application private data
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks (OMX_HANDLETYPE pComponent,
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR pAppData)
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)pComponent;
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate =
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering SetCallbacks\n", __LINE__);
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pCallBacks == NULL) {
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G726ENC_DPRINT("%d :: Received the empty callbacks from the application\n",__LINE__);
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Copy the callbacks of the application to the component private*/
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*copy the application private data to component memory */
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting SetCallbacks\n", __LINE__);
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetComponentVersion() This will return the component version
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will retrun the component version
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp               handle for this instance of the component
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompnentName       Name of the component
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompnentVersion    handle for this instance of the component
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pSpecVersion        application callbacks
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompnentUUID
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion (OMX_HANDLETYPE hComp,
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin										  OMX_STRING pComponentName,
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*) hComp;
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering GetComponentVersion\n", __LINE__);
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	/* Copy component version structure */
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if(pComponentVersion != NULL && pComponentName != NULL) {
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		strcpy(pComponentName, pComponentPrivate->cComponentName);
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorBadParameter from GetComponentVersion",__LINE__);
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting GetComponentVersion\n", __LINE__);
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SendCommand() used to send the commands to the component
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will be used by the application.
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param phandle         handle for this instance of the component
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param Cmd             Command to be sent to the component
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParam          indicates commmad is sent using this method
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand (OMX_HANDLETYPE phandle,
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_U32 nParam,
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  OMX_PTR pCmdData)
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)phandle;
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pCompPrivate =
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = 0;
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering SendCommand()\n", __LINE__);
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pCompPrivate->curState == OMX_StateInvalid) {
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    eError = OMX_ErrorInvalidState;
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    G726ENC_DPRINT("%d :: Error OMX_ErrorInvalidState Sent to App\n",__LINE__);
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(Cmd) {
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_CommandStateSet:
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   			G726ENC_DPRINT("%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pCompPrivate->curState == OMX_StateLoaded) {
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if((nParam == OMX_StateExecuting) || (nParam == OMX_StatePause)) {
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pCompPrivate->cbInfo.EventHandler ( pHandle,
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														pHandle->pApplicationPrivate,
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														OMX_EventError,
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														OMX_ErrorIncorrectStateTransition,
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														0,
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														NULL);
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(nParam == OMX_StateInvalid) {
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   					G726ENC_DPRINT("%d :: OMX_CommandStateSet SendCommand\n",__LINE__);
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pCompPrivate->curState = OMX_StateInvalid;
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pCompPrivate->cbInfo.EventHandler ( pHandle,
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														pHandle->pApplicationPrivate,
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														OMX_EventError,
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														OMX_ErrorInvalidState,
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														0,
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin														NULL);
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_CommandFlush:
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   			G726ENC_DPRINT("%d :: OMX_CommandFlush SendCommand\n",__LINE__);
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if(nParam > 1 && nParam != -1) {
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				eError = OMX_ErrorBadPortIndex;
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				goto EXIT;
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        break;
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_CommandPortDisable:
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   			G726ENC_DPRINT("%d :: OMX_CommandPortDisable SendCommand\n",__LINE__);
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_CommandPortEnable:
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   			G726ENC_DPRINT("%d :: OMX_CommandPortEnable SendCommand\n",__LINE__);
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_CommandMarkBuffer:
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   			G726ENC_DPRINT("%d :: OMX_CommandMarkBuffer SendCommand\n",__LINE__);
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nParam > 0) {
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       		    G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SendCommand",__LINE__);
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: Command Received Default eError\n",__LINE__);
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pCompPrivate->cbInfo.EventHandler ( pHandle,
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            								    pHandle->pApplicationPrivate,
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            				                    OMX_EventError,
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            			                        OMX_ErrorUndefined,
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            			                        0,
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            				                    "Invalid Command");
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = write (pCompPrivate->cmdPipe[1], &Cmd, sizeof(Cmd));
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (nRet == -1) {
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	   eError = OMX_ErrorInsufficientResources;
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       G726ENC_DPRINT("%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	   goto EXIT;
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (Cmd == OMX_CommandMarkBuffer) {
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &pCmdData,
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            sizeof(OMX_PTR));
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nRet = write(pCompPrivate->cmdDataPipe[1], &nParam,
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            sizeof(OMX_U32));
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nRet == -1) {
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorInsufficientResources from SendCommand",__LINE__);
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 	G726ENC_DPRINT("%d :: Exiting SendCommand()\n", __LINE__);
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetParameter() Gets the current configurations of the component
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParamIndex
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentParameterStructure
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter (OMX_HANDLETYPE hComp,
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure)
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE  *pComponentPrivate = NULL;
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_PARAM_PORTDEFINITIONTYPE *pParameterStructure = NULL;
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pParameterStructure = (OMX_PARAM_PORTDEFINITIONTYPE*)ComponentParameterStructure;
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering the GetParameter\n",__LINE__);
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pParameterStructure == NULL) {
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter",__LINE__);
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->curState == OMX_StateInvalid) {
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorIncorrectStateOperation;
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorIncorrectStateOperation from GetParameter",__LINE__);
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParamIndex){
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioInit:
655b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    if (pComponentPrivate->sPortParam == NULL) {
656b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	        eError = OMX_ErrorBadParameter;
657b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                break;
658b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    }
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioInit \n",__LINE__);
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->sPortParam, sizeof(OMX_PORT_PARAM_TYPE));
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamPortDefinition:
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: GetParameter OMX_IndexParamPortDefinition \n",__LINE__);
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nPortIndex) {
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[G726ENC_INPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex ==
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin									  pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nPortIndex) {
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT], sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioPortFormat:
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nPortIndex) {
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                      pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat->nPortIndex) {
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorNoMore;
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					}
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					else {
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					}
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				else if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin							pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nPortIndex){
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					if(((OMX_AUDIO_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex >
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin												 pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat->nPortIndex) {
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						eError = OMX_ErrorNoMore;
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					}
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					else {
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					}
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				else {
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					eError = OMX_ErrorBadPortIndex;
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		case OMX_IndexParamAudioPcm:
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: GetParameter OMX_IndexParamAudioG726 \n",__LINE__);
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(((OMX_AUDIO_PARAM_PCMMODETYPE *)(ComponentParameterStructure))->nPortIndex ==
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin						pComponentPrivate->G726Params[G726ENC_OUTPUT_PORT]->nPortIndex) {
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->G726Params[G726ENC_OUTPUT_PORT], sizeof(OMX_AUDIO_PARAM_PCMMODETYPE));
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from GetParameter \n",__LINE__);
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_IndexParamPriorityMgmt:
721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	        if (pComponentPrivate->sPriorityMgmt == NULL) {
722b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    eError = OMX_ErrorBadParameter;
723b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		    break;
724b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		}
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G726ENC_DPRINT("%d :: GetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->sPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_IndexParamVideoInit:
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_IndexParamImageInit:
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_IndexParamOtherInit:
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		default:
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G726ENC_DPRINT("%d :: OMX_ErrorUnsupportedIndex GetParameter \n",__LINE__);
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUnsupportedIndex;
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting GetParameter\n",__LINE__);
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetParameter() Sets configuration paramets to the component
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nParamIndex
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompParam
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter (OMX_HANDLETYPE hComp,
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   OMX_PTR pCompParam)
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle= (OMX_COMPONENTTYPE*)hComp;
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE  *pComponentPrivate = NULL;
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_PORTFORMATTYPE* pComponentParam = NULL;
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pComponentParamPort = NULL;
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_PARAM_G726TYPE *pCompG726Param = NULL;
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComp)->pComponentPrivate);
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering the SetParameter\n",__LINE__);
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pCompParam == NULL) {
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorBadParameter from SetParameter",__LINE__);
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pComponentPrivate->curState != OMX_StateLoaded) {
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorIncorrectStateOperation;
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorIncorrectStateOperation from SetParameter",__LINE__);
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(nParamIndex) {
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioPortFormat:
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioPortFormat \n",__LINE__);
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pComponentParam = (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pCompParam;
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat->nPortIndex ) {
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					memcpy(pComponentPrivate->pCompPort[G726ENC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				} else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					memcpy(pComponentPrivate->pCompPort[G726ENC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				} else {
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					eError = OMX_ErrorBadPortIndex;
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamAudioG726:
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioG726 \n",__LINE__);
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pCompG726Param = (OMX_AUDIO_PARAM_G726TYPE *)pCompParam;
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pCompG726Param->nPortIndex == OMX_DirOutput) {
804b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	            if (((G726ENC_COMPONENT_PRIVATE *)
805b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		        pHandle->pComponentPrivate)->G726Params[G726ENC_OUTPUT_PORT] == NULL) {
806b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                eError = OMX_ErrorBadParameter;
807b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        break;
808b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	            }
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(((G726ENC_COMPONENT_PRIVATE *)
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle->pComponentPrivate)->G726Params[G726ENC_OUTPUT_PORT], pCompG726Param, sizeof(OMX_AUDIO_PARAM_G726TYPE));
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else if (pCompG726Param->nPortIndex == OMX_DirInput) {
813b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		    if (((G726ENC_COMPONENT_PRIVATE *)
814b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		        pHandle->pComponentPrivate)->G726Params[G726ENC_INPUT_PORT] == NULL) {
815b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                eError = OMX_ErrorBadParameter;
816b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        break;
817b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	            }
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    memcpy(((G726ENC_COMPONENT_PRIVATE *)
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pHandle->pComponentPrivate)->G726Params[G726ENC_INPUT_PORT], pCompG726Param, sizeof(OMX_AUDIO_PARAM_G726TYPE));
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				else {
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					eError = OMX_ErrorBadPortIndex;
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				}
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_IndexParamPortDefinition:
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentParamPort = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nPortIndex) {
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy(pComponentPrivate->pPortDef[G726ENC_INPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else if(((OMX_PARAM_PORTDEFINITIONTYPE *)(pCompParam))->nPortIndex == pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nPortIndex) {
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  		        G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamPortDefinition \n",__LINE__);
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy(pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT], pCompParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		     }
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		     else {
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		           G726ENC_DPRINT("%d :: OMX_ErrorBadPortIndex from SetParameter",__LINE__);
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			   eError = OMX_ErrorBadPortIndex;
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			  }
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        	break;
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		case OMX_IndexParamPriorityMgmt:
844b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		       if (pComponentPrivate->sPriorityMgmt == NULL) {
845b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                           eError = OMX_ErrorBadParameter;
846b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			   break;
847b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		       }
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamPriorityMgmt \n",__LINE__);
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        	memcpy(pComponentPrivate->sPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    case OMX_IndexParamAudioInit:
853b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		       if (pComponentPrivate->sPortParam == NULL) {
854b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                           eError = OMX_ErrorBadParameter;
855b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			   break;
856b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		       }
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: SetParameter OMX_IndexParamAudioInit \n",__LINE__);
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				memcpy(pComponentPrivate->sPortParam, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE));
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    break;
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        default:
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: SetParameter OMX_ErrorUnsupportedIndex \n",__LINE__);
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				eError = OMX_ErrorUnsupportedIndex;
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting SetParameter\n",__LINE__);
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetConfig() Gets the current configuration of to the component
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nConfigIndex
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentConfigStructure
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig (OMX_HANDLETYPE hComp,
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_STREAM_INFO *streamInfo = NULL;
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate =
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nConfigIndex == OMX_IndexCustomG726ENCStreamIDConfig){
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    OMX_NBMALLOC_STRUCT(streamInfo, TI_OMX_STREAM_INFO);
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(streamInfo == NULL){
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    eError = OMX_ErrorBadParameter;
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    goto EXIT;
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	    }
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		streamInfo->streamId = pComponentPrivate->streamID;
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		memcpy(ComponentConfigStructure,streamInfo,sizeof(TI_OMX_STREAM_INFO));
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	OMX_NBMEMFREE_STRUCT(streamInfo);
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Entering GetConfig\n", __LINE__);
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting GetConfig\n", __LINE__);
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  SetConfig() Sets the configraiton to the component
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComp         handle for this instance of the component
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nConfigIndex
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ComponentConfigStructure
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig (OMX_HANDLETYPE hComp,
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure)
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
928b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_COMPONENTTYPE* pHandle = (OMX_COMPONENTTYPE*)hComp;
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	TI_OMX_DSP_DEFINITION *pTiDspDefinition = NULL;
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    TI_OMX_DATAPATH dataPath;
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_S16 *customFlag = NULL;
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_AUDIO_CONFIG_VOLUMETYPE *pGainStructure = NULL;
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 fdwrite = 0;
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    AM_COMMANDDATATYPE cmd_data;
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering SetConfig\n", __LINE__);
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pHandle == NULL) {
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT ("%d :: Invalid HANDLE OMX_ErrorBadParameter \n",__LINE__);
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
946b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	switch (nConfigIndex) {
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		case OMX_IndexCustomG726ENCModeConfig:
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pTiDspDefinition = (TI_OMX_DSP_DEFINITION*)ComponentConfigStructure;
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pTiDspDefinition == NULL) {
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				eError = OMX_ErrorBadParameter;
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				G726ENC_DPRINT("%d :: OMX_ErrorBadParameter from SetConfig\n",__LINE__);
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			 	goto EXIT;
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			 }
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->dasfMode = pTiDspDefinition->dasfMode;
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->acdnMode = pTiDspDefinition->acousticMode;
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->rtpMode = pTiDspDefinition->rtpMode;
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->streamID = pTiDspDefinition->streamId;
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       case  OMX_IndexCustomG726ENCDataPath:
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            customFlag = (OMX_S16*)ComponentConfigStructure;
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            dataPath = *customFlag;
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch(dataPath) {
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case DATAPATH_APPLICATION:
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G726ENC_DPRINT("------>Stream ID on SetConfig %d\n", (int)pComponentPrivate->streamID);
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_MMMIXER_DATAPATH(pComponentPrivate->sDeviceString, RENDERTYPE_ENCODER, pComponentPrivate->streamID);
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case DATAPATH_APPLICATION_RTMIXER:
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    strcpy((char*)pComponentPrivate->sDeviceString,(char*)RTM_STRING_ENCODER);
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                case DATAPATH_ACDN:
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     strcpy((char*)pComponentPrivate->sDeviceString,(char*)ACDN_STRING_ENCODER);
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     break;
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                default:
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     break;
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		case OMX_IndexConfigAudioVolume:
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_RENDERING_ON
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if((fdwrite=open(FIFO1,O_WRONLY))<0) {
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     	          G726ENC_DPRINT("%d :: [NBAMRE Encoder Component] - failure to open WRITE pipe\n",__LINE__);
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     pGainStructure = (OMX_AUDIO_CONFIG_VOLUMETYPE *)ComponentConfigStructure;
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     cmd_data.hComponent = hComp;
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     cmd_data.AM_Cmd = AM_CommandSWGain;
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     cmd_data.param1 = pGainStructure->sVolume.nValue;
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     cmd_data.param2 = 0;
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     cmd_data.streamID = pComponentPrivate->streamID;
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      			 if((write(fdwrite, &cmd_data, sizeof(cmd_data)))<0)
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    	 {
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				     G726ENC_DPRINT("[G726 encoder] - fail to send command to audio manager\n");
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     }
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     else
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     {
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				     G726ENC_DPRINT("[G726 encoder] - ok to send command to audio manager\n");
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     }
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			     close(fdwrite);
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          }
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		default:
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = OMX_ErrorUnsupportedIndex;
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		break;
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting SetConfig\n", __LINE__);
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  GetState() Gets the current state of the component
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCompomponent handle for this instance of the component
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pState
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetState (OMX_HANDLETYPE pComponent, OMX_STATETYPE* pState)
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering GetState\n", __LINE__);
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!pState) {
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: OMX_ErrorBadParameter from GetState\n",__LINE__);
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pHandle && pHandle->pComponentPrivate) {
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pState =  ((G726ENC_COMPONENT_PRIVATE*)
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     pHandle->pComponentPrivate)->curState;
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        *pState = OMX_StateLoaded;
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNone;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting GetState\n", __LINE__);
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  EmptyThisBuffer() This callback is used to send the input buffer to
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  component
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponent       handle for this instance of the component
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nPortIndex       input port index
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pBuffer          buffer to be sent to codec
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer)
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = 0;
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate =
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G726ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[G726ENC_INPUT_PORT];
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering EmptyThisBuffer\n", __LINE__);
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer == NULL) {
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (!pPortDef->bEnabled) {
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError  = OMX_ErrorIncorrectStateOperation;
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorVersionMismatch;
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nInputPortIndex != G726ENC_INPUT_PORT) {
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError  = OMX_ErrorBadPortIndex;
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError= OMX_ErrorIncorrectStateOperation;
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("----------------------------------------------------------------\n");
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Comp Sending Filled ip buff = %p to CompThread\n",__LINE__,pBuffer);
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("----------------------------------------------------------------\n");
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pMarkData = pBuffer->pMarkData;
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = pBuffer->hMarkTargetComponent;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof(OMX_BUFFERHEADERTYPE*));
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ret == -1) {
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G726ENC_DPRINT("%d :: Error in Writing to the Data pipe\n", __LINE__);
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nEmptyThisBufferCount++;
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting EmptyThisBuffer\n", __LINE__);
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  FillThisBuffer() This callback is used to send the output buffer to
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  the component
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param nPortIndex    output port number
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pBuffer       buffer to be sent to codec
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer (OMX_HANDLETYPE pComponent,
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer)
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = 0;
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate =
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         (G726ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pPortDef = ((G726ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[G726ENC_OUTPUT_PORT];
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering FillThisBuffer\n", __LINE__);
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("------------------------------------------------------------------\n");
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Comp Sending Emptied op buff = %p to CompThread\n",__LINE__,pBuffer);
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("------------------------------------------------------------------\n");
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pBuffer == NULL) {
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT(" %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT(" %d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (!pPortDef->bEnabled) {
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError  = OMX_ErrorIncorrectStateOperation;
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nVersion.nVersion != pComponentPrivate->nVersion) {
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorVersionMismatch;
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT(" %d :: About to return OMX_ErrorVersionMismatch\n",__LINE__);
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBuffer->nOutputPortIndex != G726ENC_OUTPUT_PORT) {
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError  = OMX_ErrorBadPortIndex;
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT(" %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->curState != OMX_StateExecuting && pComponentPrivate->curState != OMX_StatePause) {
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBuffer->nFilledLen = 0;
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Filling the Output buffer with zero */
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(pBuffer->pBuffer, 0, pBuffer->nAllocLen);
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->pMarkBuf != NULL){
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->pMarkBuf->hMarkTargetComponent;
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkBuf->pMarkData;
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkBuf = NULL;
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pMarkData != NULL) {
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuffer->pMarkData = pComponentPrivate->pMarkData;
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pMarkData = NULL;
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = write (pComponentPrivate->dataPipe[1], &pBuffer, sizeof (OMX_BUFFERHEADERTYPE*));
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ret == -1) {
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G726ENC_DPRINT("%d :: Error in Writing to the Data pipe\n", __LINE__);
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nFillThisBufferCount++;
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting FillThisBuffer\n", __LINE__);
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * OMX_ComponentDeinit() this methold will de init the component
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE pHandle)
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pComponent = (OMX_COMPONENTTYPE *)pHandle;
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate =
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                         (G726ENC_COMPONENT_PRIVATE *)pComponent->pComponentPrivate;
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering ComponentDeInit\n", __LINE__);
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_G726_Encoder_COMPONENT, 0, 3456,NULL);
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         G726ENC_DPRINT ("%d ::OMX_G726_Encoder.c :: Error returned from destroy ResourceManagerProxy thread\n",
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        __LINE__);
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	eError = RMProxy_Deinitalize();
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (eError != OMX_ErrorNone) {
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         G726ENC_DPRINT("%d :: Error from RMProxy_Deinitalize\n",__LINE__);
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         goto EXIT;
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsStopping = 1;
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G726ENC_StopComponentThread(pHandle);
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (eError != OMX_ErrorNone) {
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         G726ENC_DPRINT("%d :: Error from G726ENC_StopComponentThread\n",__LINE__);
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         goto EXIT;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Wait for thread to exit so we can get the status into "eError" */
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* close the pipe handles */
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G726ENC_FreeCompResources(pHandle);
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (eError != OMX_ErrorNone) {
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         G726ENC_DPRINT("%d :: Error from G726ENC_FreeCompResources\n",__LINE__);
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         goto EXIT;
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sDeviceString != NULL) {
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        SafeFree(pComponentPrivate->sDeviceString);
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMEMFREE_STRUCT(pComponentPrivate);
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting ComponentDeInit\n", __LINE__);
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  ComponentTunnelRequest() this method is not implemented in 1.5
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * This method will update application callbacks
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * the application.
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest (OMX_HANDLETYPE hComp,
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_U32 nPort, OMX_HANDLETYPE hTunneledComp,
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_U32 nTunneledPort,
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											 OMX_TUNNELSETUPTYPE* pTunnelSetup)
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = OMX_ErrorNotImplemented;
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Entering ComponentTunnelRequest\n", __LINE__);
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting ComponentTunnelRequest\n", __LINE__);
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  AllocateBuffer()
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer (OMX_IN OMX_HANDLETYPE hComponent,
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_U32 nPortIndex,
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_PTR pAppPrivate,
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			       OMX_IN OMX_U32 nSizeBytes)
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G726ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Entering AllocateBuffer\n", __LINE__);
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: pPortDef = %p\n", __LINE__,pPortDef);
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: pPortDef->bEnabled = %d\n", __LINE__,pPortDef->bEnabled);
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->AlloBuf_waitingsignal = 1;
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_wait(&pComponentPrivate->AlloBuf_threshold, &pComponentPrivate->AlloBuf_mutex);
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pBufferHeader, OMX_BUFFERHEADERTYPE);
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memset(pBufferHeader, 0x0, sizeof(OMX_BUFFERHEADERTYPE));
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pBufferHeader->pBuffer = (OMX_U8 *)SafeMalloc(nSizeBytes + 256);
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_MEMPRINT("%d :: ALLOCATING MEMORY = %p\n",__LINE__,pBufferHeader->pBuffer);
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (pBufferHeader->pBuffer == NULL) {
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* Free previously allocated memory before bailing */
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pBufferHeader) {
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			SafeFree(pBufferHeader);
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pBufferHeader = NULL;
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorInsufficientResources;
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pBuffer += 128;
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (nPortIndex == G726ENC_INPUT_PORT) {
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufferHeader->nInputPortIndex = nPortIndex;
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pBufferHeader->nOutputPortIndex = -1;
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 1;
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pPortDef->bPopulated = OMX_TRUE;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (nPortIndex == G726ENC_OUTPUT_PORT) {
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufferHeader->nInputPortIndex = -1;
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pBufferHeader->nOutputPortIndex = nPortIndex;
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 1;
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pPortDef->bPopulated = OMX_TRUE;
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    G726ENC_DPRINT("%d :: pPortDef->bPopulated = %d\n", __LINE__, pPortDef->bPopulated);
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadPortIndex;
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT(" %d :: About to return OMX_ErrorBadPortIndex\n",__LINE__);
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		goto EXIT;
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((!pComponentPrivate->dasfMode                                 &&     /*File Mode*/
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated &&
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled   &&
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated  &&
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled    &&
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->InLoaded_readytoidle)
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         ||
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->dasfMode                                   &&    /*Dasf Mode*/
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated  &&
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled    &&
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->InLoaded_readytoidle)){
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->InLoaded_readytoidle = 0;
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 	pBufferHeader->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER;
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = G726ENC_MINOR_VER;
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *pBuffer = pBufferHeader;
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Exiting AllocateBuffer\n",__LINE__);
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  FreeBuffer()
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param hComponent   handle for this instance of the component
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks   application callbacks
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer(
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_U32 nPortIndex,
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* buff = NULL;
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_U8* tempBuff = NULL;
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	int i = 0;
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	int inputIndex = -1;
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	int outputIndex = -1;
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            					(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Entering FreeBuffer\n", __LINE__);
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (i=0; i < G726ENC_MAX_NUM_OF_BUFS; i++) {
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		buff = pComponentPrivate->pInputBufferList->pBufHdr[i];
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (buff == pBuffer) {
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: Found matching input buffer\n",__LINE__);
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			inputIndex = i;
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else {
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: This is not a match\n",__LINE__);
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	for (i=0; i < G726ENC_MAX_NUM_OF_BUFS; i++) {
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		buff = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (buff == pBuffer) {
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: Found matching output buffer\n",__LINE__);
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			outputIndex = i;
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		else {
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: This is not a match\n",__LINE__);
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: buff = %p\n",__LINE__,buff);
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			G726ENC_DPRINT("%d :: pBuffer = %p\n",__LINE__,pBuffer);
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (inputIndex != -1) {
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pInputBufferList->bufferOwner[inputIndex] == 1) {
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			tempBuff = pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]->pBuffer;
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			tempBuff -= 128;
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_NBMEMFREE_STRUCT(tempBuff);
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		OMX_NBMEMFREE_STRUCT(pComponentPrivate->pInputBufferList->pBufHdr[inputIndex]);
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->pInputBufferList->numBuffers--;
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->pInputBufferList->numBuffers <
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->nBufferCountMin) {
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated = OMX_FALSE;
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if(pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled &&
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				(pComponentPrivate->curState == OMX_StateIdle ||
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pComponentPrivate->curState == OMX_StateExecuting ||
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				pComponentPrivate->curState == OMX_StatePause)) {
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->cbInfo.EventHandler(	pHandle,
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													pHandle->pApplicationPrivate,
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													OMX_EventError,
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													OMX_ErrorPortUnpopulated,
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													nPortIndex,
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													NULL);
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (outputIndex != -1) {
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		 if (pComponentPrivate->pOutputBufferList->bufferOwner[outputIndex] == 1) {
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			tempBuff = pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]->pBuffer;
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			tempBuff -= 128;
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_NBMEMFREE_STRUCT(tempBuff);
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		OMX_NBMEMFREE_STRUCT(pComponentPrivate->pOutputBufferList->pBufHdr[outputIndex]);
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->numBuffers--;
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pOutputBufferList->numBuffers <
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->nBufferCountMin) {
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated = OMX_FALSE;
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if(pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled &&
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			(pComponentPrivate->curState == OMX_StateIdle ||
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->curState == OMX_StateExecuting ||
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->curState == OMX_StatePause)) {
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pComponentPrivate->cbInfo.EventHandler( pHandle,
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													pHandle->pApplicationPrivate,
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													OMX_EventError,
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													OMX_ErrorPortUnpopulated,
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													nPortIndex,
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin													NULL);
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: Returning OMX_ErrorBadParameter\n",__LINE__);
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       if ((!pComponentPrivate->pInputBufferList->numBuffers &&
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		    !pComponentPrivate->pOutputBufferList->numBuffers) &&
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->InIdle_goingtoloaded)
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       {
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pComponentPrivate->InIdle_goingtoloaded = 0;
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pthread_cond_signal(&pComponentPrivate->InIdle_threshold);
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->bDisableCommandPending) {
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			SendCommand (pComponentPrivate->pHandle,OMX_CommandPortDisable,pComponentPrivate->bDisableCommandParam,NULL);
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting FreeBuffer\n", __LINE__);
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  UseBuffer()
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pCallBacks    application callbacks
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param ptr
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer (
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_HANDLETYPE hComponent,
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U32 nPortIndex,
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_PTR pAppPrivate,
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U32 nSizeBytes,
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN OMX_U8* pBuffer)
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef = NULL;
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufferHeader = NULL;
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            (((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDef = ((G726ENC_COMPONENT_PRIVATE*)pComponentPrivate)->pPortDef[nPortIndex];
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Entering UseBuffer\n", __LINE__);
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: pPortDef->bPopulated = %d \n",__LINE__,pPortDef->bPopulated);
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(!pPortDef->bEnabled) {
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorIncorrectStateOperation\n",__LINE__);
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nSizeBytes != pPortDef->nBufferSize || pPortDef->bPopulated) {
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("%d :: About to return OMX_ErrorBadParameter\n",__LINE__);
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_NBMALLOC_STRUCT(pBufferHeader, OMX_BUFFERHEADERTYPE);
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset((pBufferHeader), 0x0, sizeof(OMX_BUFFERHEADERTYPE));
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (nPortIndex == G726ENC_OUTPUT_PORT) {
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = -1;
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pBufferHeader->nOutputPortIndex = nPortIndex;
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->pOutputBufferList->numBuffers] = pBufferHeader;
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->bBufferPending[pComponentPrivate->pOutputBufferList->numBuffers] = 0;
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pOutputBufferList->bufferOwner[pComponentPrivate->pOutputBufferList->numBuffers++] = 0;
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pOutputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pPortDef->bPopulated = OMX_TRUE;
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBufferHeader->nInputPortIndex = nPortIndex;
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pBufferHeader->nOutputPortIndex = -1;
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->pBufHdr[pComponentPrivate->pInputBufferList->numBuffers] = pBufferHeader;
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->bBufferPending[pComponentPrivate->pInputBufferList->numBuffers] = 0;
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->pInputBufferList->bufferOwner[pComponentPrivate->pInputBufferList->numBuffers++] = 0;
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if (pComponentPrivate->pInputBufferList->numBuffers == pPortDef->nBufferCountActual) {
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			pPortDef->bPopulated = OMX_TRUE;
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinif ((!pComponentPrivate->dasfMode                                   &&     /*File Mode*/
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated &&
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled   &&
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bPopulated  &&
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_INPUT_PORT]->bEnabled    &&
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->InLoaded_readytoidle)
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         ||
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->dasfMode                                     &&    /*Dasf Mode*/
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bPopulated  &&
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->pPortDef[G726ENC_OUTPUT_PORT]->bEnabled    &&
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->InLoaded_readytoidle)){
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->InLoaded_readytoidle = 0;
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_cond_signal(&pComponentPrivate->InLoaded_threshold);
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_SignalEvent(&(pComponentPrivate->InLoaded_event));
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pAppPrivate = pAppPrivate;
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->pPlatformPrivate = pComponentPrivate;
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nAllocLen = nSizeBytes;
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMajor = G726ENC_MAJOR_VER;
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufferHeader->nVersion.s.nVersionMinor = G726ENC_MINOR_VER;
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pComponentPrivate->nVersion = pBufferHeader->nVersion.nVersion;
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pBufferHeader->pBuffer = pBuffer;
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	pBufferHeader->nSize = sizeof(OMX_BUFFERHEADERTYPE);
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    *ppBufferHdr = pBufferHeader;
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_DPRINT("%d :: Exiting UseBuffer\n", __LINE__);
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("%d :: Returning = 0x%x\n",__LINE__,eError);
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn GetExtensionIndex() description for GetExtensionIndex
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinGetExtensionIndex().
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinReturns index for vendor specific settings.
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  @see         OMX_Core.h
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex(
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_HANDLETYPE hComponent,
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_IN  OMX_STRING cParameterName,
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_OUT OMX_INDEXTYPE* pIndexType)
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	OMX_ERRORTYPE eError = OMX_ErrorNone;
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("GetExtensionIndex\n");
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	if (!(strcmp(cParameterName,"OMX.TI.index.config.tispecific"))) {
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		*pIndexType = OMX_IndexCustomG726ENCModeConfig;
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("OMX.TI.index.config.tispecific\n");
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (!(strcmp(cParameterName,"OMX.TI.index.config.G726.streamIDinfo"))) {
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		*pIndexType = OMX_IndexCustomG726ENCStreamIDConfig;
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("OMX.TI.index.config.G726.streamIDinfo\n");
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (!(strcmp(cParameterName,"OMX.TI.index.config.G726.datapath"))) {
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		*pIndexType = OMX_IndexCustomG726ENCDataPath;
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		G726ENC_DPRINT("OMX.TI.index.config.G726.datapath\n");
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else {
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		eError = OMX_ErrorBadParameter;
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	G726ENC_DPRINT("Exiting GetExtensionIndex\n");
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	return eError;
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @fn ComponentRoleEnum() description for ComponentRoleEnum()
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinReturns the role at the given index
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  @see         OMX_Core.h
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         OMX_IN OMX_HANDLETYPE hComponent,
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	  OMX_OUT OMX_U8 *cRole,
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	  OMX_IN OMX_U32 nIndex)
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G726ENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G726ENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(nIndex == 0){
1747b65f253fdc60f6208a54911bee793d225f23cdf8James Dong      if (cRole == NULL) {
1748b65f253fdc60f6208a54911bee793d225f23cdf8James Dong          eError = OMX_ErrorBadParameter;
1749b65f253fdc60f6208a54911bee793d225f23cdf8James Dong      }
1750b65f253fdc60f6208a54911bee793d225f23cdf8James Dong      else {
1751b65f253fdc60f6208a54911bee793d225f23cdf8James Dong          memcpy(cRole, &pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE);
1752b65f253fdc60f6208a54911bee793d225f23cdf8James Dong          G726ENC_DPRINT("::::In ComponenetRoleEnum: cRole is set to %s\n",cRole);
1753b65f253fdc60f6208a54911bee793d225f23cdf8James Dong      }
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      eError = OMX_ErrorNoMore;
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1760