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_G722Enc_Utils.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#include <stdlib.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_Component.h"
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "LCML_DspCodec.h"
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G722Encoder.h"
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G722Enc_Utils.h"
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "g722encsocket_ti.h"
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <encode_common_ti.h>
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h"
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define HASHINGENABLE 1
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinint FillBufferDoneCount = 0;
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic int gLcmlPipeWr = 0;
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 pValues[4] ={0};
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic G722ENC_COMPONENT_PRIVATE *pComponentPrivate_CC = NULL;
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn ComponentThread() Component thread
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         OMX_ComponentThread.h
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid* ComponentThread (void* pThreadData)
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int status = 0;
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timespec tv; /*timeval tv;*/
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax = 0;
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fd_set rfds;
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nRet = 0;
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufHeader = NULL;
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int ret = 0;
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE* pComponentPrivate = (G722ENC_COMPONENT_PRIVATE*)pThreadData;
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = pComponentPrivate->pHandle;
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = pComponentPrivate->cmdPipe[0];
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->dataPipe[0] > fdmax) {
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fdmax = pComponentPrivate->dataPipe[0];
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (1) {
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_ZERO (&rfds);
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->cmdPipe[0], &rfds);
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->dataPipe[0], &rfds);
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_sec = 1;
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_nsec = 0; /*usec = 0;*/
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigset_t set;
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigemptyset (&set);
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigaddset (&set, SIGALRM);
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = pselect (fdmax+1, &rfds, NULL, NULL, &tv, &set);
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = select (fdmax+1, &rfds, NULL, NULL, &tv);
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 == status) {
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d : bIsStopping = %ld\n",__LINE__,
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->bIsStopping);
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d : app_nBuf = %ld\n",__LINE__,
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->app_nBuf);
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bIsStopping == 1) {
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("%d :: Component stopping\n",__LINE__);
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->lcml_nOpBuf = 0;
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->lcml_nIpBuf = 0;
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->app_nBuf = 0;
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bIsStopping = 0;
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bIsEOFSent = 0;
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState != OMX_StateIdle) {
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if (-1 == status) {
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error in Select - errno = %d\n", __LINE__,errno);
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle,pHandle->pApplicationPrivate,
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,OMX_ErrorInsufficientResources, 0,
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    "Error from COmponent Thread in select");
167b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorInsufficientResources;
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if (FD_ISSET (pComponentPrivate->cmdPipe[0], &rfds)) {
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: CMD pipe is set in Component Thread\n",__LINE__);
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: pComponentPrivate = %p\n",__LINE__,pComponentPrivate);
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nRet = G722ENC_HandleCommand (pComponentPrivate);
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nRet == EXIT_COMPONENT_THRD) {
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("Exiting from Component thread\n");
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_CleanupInitParams(pHandle);
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(eError != OMX_ErrorNone) {
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("%d :: Function G722Enc_FreeCompResources returned\
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                    error\n",__LINE__);
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d :: ARM Side Resources Have Been Freed\n",__LINE__);
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateLoaded;
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->bPreempted == 0) {
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventCmdComplete,
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorNone,
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->curState,
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("%d %s Component loaded (OMX_StateLoaded)\n",
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   __LINE__,__FUNCTION__);
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }else{
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError,
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorResourcesLost,
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->curState,
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bPreempted = 0;
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (FD_ISSET (pComponentPrivate->dataPipe[0], &rfds)) {
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: DATA pipe is set in Component Thread\n",__LINE__);
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            ret = read(pComponentPrivate->dataPipe[0], &pBufHeader, sizeof(pBufHeader));
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (ret == -1) {
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("%d :: Error while reading from the pipe\n",__LINE__);
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_HandleDataBuf_FromApp (pBufHeader,pComponentPrivate);
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("%d :: Error From G722ENC_HandleDataBuf_FromApp\n",__LINE__);
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Exiting ComponentThread \n",__LINE__);
221b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return (void*)eError;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_Fill_LCMLInitParams() description for G722ENC_Fill_LCMLInitParams
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_Fill_LCMLInitParams().
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This function is used by the component thread to
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ill the all of its initialization parameters, buffer deatils  etc
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin to LCML structure
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param plcml_Init  pointer to LCML structure to be filled
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent,
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          LCML_DSP *plcml_Init)
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp = NULL;
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int size_lcml = 0;
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_STRMATTR *strmAttr = NULL;
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 *arr = NULL;
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate;
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pParmsTemp = NULL;
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Entered G722ENC_Fill_LCMLInitParams",__LINE__);
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferSize;
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->nBufferSize;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers);
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->noInitInputBuf = nIpBuf;
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->noInitOutputBuf = nOpBuf;
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nBuffers = nIpBuf;
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nSize = nIpBufSize;
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD;
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nBuffers = nOpBuf;
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nSize = nOpBufSize;
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD;
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.nNumOfDLLs = 3;
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G722ENCSOCKET_TI_UUID;
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName, G722ENC_DLL_NAME);
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G722ENCSOCKET_TI_UUID;
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName, G722ENC_DLL_NAME);
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].uuid = &ENCODE_COMMON_TI_UUID;
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName,USN_DLL_NAME);
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->SegID = OMX_G722ENC_DEFAULT_SEGMENT;
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Timeout = OMX_G722ENC_SN_TIMEOUT;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Alignment = 0;
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Priority = OMX_G722ENC_SN_PRIORITY;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->DeviceInfo.TypeofDevice = 0;
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->ProfileID = -1;
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->dasfmode == 1) {
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: G722 ENCODER IS RUNNING UNDER DASF MODE \n",__LINE__);
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pParmsTemp = (OMX_U8*)malloc(sizeof(G722ENC_AudioCodecParams) + 256);
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pComponentPrivate->pParams);
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(NULL == pParmsTemp) {
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Malloc Failed\n",__LINE__);
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorInsufficientResources;
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        memset (pParmsTemp, 0, sizeof (G722ENC_AudioCodecParams) + 256);
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pParams = (G722ENC_AudioCodecParams*)(pParmsTemp + 128);
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*strmAttr = malloc(sizeof(LCML_STRMATTR));
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,strmAttr);*/
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G722MALLOC_STRUCT (strmAttr, LCML_STRMATTR);
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (strmAttr == NULL) {
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("strmAttr - failed to malloc\n");
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorInsufficientResources;
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->strmAttr = strmAttr;
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,strmAttr);
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uSegid = 0;
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uAlignment = 0;
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uTimeout = OMX_G722ENC_SN_TIMEOUT;
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uBufsize = G722ENC_OUTPUT_BUFFER_SIZE_BYTES;
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uNumBufs = G722ENC_NUM_INPUT_BUFFERS + G722ENC_NUM_OUTPUT_BUFFERS;
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->lMode = STRMMODE_PROCCOPY;
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofDevice = 1;
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofRender = 1;  /* set for record */
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* add to support Tee Device Node */
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->teemode == 1) {
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &TEEDN_TI_UUID;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID;
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.DspStream = strmAttr;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr = malloc (10 * sizeof(OMX_U16));
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,arr);
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (arr == NULL) {
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (strmAttr) {
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(strmAttr);
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strmAttr = NULL;
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset (arr, 0, 10 * sizeof (OMX_U16));
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pCreatePhaseArgs = arr;
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->dasfmode == 1){
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: G722 ENCODER CREATE PHASE UNDER DASF MODE \n",__LINE__);
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[0] = G722ENC_NUM_STREAMS;
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[1] = G722ENC_INPUT_PORT;                                        /*Stream ID*/
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[2] = G722ENCSTREAMINPUT;                                       /*DMM based input stream DMM - 0 INPUT - 1 */
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[3] = G722ENC_NUM_INPUT_DASF_BUFFERS;                            /*Number of buffers on input stream*/
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[4] = G722ENC_OUTPUT_PORT;                                       /*Stream ID*/
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[5] = G722ENCSTREAMDMM;                                         /*DMM based output stream DMM - 0 OUTPUT - 2*/
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[6] = (OMX_U16)pComponentPrivate->pOutputBufferList->numBuffers;  /*Number of buffers on output stream*/
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: G722 ENCODER CREATE PHASE UNDER FILE MODE \n",__LINE__);
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[0] = G722ENC_NUM_STREAMS;
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[1] = G722ENC_INPUT_PORT;                                        /*Stream ID*/
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[2] = G722ENCSTREAMDMM;                                         /*DMM based input stream DMM - 0 INPUT - 1*/
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList->numBuffers) {
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = (OMX_U16)pComponentPrivate->pInputBufferList->numBuffers;   /*Number of buffers on input stream*/
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = 1;
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[4] = G722ENC_OUTPUT_PORT;                                       /*Stream ID*/
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[5] = G722ENCSTREAMDMM;                                         /*DMM based output stream DMM - 0 OUTPUT - 2*/
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList->numBuffers) {
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[6] = (OMX_U16)pComponentPrivate->pOutputBufferList->numBuffers;  /*Number of buffers on output stream*/
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[6] = 1;
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[7] = (OMX_U16)pComponentPrivate->g722Params->nSampleRate;   /* Rate selection */
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[8] = G722ENC_INPUT_BUFFER_SIZE;
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[9] = END_OF_CR_PHASE_ARGS;
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->pCrPhArgs = arr;
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Allocate memory for all input buffer headers..
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     * This memory pointer will be sent to LCML */
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nIpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp_lcml == NULL) {
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (strmAttr) {
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(strmAttr);
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strmAttr = NULL;
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (arr) {
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(arr);
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr = NULL;
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset (pTemp_lcml, 0, size_lcml);
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = pTemp_lcml;
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nIpBuf; i++) {
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: --------- Inside Ip Loop\n",__LINE__);
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nIpBufSize;
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nIpBufSize;
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = NOT_USED;
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirInput;
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*pTemp_lcml->pIpParam = (G722ENC_UAlgInBufParamStruct *)malloc(sizeof(G722ENC_UAlgInBufParamStruct));
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml->pIpParam);*/
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G722MALLOC_STRUCT (pTemp_lcml->pIpParam, G722ENC_UAlgInBufParamStruct);
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pTemp_lcml->pIpParam == NULL) {
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Free previously allocated memory before bailing */
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (strmAttr) {
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(strmAttr);
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                strmAttr = NULL;
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (arr) {
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(arr);
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                arr = NULL;
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pTemp_lcml) {
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml);
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pTemp_lcml);
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp_lcml = NULL;
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Error: Malloc Failed...Exiting..\n",__LINE__);
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pIpParam->bLastBuffer = 0;
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722ENC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: InBuffHeader[%d] = %p\n", __LINE__, i, pTemp);
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>> InputBuffHeader[%d]->pBuffer = %p\n",
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp->pBuffer);
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: Ip : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = pComponentPrivate->pBufHeader[G722ENC_OUTPUT_PORT];
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nOpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp_lcml == NULL) {
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (strmAttr) {
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(strmAttr);
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strmAttr = NULL;
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (arr) {
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,arr);
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(arr);
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr = NULL;
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset (pTemp_lcml, 0, size_lcml);
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = pTemp_lcml;
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("nOpBuf = %d\n",nOpBuf);
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nOpBuf; i++) {
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nOpBufSize;
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nOpBufSize;
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->nVersion = pTemp->nVersion.nVersion;
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = NOT_USED;
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirOutput;
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722ENC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>>>>>>>>>>> OutBuffHeader[%d] = %p\n",
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp);
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>> OutBuffHeader[%d]->pBuffer = %p\n",
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp->pBuffer);
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: Op : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp++;
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Exiting G722ENC_Fill_LCMLInitParams",__LINE__);
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722Enc_StartCompThread() description for G722Enc_StartCompThread
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722Enc_StartCompThread().
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This function is called by the component to create
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin the component thread, command pipe, data pipe and LCML Pipe
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722Enc_StartCompThread(OMX_HANDLETYPE pComponent)
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate =
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G722ENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_attr_t attr;
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(&attr, 0, sizeof(attr));
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__inheritsched = PTHREAD_EXPLICIT_SCHED;
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__schedparam.__sched_priority = OMX_AUDIO_ENCODER_THREAD_PRIORITY;
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Enetering  G722Enc_StartCompThread\n", __LINE__);
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* initialize values */
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsStopping = 0;
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->lcml_nOpBuf = 0;
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->lcml_nIpBuf = 0;
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->app_nBuf = 0;
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsEOFSent = 0;
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create the pipe used to send buffers to the thread */
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->dataPipe);
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create the pipe used to send commands to the thread */
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->cmdPipe);
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->cmdDataPipe);
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Dec_StartCompThread() - error = %d\n", __LINE__,eError);
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create the pipe used to send commands to the thread */
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pipe (pComponentPrivate->lcml_Pipe);
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError) {
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    gLcmlPipeWr = pComponentPrivate->lcml_Pipe[1];
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Create the Component Thread */
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pthread_create (&(pComponentPrivate->ComponentThread), &attr,
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             ComponentThread, pComponentPrivate);
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL,
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             ComponentThread, pComponentPrivate);
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError || !pComponentPrivate->ComponentThread) {
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate_CC = pComponentPrivate;
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 1;
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_StartCompThread() - error = %d\n", __LINE__,eError);
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G722Enc_FreeCompResources() This function is called by the component during
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread, Command pipe, data pipe & LCML pipe.
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722Enc_FreeCompResources(OMX_HANDLETYPE pComponent)
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle->pComponentPrivate;
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE err = OMX_ErrorNone;
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722Enc_FreeCompResources()\n", __LINE__);
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pCreatePhaseArgs != NULL) {
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pCreatePhaseArgs);
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*      free(pComponentPrivate->pCreatePhaseArgs);*/
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pCreatePhaseArgs = NULL;
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bCompThreadStarted) {
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->dataPipe[0]);
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing dataPipe\n",__LINE__);
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->dataPipe[1]);
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing dataPipe\n",__LINE__);
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->cmdDataPipe[0]);
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->cmdDataPipe[1]);
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->cmdPipe[0]);
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing cmdPipe\n",__LINE__);
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->cmdPipe[1]);
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing cmdPipe\n",__LINE__);
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->lcml_Pipe[0]);
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing lcml_Pipe\n",__LINE__);
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        err = close (pComponentPrivate->lcml_Pipe[1]);
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 != err && OMX_ErrorNone == eError) {
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorHardware;
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Error while closing lcml_Pipe\n",__LINE__);
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bPortDefsAllocated != 0 /*NULL*/) {
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT] != NULL) {
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]);
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]);
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722ENC_INPUT_PORT] = NULL;
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]) {
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]);
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]);
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT] = NULL;
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pcmParams) {
708b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pcmParams);
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pComponentPrivate->pcmParams);
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pcmParams = NULL;
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->g722Params) {
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->g722Params);
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->g722Params);
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->g722Params = NULL;
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutputBufferList) {
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pOutputBufferList);
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->pOutputBufferList);
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOutputBufferList = NULL;
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInputBufferList) {
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pInputBufferList);
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->pInputBufferList);
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pInputBufferList = NULL;
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sDeviceString) {
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->sDeviceString);
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->sDeviceString);
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sDeviceString = NULL;
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pOutPortFormat) {
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pOutPortFormat);
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->pOutPortFormat);
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOutPortFormat = NULL;
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pInPortFormat) {
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pInPortFormat);
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->pInPortFormat);
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pInPortFormat = NULL;
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sPriorityMgmt) {
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->sPriorityMgmt);
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free (pComponentPrivate->sPriorityMgmt);
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->sPriorityMgmt = NULL;
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event));
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InIdle_event));
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event));
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*eError = G722ENC_FreeLCMLHandle();*/
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("Exiting Successfully G722ENC_FreeCompResources()\n");
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CleanupInitParams() description for G722ENC_CleanupInitParams
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CleanupInitParams().
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This function is called by the component to cleanup initialization parameters
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin upon component exit.
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CleanupInitParams(OMX_HANDLETYPE pComponent)
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8* pParmsTemp =  NULL;
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle->pComponentPrivate;
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: pComponentPrivate = %p\n", __LINE__,pComponentPrivate);
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: pComponentPrivate->strmAttr = %p\n", __LINE__,pComponentPrivate->strmAttr);
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->dasfmode == 1) && (pComponentPrivate->pParams)) {
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pParmsTemp = (OMX_U8*)pComponentPrivate->pParams;
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pParmsTemp != NULL){
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pParmsTemp -= 128;
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pParams = (G722ENC_AudioCodecParams *)pParmsTemp;
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT(":: Freeing: pComponentPrivate->pParams = %p\n",pComponentPrivate->pParams);
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*free(pComponentPrivate->pParams);
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          pComponentPrivate->pParams = NULL;*/
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_G722MEMFREE_STRUCT(pComponentPrivate->pParams);
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->strmAttr) {
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->strmAttr);
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pComponentPrivate->strmAttr);
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->strmAttr = NULL;
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("Exiting Successfully G722ENC_CleanupInitParams()\n");
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722ENC_StopComponentThread() This function is called by the component during
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * de-init to close component thread.
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_StopComponentThread(OMX_HANDLETYPE pComponent)
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE threadError = OMX_ErrorNone;
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int pthreadError = 0;
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate = (G722ENC_COMPONENT_PRIVATE *)
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle->pComponentPrivate;
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsStopping = 1;
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthreadError = pthread_join (pComponentPrivate->ComponentThread,
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 (void*)&threadError);
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != pthreadError)
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("OMX_ErrorHardware.\n");
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError)
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("OMX_ErrorInsufficientResources.\n");
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("Exiting StopComponentThread - Returning = 0x%x\n", eError);
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722ENC_HandleCommand() This function is called by the component when ever it
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the command from the application
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate  Component private data
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722ENC_HandleCommand (G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMMANDTYPE command;
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE commandedState = OMX_StateInvalid;
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 commandData = 0;
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pLcmlHandle;
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: >>> Entering G722ENC_HandleCommand Function3\n",__LINE__);
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    read (pComponentPrivate->cmdPipe[0], &command, sizeof (command));
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData));
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (command == OMX_CommandStateSet) {
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        commandedState = (OMX_STATETYPE)commandData;
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        switch(commandedState) {
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateIdle:
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_CommandToIdle(pComponentPrivate);
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateExecuting:
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_CommandToExecuting(pComponentPrivate);
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateLoaded:
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_CommandToLoaded(pComponentPrivate);
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StatePause:
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_CommandToPause(pComponentPrivate);
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateWaitForResources:
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_CommandToWaitForResources(pComponentPrivate);
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateInvalid:
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd OMX_StateInvalid:\n",__LINE__);
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == commandedState){
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler (
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        pHandle, pHandle->pApplicationPrivate,
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        OMX_EventError, OMX_ErrorSameState,0,
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                        NULL);
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d :: Error: Same State Given by \
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           Application\n",__LINE__);
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateInvalid;
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError, OMX_ErrorInvalidState,0, NULL);
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        case OMX_StateMax:
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd OMX_StateMax::\n",__LINE__);
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } /* End of Switch */
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandMarkBuffer) {
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__);
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!pComponentPrivate->pMarkBuf){
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("command OMX_CommandMarkBuffer received %d\n",__LINE__);
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* TODO Need to handle multiple marks */
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData);
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandPortDisable) {
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pComponentPrivate->bDisableCommandPending) {
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("I'm here Line %d\n",__LINE__);
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x0 || commandData == -1){
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* disable port */
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = OMX_FALSE;
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x1 || commandData == -1){
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                char *pArgs = "damedesuStr";
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = OMX_FALSE;
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateExecuting) {
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bNoIdleOnStop = OMX_TRUE;
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0) {
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(!pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated){
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if input unpopulated */
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_INPUT_PORT, NULL);
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1) {
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated){
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if output unpopulated */
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_OUTPUT_PORT, NULL);
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == -1) {
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated &&
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                !pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated){
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if inout & output unpopulated */
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_INPUT_PORT, NULL);
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,G722ENC_OUTPUT_PORT, NULL);
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandPortEnable) {
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0 || commandData == -1){
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* enable in port */
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("setting input port to enabled\n");
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = OMX_TRUE;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("WAKE UP!! HandleCommand: En utils setting output port to enabled. \n");
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->AlloBuf_waitingsignal)
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->AlloBuf_waitingsignal = 0;
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Sending signal to Allocate Buffer Task. */
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled);
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1 || commandData == -1){
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* enable out port */
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->AlloBuf_waitingsignal)
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->AlloBuf_waitingsignal = 0;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Sending signal to Allocate Buffer Task. */
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                char *pArgs = "damedesuStr";
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = LCML_ControlCodec(
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           EMMCodecControlStart,(void *)pArgs);
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("setting output port to enabled\n");
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = OMX_TRUE;
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled = %d\n",pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled);
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        while (1) {
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("commandData = %d\n",commandData);
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("pComponentPrivate->curState = %d\n",pComponentPrivate->curState);
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated = %d\n",pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated);
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x0 && (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated)){
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_INPUT_PORT, NULL);
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(commandData == 0x1 && (pComponentPrivate->curState == OMX_StateLoaded || pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated)){
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_OUTPUT_PORT, NULL);
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(commandData == -1 && (pComponentPrivate->curState == OMX_StateLoaded || (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bPopulated
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                                             && pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated))){
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_INPUT_PORT, NULL);
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,G722ENC_OUTPUT_PORT, NULL);
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_Fill_LCMLInitParamsEx(pHandle);
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandFlush) {
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0 || commandData == -1){
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < G722ENC_MAX_NUM_OF_BUFS; i++) {
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufHdrPending[i] = NULL;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nNumInputBufPending=0;
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle,
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pInputBufferList->pBufHdr[i]
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           );
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* return all input buffers */
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandFlush,G722ENC_INPUT_PORT, NULL);
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1 || commandData == -1){
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < G722ENC_MAX_NUM_OF_BUFS; i++) {
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufHdrPending[i] = NULL;
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nNumOutputBufPending=0;
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* return all output buffers */
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle,
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufferList->pBufHdr[i]
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          );
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandFlush,G722ENC_OUTPUT_PORT, NULL);
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Exiting NBAMRDECG722ENC_HandleCommand Function\n",__LINE__);
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Returning %x\n",__LINE__,eError);
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722ENC_HandleDataBuf_FromApp() This function is called by the component when ever it
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * receives the buffer from the application
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate  Component private data
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHeader Buffer from the application
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader,
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DIRTYPE eDir;
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Entering G722ENC_HandleDataBuf_FromApp Function\n",__LINE__);
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G722ENC_GetBufferDirection(pBufHeader, &eDir, pComponentPrivate);
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: The pBufHeader is not found in the list\n",__LINE__);
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->dasfmode == 0) {
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if ((pBufHeader->nFilledLen > 0) || (pBufHeader->nFlags == OMX_BUFFERFLAG_EOS)) {
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bBypassDSP = 0;
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("%d Comp:: Sending Filled Input buffer = %p, %p to LCML\n", __LINE__,pBufHeader,pBufHeader->pBuffer);
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = G722ENC_GetCorresponding_LCMLHeader(pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr);
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Store time stamp information */
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp;
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Store nTickCount information */
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount;
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->IpBufindex++;
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[OMX_DirOutput]->nBufferCountActual;
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pIpParam->bLastBuffer = 1;
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else{
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pIpParam->bLastBuffer = 0;
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateExecuting) {
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!pComponentPrivate->bDspStoppedWhileExecuting) {
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) {
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput);
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = LCML_QueueBuffer( pLcmlHandle->pCodecinterfacehandle,
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       EMMCodecInputBuffer,
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pBufHeader->pBuffer,
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pBufHeader->nAllocLen,
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pBufHeader->nFilledLen,
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       (OMX_U8 *) pLcmlHdr->pIpParam,
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       sizeof(G722ENC_UAlgInBufParamStruct),
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pBufHeader->pBuffer);
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if (eError != OMX_ErrorNone) {
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                G722ENC_DPRINT ("%d ::Comp: SetBuff: IP: Error Occurred\n",__LINE__);
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = OMX_ErrorHardware;
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                goto EXIT;
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else{
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pHandle,
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pBufHeader
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   );
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->lcml_nIpBuf++;
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT ("Sending Input buffer to Codec\n");
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("Queueing pending input buffers\n");
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader;
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bBypassDSP = 1;
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle,
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufferList->pBufHdr[0]
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          );
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT ("Forcing EmptyBufferDone\n");
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle,
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pInputBufferList->pBufHdr[0]
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           );
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d :: Comp: EOF Flag Has Been Set Here\n",__LINE__);
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pComponentPrivate->dasfmode == 0) {
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags |= OMX_BUFFERFLAG_EOS;
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventBufferFlag,
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pOutputBufferList->pBufHdr[0]->nOutputPortIndex,
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pOutputBufferList->pBufHdr[0]->nFlags, NULL);
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* pBufHeader->nFlags = 0; */
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBufHeader->pMarkData){
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* copy mark to output buffer header */
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData;
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* trigger event handler if we are supposed to */
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate_CC->cbInfo.EventHandler(pComponentPrivate->pHandle,
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pComponentPrivate->pHandle->pApplicationPrivate,
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              OMX_EventMark,
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              0,
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              0,
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pBufHeader->pMarkData);
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (eDir == OMX_DirOutput) {
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d Comp:: Sending Emptied Output buffer=%p to LCML\n",
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        __LINE__,pBufHeader);
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d : pComponentPrivate->lcml_nOpBuf = %ld\n",__LINE__,
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->lcml_nOpBuf);
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d : pComponentPrivate->lcml_nIpBuf = %ld\n",__LINE__,
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->lcml_nIpBuf);
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE *) pComponentPrivate->pLcmlHandle;
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = G722ENC_GetCorresponding_LCMLHeader(pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr);
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!(pComponentPrivate->bIsStopping)) {
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bBypassDSP == 0) {
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateExecuting) {
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) {
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput);
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = LCML_QueueBuffer(
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pLcmlHandle->pCodecinterfacehandle,
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  EMMCodecOuputBuffer,
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer,
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->nAllocLen,
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  0,
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  NULL,
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  0,
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer);
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (eError != OMX_ErrorNone ) {
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722ENC_DPRINT ("%d :: Comp:: SetBuff OP: Error Occurred\n",__LINE__);
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_ErrorHardware;
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nOpBuf++;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                else {
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!G722ENC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput)) {
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput);
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_QueueBuffer(
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pLcmlHandle->pCodecinterfacehandle,
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              EMMCodecOuputBuffer,
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pBufHeader->pBuffer,
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pBufHeader->nAllocLen,
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              0,
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              NULL,
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              0,
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pBufHeader->pBuffer);
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone ) {
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722ENC_DPRINT ("%d :: Comp:: SetBuff: OP: Error Occurred\n",__LINE__);
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = OMX_ErrorHardware;
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->lcml_nOpBuf++;
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("Queueing output buffer\n");
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d : BufferHeader %p, Buffer %p Unknown ..........\n",
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__,pBufHeader, pBufHeader->pBuffer);
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d : Exiting from  G722ENC_HandleDataBuf_FromApp \n",__LINE__);
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * G722ENC_GetBufferDirection () This function is used by the component thread to
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * request a buffer from the application.  Since it was called from 2 places,
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * it made sense to turn this into a small function.
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pData pointer to G722 Encoder Context Structure
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pCur pointer to the buffer to be requested to be filled
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval none
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         OMX_DIRTYPE *eDir,
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBuf = NULL;
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 flag = 1,i = 0;
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nBuf = 0;
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nBuf = pComponentPrivate->pInputBufferList->numBuffers;
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i];
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHeader == pBuf) {
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *eDir = OMX_DirInput;
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Buffer %p is INPUT BUFFER\n",__LINE__, pBufHeader);
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            flag = 0;
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*Search this buffer in input buffers list */
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nBuf = pComponentPrivate->pOutputBufferList->numBuffers;
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHeader == pBuf) {
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *eDir = OMX_DirOutput;
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Buffer %p is OUTPUT BUFFER\n",__LINE__, pBufHeader);
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            flag = 0;
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (flag == 1) {
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: Buffer %p is Not Found in the List\n",__LINE__,pBufHeader);
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Exiting G722ENC_GetBufferDirection Function\n",__LINE__);
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  Callback() function will be called LCML component to write the msg
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param msgBuffer                 This buffer will be returned by the LCML
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_LCML_Callback (TUsnCodecEvent event,void * args [10])
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pBuffer = args[1];
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = pComponentPrivate_CC->pHandle;
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(event) {
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspError:
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspError\n");
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInternalError:
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInternalError\n");
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInitError:
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInitError\n");
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspMessageRecieved:
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspMessageRecieved\n");
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferProcessed:
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferProcessed\n");
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStarted:
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStarted\n");
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingPaused:
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingPaused\n");
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStoped:
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStoped\n");
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingEof:
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingEof\n");
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferNotProcessed:
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferNotProcessed\n");
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecAlgCtrlAck:
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecAlgCtrlAck\n");
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecStrmCtrlAck:
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecStrmCtrlAck\n");
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    default:
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("[LCML CALLBACK EVENT]  Got event = %d\n",event);
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT(" %d EMMCodecInputBuffer = %p \n",__LINE__,(void *)EMMCodecInputBuffer);
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT(" %d EMMCodecOuputBuffer = %p \n",__LINE__,(void *)EMMCodecOuputBuffer);
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Entering the G722ENC_LCML_Callback() : event = %d\n",__LINE__,event);
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(event == EMMCodecBufferProcessed) {
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( args[0] == (void *)EMMCodecInputBuffer) {
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT (" :: Inside the G722ENC_LCML_Callback EMMCodecInputBuffer\n");
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Input: pBufferr = %p\n",__LINE__, pBuffer);
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722ENC_GetCorresponding_LCMLHeader(pBuffer, OMX_DirInput, &pLcmlHdr);
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_ClearPending(pComponentPrivate_CC,pLcmlHdr->pBufHdr,OMX_DirInput);
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Input: pLcmlHeader = %p\n",__LINE__, pLcmlHdr);
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* >>>>>>>>>>>>>>>>>>>>>>>>>>> */
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate_CC->dasfmode == 0) {
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->lcml_nIpBuf--;
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d: Component Sending Empty Input buffer%p to App\n",__LINE__, pLcmlHdr->pBufHdr->pBuffer);
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->cbInfo.EmptyBufferDone (
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pHandle,
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pHandle->pApplicationPrivate,
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pLcmlHdr->pBufHdr
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              );
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->app_nBuf++;
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* <<<<<<<<<<<<<<<<<<<<<<<<<<< */
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if (args[0] == (void *)EMMCodecOuputBuffer) {
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!G722ENC_IsValid(pComponentPrivate_CC,pBuffer,OMX_DirOutput)) {
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* If the buffer we get back from the DSP is not valid call FillBufferDone
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   on a valid buffer */
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->cbInfo.FillBufferDone (
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pComponentPrivate_CC->pHandle,
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pComponentPrivate_CC->pHandle->pApplicationPrivate,
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pComponentPrivate_CC->pOutputBufferList->pBufHdr[pComponentPrivate_CC->nInvalidFrameCount++]
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             );
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->nOutStandingFillDones++;
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("Incrementing pComponentPrivate->nOutStandingFillDones Line %d\n",__LINE__);
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d::pComponentPrivate_CC->nOutStandingFillDones = %d\n",__LINE__,pComponentPrivate_CC->nOutStandingFillDones);
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = G722ENC_GetCorresponding_LCMLHeader(pBuffer, OMX_DirOutput, &pLcmlHdr);
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_ClearPending(pComponentPrivate_CC,pLcmlHdr->pBufHdr,OMX_DirOutput);
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_DPRINT("%d :: Error: Invalid Buffer Came ...\n",__LINE__);
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pLcmlHdr->pBufHdr->nFilledLen = (int)args[8];
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d :: Output: pLcmlHeader = %p\n",__LINE__, pLcmlHdr);
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->lcml_nCntOpReceived++;
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* >>>>>>>>>>>>>>>>>>>>>>> */
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->lcml_nOpBuf--;
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d: Component Sending Filled Output buffer%p to App\n",__LINE__,pLcmlHdr->pBufHdr->pBuffer);
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("[FillBufferDone] Call #%d Line %d\n",++FillBufferDoneCount,__LINE__);
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->cbInfo.FillBufferDone (
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pHandle,
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pHandle->pApplicationPrivate,
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             pLcmlHdr->pBufHdr
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                             );
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->app_nBuf++;
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->nOutStandingFillDones--;
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("Decrementing pComponentPrivate->nOutStandingFillDones Line %d\n",__LINE__);
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d::pComponentPrivate->nOutStandingFillDones = %d\n",__LINE__,pComponentPrivate_CC->nOutStandingFillDones);
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* <<<<<<<<<<<<<<<<<<<<<<< */
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(event == EMMCodecProcessingStoped) {
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pComponentPrivate_CC->bNoIdleOnStop) {
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->bIdleCommandPending = OMX_TRUE;
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->curState = OMX_StateIdle;
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate_CC->bPreempted == 0) {
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pHandle->pApplicationPrivate,
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          OMX_EventCmdComplete,
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          OMX_CommandStateSet,
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate_CC->curState,
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          NULL);
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pHandle->pApplicationPrivate,
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          OMX_EventError,
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          OMX_ErrorResourcesPreempted,
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          0,
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          NULL);
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->bIdleCommandPending = OMX_FALSE;
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("setting bDspStoppedWhileExecuting\n");
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->bDspStoppedWhileExecuting = OMX_TRUE;
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->bNoIdleOnStop= OMX_FALSE;
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(event == EMMCodecAlgCtrlAck) {
1631b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        G722ENC_DPRINT ("GOT MESSAGE USN_DSPACK_ALGCTRL \n");
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (event == EMMCodecDspError) {
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((int)args[4] == 1) && ((int)args[5] == 0x500)) {
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Comp: Inside the G722ENC_LCML_Callback: USN_DSPMSG_ERROR \n", __LINE__);
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate_CC->pLcmlHandle;
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("Setting current state Idle Line %d\n",__LINE__);
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->curState = OMX_StateIdle;
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      OMX_EventCmdComplete, OMX_CommandStateSet,
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pComponentPrivate_CC->curState, NULL);
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: G722ENC: State has been Set to Idle\n", __LINE__);
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((int)args[4] == 1) && ((int)args[5] == 0x0300)) {
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Comp: Inside the G722ENC_LCML_Callback: USN_DSPMSG_ERROR \n", __LINE__);
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      OMX_EventError, OMX_ErrorOverflow,
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pComponentPrivate_CC->curState, NULL);
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((int)args[4] == USN_ERR_WARNING) &&
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           ((int)args[5] == IUALG_WARN_PLAYCOMPLETED)) {
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate_CC->cbInfo.EventHandler(pHandle,
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pHandle->pApplicationPrivate,
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      OMX_EventBufferFlag,
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      (OMX_U32)NULL,
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      OMX_BUFFERFLAG_EOS,
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      NULL);
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (event == EMMCodecStrmCtrlAck) {
1663b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        G722ENC_DPRINT("%d :: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n",__LINE__);
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->bStreamCtrlCalled = 1;
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (event == EMMCodecProcessingPaused) {
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->curState = OMX_StatePause;
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  OMX_EventCmdComplete, OMX_CommandStateSet,
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pComponentPrivate_CC->curState, NULL);
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Exiting the G722ENC_LCML_Callback() \n",__LINE__);
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  G722ENC_GetCorresponding_LCMLHeader() function will be called by G722ENC_LCML_Callback
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *                                 component to write the msg
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer,          Event which gives to details about USN status
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param LCML_NBAMRENC_BUFHEADERTYPE **ppLcmlHdr
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_NoError              Success, ready to roll
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *         OMX_Error_BadParameter   The input parameter pointer is null
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin **/
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_GetCorresponding_LCMLHeader(OMX_U8 *pBuffer,
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  OMX_DIRTYPE eDir,
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  G722ENC_LCML_BUFHEADERTYPE **ppLcmlHdr)
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pLcmlBufHeader = NULL;
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIpBuf = pComponentPrivate_CC->pInputBufferList->numBuffers;
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nOpBuf = pComponentPrivate_CC->pOutputBufferList->numBuffers;
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Entering the G722ENC_GetCorresponding_LCMLHeader()\n",__LINE__);
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eDir == OMX_DirInput) {
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G722ENC_INPUT_PORT];
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nIpBuf; i++) {
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__);
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlBufHeader++;
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (eDir == OMX_DirOutput) {
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate_CC->pLcmlBufHeader[G722ENC_OUTPUT_PORT];
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nOpBuf; i++) {
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d::Corresponding LCML Header Found\n",__LINE__);
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlBufHeader++;
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d:: Invalid Buffer Type :: exiting...\n",__LINE__);
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: Exiting the G722ENC_GetCorresponding_LCMLHeader() \n",__LINE__);
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  G722ENC_GetLCMLHandle()
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @retval OMX_HANDLETYPE
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin -------------------------------------------------------------------*/
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722ENC_GetLCMLHandle()
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    void *handle = NULL;
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE);
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *error = NULL;
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    handle = dlopen("libLCML.so", RTLD_LAZY);
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!handle) {
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(dlerror(), stderr);
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle = dlsym (handle, "GetHandle");
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((error = dlerror()) != NULL) {
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(error, stderr);
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = (*fpGetHandle)(&pHandle);
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("eError != OMX_ErrorNone...\n");
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate_CC->lcml_handle = handle;
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate_CC->bLcmlHandleOpened = 1;
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin//WINDOWS Explicit dll load procedure
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722ENC_GetLCMLHandle()
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HINSTANCE hDLL;               // Handle to DLL
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LPFNDLLFUNC1 fpGetHandle1;
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0);
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (hDLL == NULL)
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //fputs(dlerror(), stderr);
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("BML Load Failed!!!\n");
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle"));
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!fpGetHandle1)
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // handle the error
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeLibrary(hDLL);
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // call the function
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = fpGetHandle1(&pHandle);
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        AMRDEC_DPRINT("eError != OMX_ErrorNone...\n");
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_FreeLCMLHandle()
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int retValue = 0;
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate_CC->bLcmlHandleOpened) {
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        retValue = dlclose(pComponentPrivate_CC->lcml_handle);
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (retValue != 0) {
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->bLcmlHandleOpened = 0;
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_FreeLCMLHandle()
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int retValue = 0;
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate_CC->bLcmlHandleOpened) {
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        retValue = FreeLibrary(pComponentPrivate_CC->pLcmlHandle);
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (retValue == 0) {          /* Zero Indicates failure */
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = OMX_ErrorUndefined;
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate_CC->bLcmlHandleOpened = 0;
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CommandToIdle() description for G722ENC_CommandToIdle
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CommandToIdle().
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Idle
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CommandToIdle(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_CALLBACKTYPE cb;
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP *pLcmlDsp =  NULL;
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *p = "damedesuStr";
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G722ENC_DEBUG
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_CODEC_INTERFACE *pp = NULL;
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Idle \n",__LINE__);
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateIdle){
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorSameState,0,
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StateLoaded ||
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin             pComponentPrivate->curState == OMX_StateWaitForResources) {
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->dasfmode == 1)
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->streamID == 0)
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorInsufficientResources;
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("OMX_ErrorInsufficientResources.\n");
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateInvalid;
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError, OMX_ErrorInvalidState,0, NULL);
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->bEnabled == OMX_TRUE
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            && pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bEnabled == OMX_TRUE)
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!(pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated)
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                && !(pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->bPopulated))
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->InLoaded_readytoidle = 1;
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_wait(&pComponentPrivate->InLoaded_threshold,
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  &pComponentPrivate->InLoaded_mutex);
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event));
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (OMX_HANDLETYPE) G722ENC_GetLCMLHandle();
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pLcmlHandle == NULL)
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("LCML Handle is NULL........exiting..\n");
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Got handle of dsp via phandle filling information about DSP Specific things */
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = G722ENC_Fill_LCMLInitParams(pHandle, pLcmlDsp);
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone)
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("from G722ENCFill_LCMLInitParams().\n");
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle;
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cb.LCML_Callback = (void *) G722ENC_LCML_Callback;
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    p, &pLcmlHandle, (void *)p,
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    &cb, (OMX_STRING)pComponentPrivate->sDeviceString);
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  p, &pLcmlHandle, (void *)p,
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                  &cb);
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone)
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        {
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("from LCML_Init().\n");
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Enable the Hashing Code */
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, OMX_TRUE);
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("Failed to set Mapping State\n");
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateIdle;
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        PERF_Boundary(pComponentPrivate->pPERFcomp,
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                      PERF_BoundaryComplete | PERF_BoundarySetup);
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pHandle,
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pHandle->pApplicationPrivate,
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_CommandStateSet,
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pComponentPrivate->curState,
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               NULL);
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StateExecuting) {
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Hashing Change*/
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* clear out any mappings that might have accumulated */
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            prinft("Error occurred in Codec mapping flush!\n");
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: In G722ENC_HandleCommand: Stopping the codec\n",__LINE__);
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: Calling Codec Stop..\n");
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   MMCodecControlStop,(void *)pArgs);
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("Called Codec Stop..\n");
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d: Error Occurred in Codec Stop..\n",__LINE__);
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: The component is stopped\n",__LINE__);
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*      pComponentPrivate->bIdleCommandPending = 1;*/
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if(pComponentPrivate->curState == OMX_StatePause) {
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Hashing Change*/
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* clear out any mappings that might have accumulated */
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("Error occurred in Codec mapping flush!\n");
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Comp: Stop Command Received\n",__LINE__);
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateIdle;
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT ("%d :: The component is stopped\n",__LINE__);
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete, OMX_CommandStateSet, pComponentPrivate->curState, NULL);
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: Comp: Sending ErrorNotification: Invalid State\n",__LINE__);
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pHandle,
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pHandle->pApplicationPrivate,
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventError,
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_ErrorIncorrectStateTransition, 0,
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               "Invalid State Error");
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CommandToLoaded() description for G722ENC_CommandToLoaded
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CommandToLoaded().
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Loaded
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CommandToLoaded(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Loaded\n",__LINE__);
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateLoaded){
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorSameState,0,
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateWaitForResources ) {
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateLoaded;
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventCmdComplete, OMX_CommandStateSet,pComponentPrivate->curState,
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Transitioning from WaitFor to Loaded\n",__LINE__);
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState != OMX_StateIdle) {
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                "Invalid State");
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENCUTILS::Current State = %d\n",__LINE__,pComponentPrivate->curState);
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("pComponentPrivate->pInputBufferList->numBuffers = %d\n",pComponentPrivate->pInputBufferList->numBuffers);
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %d\n",pComponentPrivate->pOutputBufferList->numBuffers);
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pInputBufferList->numBuffers ||
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pOutputBufferList->numBuffers){
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->InIdle_goingtoloaded = 1;
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_cond_wait(&pComponentPrivate->InIdle_threshold, &pComponentPrivate->InIdle_mutex);
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_WaitForEvent(&(pComponentPrivate->InIdle_event));
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateLoaded;
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("About to destroy codec\n");
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = LCML_ControlCodec(
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               EMMCodecControlDestroy,(void *)pArgs);
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("Finished destroying codec\n");
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bStreamCtrlCalled = 0;
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d : Error: in Destroying the codec\n",__LINE__);
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pCreatePhaseArgs == NULL) {
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pCreatePhaseArgs);
2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pComponentPrivate->pCreatePhaseArgs);
2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pCreatePhaseArgs = NULL;
2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT];
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<pComponentPrivate->noInitInputBuf; i++) {
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pTemp_lcml->pIpParam) {
2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml->pIpParam);
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pTemp_lcml->pIpParam);
2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp_lcml->pIpParam = NULL;
2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT ("%d :: G722ENC_CleanupInitParams()\n", __LINE__);
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = %p\n",pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]) {
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT]);
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = NULL;
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("freeing pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = 0x%x\n",pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = %p\n",pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]) {
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT]);
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = NULL;
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->strmAttr) {
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pComponentPrivate->strmAttr);
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(pComponentPrivate->strmAttr);
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->strmAttr = NULL;
2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = EXIT_COMPONENT_THRD;
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 0;
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CommandToExecuting() description for G722ENC_CommandToExecuting
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CommandToExecuting().
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Executing
2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CommandToExecuting(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBufHdr = NULL;
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nBuf = 0;
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Executing \n",__LINE__);
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bBypassDSP = 0;
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateExecuting){
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorSameState,0,
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Same State Given by \
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               Application\n",__LINE__);
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StateIdle) {
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->dasfmode == 1 && pComponentPrivate->bStreamCtrlCalled == 0) {
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: G722 ENCODER IS RUNNING UNDER DASF MODE\n",__LINE__);
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: ---- Comp: DASF Functionality is ON ---\n",__LINE__);
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pParams->iAudioFormat = (unsigned short)pComponentPrivate->g722Params->nChannels;
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pParams->iStrmId = pComponentPrivate->streamID;
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pParams->iSamplingRate = G722ENC_SAMPLE_RATE;
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iAudioFormat   = %d\n",__LINE__,pComponentPrivate->pParams->iAudioFormat);
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iSamplingRate  = %d\n",__LINE__,pComponentPrivate->pParams->iSamplingRate);
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d ::pComponentPrivate->pParams->iStrmId = %d\n",__LINE__,pComponentPrivate->pParams->iStrmId);
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pValues[0] = USN_STRMCMD_SETCODECPARAMS;
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pValues[1] = (OMX_U32)pComponentPrivate->pParams;
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pValues[2] = sizeof(G722ENC_AudioCodecParams);
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       EMMCodecControlStrmCtrl,(void *)pValues);
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("%d: Error Occurred in Codec StreamControl..\n",__LINE__);
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   EMMCodecControlStart,(void *)pArgs);
2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(eError != OMX_ErrorNone) {
2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d: Error Occurred in Codec Start..\n",__LINE__);
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nBuf = pComponentPrivate->pInputBufferList->numBuffers;
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->dasfmode == 0) {
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Comp :: After LCML_StartCodec function \n",__LINE__);
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nBuf = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferCountActual;
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pBufHdr = pComponentPrivate->pBufHeader[G722ENC_INPUT_PORT];
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Comp :: After LCML_StartCodec function \n",__LINE__);
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("Sending Input buffer to Application\n");
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("%d :: Component Sending Input buffer to Application %p\n",__LINE__, pBufHdr);
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlHdr = pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT];
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StatePause) {
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: Comp: Resume Command Came from App\n",__LINE__);
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = LCML_ControlCodec(
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   EMMCodecControlStart,(void *)pArgs);
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT ("Error While Resuming the codec\n");
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("pComponentPrivate->nNumInputBufPending = %d\n",pComponentPrivate->nNumInputBufPending);
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->nNumInputBufPending < pComponentPrivate->pInputBufferList->numBuffers) {
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nNumInputBufPending = pComponentPrivate->pInputBufferList->numBuffers;
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->pInputBufHdrPending[i]) {
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!G722ENC_IsPending(pComponentPrivate, pComponentPrivate->pInputBufHdrPending[i], OMX_DirInput)) {
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_GetCorresponding_LCMLHeader(pComponentPrivate->pInputBufHdrPending[i]->pBuffer, OMX_DirInput, &pLcmlHdr);
2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput);
2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_QueueBuffer(
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              EMMCodecInputBuffer,
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              (OMX_U8 *) pLcmlHdr->pIpParam,
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              sizeof(G722ENC_UAlgInBufParamStruct),
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pInputBufHdrPending[i]->pBuffer);
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->pOutputBufHdrPending[i]) {
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!G722ENC_IsPending(pComponentPrivate, pComponentPrivate->pOutputBufHdrPending[i], OMX_DirOutput)) {
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_GetCorresponding_LCMLHeader(pComponentPrivate->pOutputBufHdrPending[i]->pBuffer, OMX_DirOutput, &pLcmlHdr);
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722ENC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],OMX_DirOutput);
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_QueueBuffer(
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              EMMCodecOuputBuffer,
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen,
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              NULL,
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              0,
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              pComponentPrivate->pOutputBufHdrPending[i]->pBuffer);
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                "Invalid State");
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StateExecuting;
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->cbInfo.EventHandler(pHandle,
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pHandle->pApplicationPrivate,
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           OMX_EventCmdComplete,
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           OMX_CommandStateSet, pComponentPrivate->curState, NULL);
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CommandToPause() description for G722ENC_CommandToPause
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CommandToPause().
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded to Paused
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CommandToPause(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd Pause: Cur State = %d\n",__LINE__,pComponentPrivate->curState);
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StatePause){
2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorSameState,0,
2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((pComponentPrivate->curState != OMX_StateExecuting) &&
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (pComponentPrivate->curState != OMX_StateIdle)) {
2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                "Invalid State");
2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Invalid State Given by Application\n",__LINE__);
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENCUTILS::About to call LCML_ControlCodec\n",__LINE__);
2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               EMMCodecControlPause,(void *)pArgs);
2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d : Error: in Pausing the codec\n",__LINE__);
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->curState = OMX_StatePause;
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*    pComponentPrivate->cbInfo.EventHandler(pHandle,
2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          pHandle->pApplicationPrivate,
2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          OMX_EventCmdComplete,
2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          OMX_CommandStateSet,
2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          pComponentPrivate->curState,
2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          NULL); */
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Component: Codec Is Paused\n",__LINE__);
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_CommandToWaitForResources() description for G722ENC_CommandToWaitForResources
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_CommandToWaitForResources().
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called by HandleCommand() when the component is commanded
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin to WaitForResources
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_CommandToWaitForResources(G722ENC_COMPONENT_PRIVATE *pComponentPrivate)
2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d: G722ENC_HandleCommand: Cmd : OMX_StateWaitForResources\n",__LINE__);
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->curState == OMX_StateWaitForResources){
2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Comp: OMX_AmrDecUtils.c\n",__LINE__);
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                pHandle, pHandle->pApplicationPrivate,
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                OMX_EventError, OMX_ErrorSameState,0,
2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                NULL);
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Error: Same State Given by Application\n",__LINE__);
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pComponentPrivate->curState == OMX_StateLoaded) {
2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->curState = OMX_StateWaitForResources;
2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d: Transitioning from Loaded to OMX_StateWaitForResources\n",__LINE__);
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pHandle, pHandle->pApplicationPrivate,
2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_CommandStateSet,pComponentPrivate->curState, NULL);
2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(
2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pHandle, pHandle->pApplicationPrivate,
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventError, OMX_ErrorIncorrectStateTransition,0, NULL);
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_SetPending() description for G722ENC_SetPending
2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_SetPending().
2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called when a buffer is queued to the LCML
2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722ENC_SetPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 1;
2475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("*******************INPUT BUFFER %d IS PENDING ******************************\n",i);
2476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1;
2483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("*******************OUTPUT BUFFER %d IS PENDING******************************\n",i);
2484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_ClearPending() description for G722ENC_ClearPending
2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_ClearPending().
2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This component is called when a buffer is returned from the LCML
2494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722ENC_ClearPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
2504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 0;
2511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("*******************INPUT BUFFER %d IS RECLAIMED******************************\n",i);
2512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0;
2519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_DPRINT("*******************OUTPUT BUFFER %d IS RECLAIMED ******************************\n",i);
2520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_IsPending() description for G722ENC_IsPending
2528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_IsPending().
2529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method returns the pending status to the buffer
2530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722ENC_IsPending(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
2540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return pComponentPrivate->pInputBufferList->bBufferPending[i];
2547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return pComponentPrivate->pOutputBufferList->bBufferPending[i];
2554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return -1;
2558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_Fill_LCMLInitParamsEx() description for G722ENC_Fill_LCMLInitParamsEx
2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_Fill_LCMLInitParamsEx().
2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method fills the LCML init parameters.
2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722ENC_Fill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent)
2575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
2578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp = NULL;
2579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
2580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate;
2581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_STRMATTR *strmAttr = NULL;
2582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
2583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 size_lcml = 0;
2585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: G722ENCFill_LCMLInitParamsEx\n ",__LINE__);
2587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("[G722ENC_Fill_LCMLInitParamsEx] pComponent = %p\n",pComponent);
2588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("[G722ENC_Fill_LCMLInitParamsEx] pComponentPrivate = %p\n",pComponentPrivate);
2589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
2592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[G722ENC_INPUT_PORT]->nBufferSize;
2593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
2594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[G722ENC_OUTPUT_PORT]->nBufferSize;
2595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: ------ Buffer Details -----------\n",__LINE__);
2597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Input  Buffer Count = %ld\n",__LINE__,nIpBuf);
2598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Input  Buffer Size = %ld\n",__LINE__,nIpBufSize);
2599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Output Buffer Count = %ld\n",__LINE__,nOpBuf);
2600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Output Buffer Size = %ld\n",__LINE__,nOpBufSize);
2601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: ------ Buffer Details ------------\n",__LINE__);
2602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Allocate memory for all input buffer headers..
2604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     * This memory pointer will be sent to LCML */
2605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nIpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
2606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
2607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_MEMPRINT("%d :: [ALLOC] %p\n",__LINE__,pTemp_lcml);
2608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp_lcml == NULL) {
2609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
2610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722ENC_INPUT_PORT] = pTemp_lcml;
2614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nIpBuf; i++) {
2615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: INPUT--------- Inside Ip Loop\n",__LINE__);
2616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
2617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nIpBufSize;
2619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nIpBufSize;
2620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
2621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
2622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
2623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = NOT_USED;
2624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
2625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: pTemp_lcml->pBufHdr->pBuffer = %p \n",__LINE__,pTemp_lcml->pBufHdr->pBuffer);
2626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirInput;
2627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
2628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pIpParam = (G722ENC_UAlgInBufParamStruct *)malloc(sizeof(G722ENC_UAlgInBufParamStruct));
2629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml->pIpParam);
2631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pTemp_lcml->pIpParam == NULL) {
2632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Free previously allocated memory before bailing */
2633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (strmAttr) {
2634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
2635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(strmAttr);
2636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                strmAttr = NULL;
2637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pTemp_lcml) {
2641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,pTemp_lcml);
2642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                free(pTemp_lcml);
2643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pTemp_lcml = NULL;
2644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_DPRINT("%d :: Error: Malloc Failed...Exiting..\n",__LINE__);
2647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pIpParam->bLastBuffer = 0;
2650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
2652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722ENC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
2653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: InBuffHeader[%d] = %p\n", __LINE__, i, pTemp);
2654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>> InputBuffHeader[%d]->pBuffer = %p\n",
2655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp->pBuffer);
2656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: Ip : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
2657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp = pComponentPrivate->pBufHeader[G722ENC_OUTPUT_PORT];
2662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nOpBuf * sizeof(G722ENC_LCML_BUFHEADERTYPE);
2663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = (G722ENC_LCML_BUFHEADERTYPE *)malloc(size_lcml);
2664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_MEMPRINT("%d:::[ALLOC] %p\n",__LINE__,pTemp_lcml);
2665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pTemp_lcml == NULL) {
2666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d :: Memory Allocation Failed\n",__LINE__);
2667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
2668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (strmAttr) {
2669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722ENC_MEMPRINT("%d:::[FREE] %p\n",__LINE__,strmAttr);
2670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(strmAttr);
2671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            strmAttr = NULL;
2672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722ENC_OUTPUT_PORT] = pTemp_lcml;
2678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nOpBuf; i++) {
2680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
2681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nOpBufSize;
2683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nOpBufSize;
2684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722ENC_MAJOR_VER;
2685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722ENC_MINOR_VER;
2686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->nVersion = pTemp->nVersion.nVersion;
2687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
2688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = NOT_USED;
2689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
2690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirOutput;
2691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
2692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
2694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722ENC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
2695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>>>>>>>>>>> OutBuffHeader[%d] = %p\n",
2696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp);
2697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp:  >>>> OutBuffHeader[%d]->pBuffer = %p\n",
2698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       __LINE__, i, pTemp->pBuffer);
2699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722ENC_DPRINT("%d ::Comp: Op : pTemp_lcml[%d] = %p\n", __LINE__, i, pTemp_lcml);
2700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp++;
2701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
2704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722ENC_DPRINT("%d :: Exiting G722ENC_Fill_LCMLInitParams",__LINE__);
2706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
2708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= */
2714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722ENC_IsValid() description for G722ENC_Fill_LCMLInitParamsEx
2716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin G722ENC_IsValid().
2717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin This method checks to see if a buffer returned from the LCML is valid.
2718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent  handle for this instance of the component
2719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre
2721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post
2723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return OMX_ERRORTYPE
2725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ */
2727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722ENC_IsValid(G722ENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir)
2728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int found=0;
2731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) {
2735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                found = 1;
2736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) {
2742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                found = 1;
2743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return found;
2747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2749