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