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_G722Dec_Utils.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This file implements various utilitiy functions for various activities
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * like handling command from application, callback from LCML etc.
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @path  $(CSLPATH)\OMAPSW_MPU\linux\audio\src\openmax_il\g722_dec\src
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @rev  1.0
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! Revision History
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! ===================================
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 21-sept-2006 bk: updated some review findings for alpha release
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 24-Aug-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests some more
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! 18-July-2006 bk: Khronos OpenMAX (TM) 1.0 Conformance tests validated for few cases
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *! This is newest file
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * =========================================================================== */
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  INCLUDE FILES
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ****************************************************************/
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/stat.h>
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dlfcn.h>
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <malloc.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <memory.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <pthread.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*------- Program Header Files -----------------------------------------------*/
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "LCML_DspCodec.h"
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_G722Dec_Utils.h"
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "g722decsocket_ti.h"
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <decode_common_ti.h>
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "usn.h"
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define HASHINGENABLE 1
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid sleep(DWORD Duration)
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Sleep(Duration);
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define G722DEC_DPRINT_ON(...)  fprintf(stdout, "%s %d::  ",__FUNCTION__, __LINE__); \
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fprintf(stdout, __VA_ARGS__);                                       \
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fprintf(stdout, "\n");
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_ComponentThread() This is component thread that keeps listening for
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * commands or event/messages/buffers from application or from LCML.
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pThreadData This is thread argument.
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Always
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid* G722DEC_ComponentThread (void* pThreadData)
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int status = 0;
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timespec tv;
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax = 0;
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fd_set rfds;
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nRet = 0;
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE* pComponentPrivate = (G722DEC_COMPONENT_PRIVATE*)pThreadData;
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = pComponentPrivate->pHandle;
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Entering ComponentThread \n");
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = pComponentPrivate->cmdPipe[0];
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->dataPipe[0] > fdmax) {
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fdmax = pComponentPrivate->dataPipe[0];
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (1) {
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_ZERO (&rfds);
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->cmdPipe[0], &rfds);
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->dataPipe[0], &rfds);
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_sec = 1;
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_nsec = 0;
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigset_t set;
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigemptyset (&set);
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sigaddset (&set, SIGALRM);
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = pselect (fdmax+1, &rfds, NULL, NULL, &tv, &set);
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 == status) {
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("\n\n\n!!!!!  Component Time Out !!!!!!!!!!!! \n");
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bExitCompThrd == 1) {
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Comp Thrd Exiting here...\n");
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if (-1 == status) {
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: Error in Select\n");
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    pHandle,pHandle->pApplicationPrivate,
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError,OMX_ErrorInsufficientResources, 0,
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    "Error from COmponent Thread in select");
159b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorInsufficientResources;
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if ((FD_ISSET (pComponentPrivate->dataPipe[0], &rfds))) {
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*                   && (pComponentPrivate->curState != OMX_StatePause)) { */
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_BUFFERHEADERTYPE *pBufHeader = NULL;
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: DATA pipe is set in Component Thread\n");
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            int ret = read(pComponentPrivate->dataPipe[0], &pBufHeader, sizeof(pBufHeader));
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (ret == -1) {
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT (":: Error while reading from the pipe\n");
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722DEC_HandleDataBuf_FromApp (pBufHeader,pComponentPrivate);
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT (":: Error From HandleDataBuf_FromApp\n");
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if (FD_ISSET (pComponentPrivate->cmdPipe[0], &rfds)) {
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: CMD pipe is set in Component Thread\n");
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nRet = G722DEC_HandleCommand (pComponentPrivate);
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nRet == EXIT_COMPONENT_THRD) {
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Exiting from Component thread\n");
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_CleanupInitParams(pHandle);
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_STATEPRINT("****************** Component State Set to Loaded\n\n");
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateLoaded;
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete,
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorNone,pComponentPrivate->curState, NULL);
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 0;
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting ComponentThread \n");
198b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return (void*)eError;
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_Fill_LCMLInitParams() fills the LCML initialization structure.
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core.
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param plcml_Init This structure is filled and sent to LCML.
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the LCML struct.
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_Fill_LCMLInitParams(OMX_HANDLETYPE pComponent,
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          LCML_DSP *plcml_Init, OMX_U16 arr[])
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i = 0;
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp = NULL;
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate =
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 size_lcml = 0;
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*int inputPortFlag=0,outputPortFlag=0;*/
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_STRMATTR *strmAttr = NULL;
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *ptemp = NULL;
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: Entered Fill_LCMLInitParams");
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bPopulated  %d \n",
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated);
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bEnabled    %d \n",
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled);
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bPopulated %d \n",
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated);
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bEnabled   %d \n",
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled);
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->strmAttr = NULL;
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeInputBuffers = nIpBuf;
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->nRuntimeOutputBuffers = nOpBuf;
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferSize;
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->nBufferSize;
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Input Buffer Count = %ld\n",nIpBuf);
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Input Buffer Size = %ld\n",nIpBufSize);
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Output Buffer Count = %ld\n",nOpBuf);
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Output Buffer Size = %ld\n",nOpBufSize);
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nBuffers = nIpBuf;
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.nSize = nIpBufSize;
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->In_BufInfo.DataTrMethod = DMM_METHOD;
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nBuffers = nOpBuf;
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.nSize = nOpBufSize;
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Out_BufInfo.DataTrMethod = DMM_METHOD;
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.nNumOfDLLs = 3;
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0,
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           sizeof(plcml_Init->NodeInfo.AllUUIDs[0].DllName));
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[1].DllName,0,
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName));
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[2].DllName,0,
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           sizeof(plcml_Init->NodeInfo.AllUUIDs[1].DllName));
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(plcml_Init->NodeInfo.AllUUIDs[0].DllName,0,
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           sizeof(plcml_Init->DeviceInfo.AllUUIDs[1].DllName));
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].uuid = &G722DECSOCKET_TI_UUID;
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[0].DllName, G722DEC_DLL_NAME);
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].uuid = &G722DECSOCKET_TI_UUID;
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[1].DllName, G722DEC_DLL_NAME);
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].uuid = &USN_TI_UUID;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char*)plcml_Init->NodeInfo.AllUUIDs[2].DllName, USN_DLL_NAME);
288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->SegID = OMX_G722DEC_DEFAULT_SEGMENT;
291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Timeout = OMX_G722DEC_SN_TIMEOUT;
292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Alignment = 0;
293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->Priority = OMX_G722DEC_SN_PRIORITY;
294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->ProfileID = 0;
296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("DLL name0 = %s\n",plcml_Init->NodeInfo.AllUUIDs[0].DllName);
298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("DLL name1 = %s\n",plcml_Init->NodeInfo.AllUUIDs[1].DllName);
299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("DLL name2 = %s\n",plcml_Init->NodeInfo.AllUUIDs[2].DllName);
300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->dasfmode == 1) {
302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef DSP_RENDERING_ON
303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Flag DSP_RENDERING_ON Must Be Defined To Use Rendering");
305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_MALLOC(strmAttr,LCML_STRMATTR);
307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->strmAttr = strmAttr;
308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: G722 DECODER IS RUNNING UNDER DASF MODE \n");
309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uSegid = OMX_G722DEC_DEFAULT_SEGMENT;
311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uAlignment = 0;
312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uTimeout = OMX_G722DEC_SN_TIMEOUT;
313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uBufsize = nOpBufSize;
314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->uNumBufs = G722D_NUM_OUTPUT_BUFFERS;
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strmAttr->lMode = STRMMODE_PROCCOPY;
316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofDevice = 1;
317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofRender = 0;
318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.AllUUIDs[0].uuid = &DCTN_TI_UUID;
319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.DspStream = strmAttr;
320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        plcml_Init->DeviceInfo.TypeofDevice = 0;
323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->dasfmode == 0){
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: FILE MODE CREATE PHASE PARAMETERS\n");
327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[0] = 2;
328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[1] = 0;
329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[2] = 0;
330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pInputBufferList->numBuffers == 0) {
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = G722D_NUM_INPUT_BUFFERS;
333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = (OMX_U16) nIpBuf;
335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[4] = 1;
338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[5] = 0;
339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pOutputBufferList->numBuffers == 0) {
340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[6] = G722D_NUM_OUTPUT_BUFFERS;
341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[6] = (OMX_U16) nOpBuf;
343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: DASF MODE CREATE PHASE PARAMETERS\n");
347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[0] = 2;
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[1] = 0;
349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[2] = 0;
350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->pInputBufferList->numBuffers == 0) {
352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = G722D_NUM_INPUT_BUFFERS;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            arr[3] = (OMX_U16) nIpBuf;
355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[4] = 1;
358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[5] = 2;
359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[6] = G722D_NUM_OUTPUT_BUFFERS;
360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* set codec selection (64kbps <-> 0 / 56kbps <-> 1 / 48kbps <-> 2) */
363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 64000) {
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[7] = 0;
365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 56000) {
366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[7] = 1;
367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (pComponentPrivate->G722Params[G722D_INPUT_PORT]->nSamplingRate == 48000) {
368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[7] = 2;
369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Free previously allocated memory before bailing */
371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*G722D_OMX_FREE(strmAttr);
372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          G722D_OMX_FREE(arr);*/
373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorBadParameter,
374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Input bit rate not supported");
375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    arr[8] = END_OF_CR_PHASE_ARGS;
377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    plcml_Init->pCrPhArgs = arr;
378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: bufAlloced = %d\n",pComponentPrivate->bufAlloced);
380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nIpBuf * sizeof(G722D_LCML_BUFHEADERTYPE);
381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE);
382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = pTemp_lcml;
384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nIpBuf; i++) {
386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("IP: pTemp->nSize = %ld\n",pTemp->nSize);
390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*pTemp->nAllocLen = nIpBufSize;*/
392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nIpBufSize;
393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER;
394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER;
395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = DONT_CARE;
398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirInput;
401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_MALLOC(pTemp_lcml->pIpParam,G722DEC_ParamStruct);
404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pIpParam->usLastFrame = 0;
405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: InBuffHeader[%ld] = %p\n", i, pTemp);
410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>> InputBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: Ip : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nOpBuf * sizeof(G722D_LCML_BUFHEADERTYPE);
417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE);
418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = pTemp_lcml;
419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nOpBuf; i++) {
421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nOpBufSize;
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER;
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER;
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = DONT_CARE;
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirOutput;
435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>>>>>>>>>>> OutBuffHeader[%ld] = %p\n", i, pTemp);
440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>> OutBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: Op : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_MALLOC_SIZE(pComponentPrivate->pParams,(sizeof(G722D_USN_AudioCodecParams) + 256),
446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          G722D_USN_AudioCodecParams);
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptemp = (OMX_U8*)pComponentPrivate->pParams;
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptemp += 128;
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pParams = (G722D_USN_AudioCodecParams*)ptemp;
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError == OMX_ErrorInsufficientResources || eError == OMX_ErrorBadParameter){
456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(strmAttr);
457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(arr);
458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pTemp_lcml);
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("Exiting G722DEC_Fill_LCMLInitParams\n");
461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722Dec_StartCompThread() starts the component thread. This is internal
467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * function of the component.
468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pHandle This is component handle allocated by the OMX core.
470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722Dec_StartCompThread(OMX_HANDLETYPE pComponent)
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate =
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = 0;
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_attr_t attr;
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    memset(&attr, 0, sizeof(attr));
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__inheritsched = PTHREAD_EXPLICIT_SCHED;
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    attr.__schedparam.__sched_priority = OMX_AUDIO_DECODER_THREAD_PRIORITY;
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Enetering  G722Dec_StartCompThread()\n");
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->lcml_nOpBuf = 0;
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->lcml_nIpBuf = 0;
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->app_nBuf = 0;
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->num_Op_Issued = 0;
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->num_Sent_Ip_Buff = 0;
502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->num_Reclaimed_Op_Buff = 0;
503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bIsEOFSent = 0;
504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pipe (pComponentPrivate->dataPipe);
506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet) {
507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Pipe Creation Failed");
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pipe (pComponentPrivate->cmdPipe);
512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet) {
513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Pipe Creation Failed");
515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pipe (pComponentPrivate->cmdDataPipe);
518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet) {
519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Pipe Creation Failed");
521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pipe (pComponentPrivate->lcml_Pipe);
524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet) {
525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Pipe Creation Failed");
527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pthread_create (&(pComponentPrivate->ComponentThread), &attr,
531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           G722DEC_ComponentThread, pComponentPrivate);
532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = pthread_create (&(pComponentPrivate->ComponentThread), NULL,
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           G722DEC_ComponentThread, pComponentPrivate);
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((0 != nRet) || (!pComponentPrivate->ComponentThread)) {
537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorInsufficientResources,
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Thread Creation Failed");
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bCompThreadStarted = 1;
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting from G722Dec_StartCompThread()\n");
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_FreeCompResources() function frees the component resources.
552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent This is the component handle.
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_FreeCompResources(OMX_HANDLETYPE pComponent)
566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate = (G722DEC_COMPONENT_PRIVATE *)
569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle->pComponentPrivate;
570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf=0, nOpBuf=0;
572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet=0;
573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: G722Dec_FreeCompResources\n");
575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":::pComponentPrivate->bPortDefsAllocated = %ld\n",
577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   pComponentPrivate->bPortDefsAllocated);
578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bPortDefsAllocated) {
579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: Closing pipess.....\n");
583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->dataPipe[0]);
585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->dataPipe[1]);
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdPipe[0]);
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdPipe[1]);
600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdDataPipe[0]);
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->cmdDataPipe[1]);
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->lcml_Pipe[0]);
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nRet = close (pComponentPrivate->lcml_Pipe[1]);
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (0 != nRet && OMX_ErrorNone == eError) {
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bPortDefsAllocated) {
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pPortDef[G722D_INPUT_PORT]);
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]);
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->G722Params[G722D_INPUT_PORT]);
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->G722Params[G722D_OUTPUT_PORT]);
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_INPUT_PORT]->pPortFormat);
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_OUTPUT_PORT]->pPortFormat);
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_INPUT_PORT]);
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pCompPort[G722D_OUTPUT_PORT]);
633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->sPortParam);
634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pPriorityMgmt);
635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pInputBufferList);
636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->pOutputBufferList);
637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pComponentPrivate->componentRole);
638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 0;
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("\n\n FreeCompResources: Destroying mutexes.\n\n");
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InLoaded_mutex);
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InLoaded_threshold);
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->InIdle_mutex);
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->InIdle_threshold);
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->AlloBuf_mutex);
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->AlloBuf_threshold);
652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InLoaded_event));
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->InIdle_event));
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DestroyEvent(&(pComponentPrivate->AlloBuf_event));
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_HandleCommand() function handles the command sent by the application.
664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * All the state transitions, except from nothing to loaded state, of the
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * component are done by this function.
666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate  This is component's private date structure.
668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               to do any said operartion.
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_HandleCommand (G722DEC_COMPONENT_PRIVATE *pComponentPrivate)
682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i = 0,ret = 0;
684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *pArgs = "damedesuStr";
686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle =
687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMMANDTYPE command;
689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_STATETYPE commandedState = OMX_StateInvalid;
690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 commandData = 0;
691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = pComponentPrivate->pLcmlHandle;
692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* L89FLUSH */
694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int numCalls = 0;
695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 arr[10] = {0};
696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: >>> Entering HandleCommand Function\n");
698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = read (pComponentPrivate->cmdPipe[0], &command, sizeof (command));
700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(ret == -1){
701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT ("%d :: Error in Reading from the Data pipe\n", __LINE__);
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ret = read (pComponentPrivate->cmdDataPipe[0], &commandData, sizeof (commandData));
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(ret == -1){
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT ("%d :: Error in Reading from the Data pipe\n", __LINE__);
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorHardware;
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("---------------------------------------------\n");
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: command = %d\n",command);
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: commandData = %ld\n",commandData);
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("---------------------------------------------\n");
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (command == OMX_CommandStateSet) {
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        commandedState = (OMX_STATETYPE)commandData;
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState == commandedState) {
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate,
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_EventError, OMX_ErrorSameState,0,
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    NULL);
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Error: Same State Given by Application\n");
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch(commandedState) {
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateIdle:
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd Idle \n");
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateLoaded) {
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    LCML_CALLBACKTYPE cb;
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    LCML_DSP *pLcmlDsp = NULL;
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    char *p = "damedesuStr";
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    int inputPortFlag=0,outputPortFlag=0;
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pComponentPrivate->dasfmode == 1) {
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled= FALSE;
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated= FALSE;
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(pComponentPrivate->streamID == 0) {
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT("**************************************\n");
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT(":: Error = OMX_ErrorInsufficientResources\n");
739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT("**************************************\n");
740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_ErrorInsufficientResources;
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateInvalid;
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle,
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pHandle->pApplicationPrivate,
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   OMX_EventError, OMX_ErrorInvalidState,
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   0,
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   NULL);
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bPopulated  %d \n",
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated);
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_INPUT_PORT]->bEnabled    %d \n",
754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   __LINE__,pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled);
755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bPopulated %d \n",
756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated);
757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT("%d :: OMX_StateLoaded [G722D_OUTPUT_PORT]->bEnabled   %d \n",
758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   __LINE__,pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled);
759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated &&
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled)  {
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        inputPortFlag = 1;
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated &&
765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        !pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled) {
766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        inputPortFlag = 1;
767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated &&
769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled) {
770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        outputPortFlag = 1;
771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated &&
773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        !pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled) {
774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        outputPortFlag = 1;
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (!(inputPortFlag && outputPortFlag)) {
777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->InLoaded_readytoidle = 1;
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pthread_mutex_lock(&pComponentPrivate->InLoaded_mutex);
780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pthread_cond_wait(&pComponentPrivate->InLoaded_threshold,
781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          &pComponentPrivate->InLoaded_mutex);
782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pthread_mutex_unlock(&pComponentPrivate->InLoaded_mutex);
783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_WaitForEvent(&(pComponentPrivate->InLoaded_event));
785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHandle = (OMX_HANDLETYPE) G722DEC_GetLCMLHandle(pComponentPrivate);
789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pLcmlHandle == NULL) {
790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT(":: LCML Handle is NULL........exiting..\n");
791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,
794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               0, NULL);
795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlDsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = G722DEC_Fill_LCMLInitParams(pHandle, pLcmlDsp, arr);
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT(":: Error returned from Fill_LCMLInitParams()\n");
802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,
805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               0, NULL);
806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pLcmlHandle = (LCML_DSP_INTERFACE *)pLcmlHandle;
810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    cb.LCML_Callback = (void *) G722DEC_LCML_Callback;
811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_InitMMCodecEx(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle,
814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                p,&pLcmlHandle,(void *)p,
815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                &cb,(OMX_STRING)pComponentPrivate->sDeviceString);
816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone){
817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__);
818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE *)pLcmlHandle)->pCodecinterfacehandle,
822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                              p,&pLcmlHandle,(void *)p,&cb);
823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone){
824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("%d :: Error : InitMMCodec failed...>>>>>> \n",__LINE__);
825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* Enable the Hashing Code */
831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_SetHashingState(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  OMX_TRUE);
833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("Failed to set Mapping State\n");
835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Control Came Here\n");
841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_STATEPRINT("****************** Component State Set to Idle\n\n");
842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateIdle;
843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventCmdComplete,
846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_CommandStateSet,
847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->curState,
848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           NULL);
849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT("G722DEC: State has been Set to Idle\n");
851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else if (pComponentPrivate->curState == OMX_StateExecuting) {
853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*Hashing Change*/
855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* clear out any mappings that might have accumulated */
857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("Error occurred in Codec mapping flush!\n");
860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bDspStoppedWhileExecuting = OMX_TRUE;
864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: In HandleCommand: Stopping the codec\n");
865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT(": Error Occurred in Codec Stop..\n");
869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,0, NULL);
872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else if(pComponentPrivate->curState == OMX_StatePause) {
875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    char *pArgs = "damedesuStr";
876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef HASHINGENABLE
877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /*Hashing Change*/
878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLcmlHandle;
879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* clear out any mappings that might have accumulated */
880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_FlushHashes(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle);
881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("Error occurred in Codec mapping flush!\n");
883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        break;
884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Comp: Stop Command Received\n");
887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n");
888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT(": Error Occurred in Codec Stop..\n");
892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,0, NULL);
895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_STATEPRINT("****************** Component State Set to Idle\n\n");
898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateIdle;
899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT ("%d :: The component is stopped\n",__LINE__);
901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventCmdComplete, OMX_CommandStateSet,
903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->curState, NULL);
904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else {
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": Comp: Sending ErrorNotification: Invalid State\n");
906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError,
909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_ErrorIncorrectStateTransition, 0,
910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           "Invalid State Error");
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateExecuting:
915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd Executing \n");
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateIdle) {
917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    char *pArgs = "damedesuStr";
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(pComponentPrivate->dasfmode == 1) {
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        OMX_U32 pValues[4];
920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pParams->unUUID = pComponentPrivate->streamID;
921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pParams->ulSamplingFreq =
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->G722Params[G722D_OUTPUT_PORT]->nSamplingRate;
923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->pParams->unAudioFormat = 1; /*MONO stream */
924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("::pComponentPrivate->pParams->unAudioFormat = %d\n",
926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       pComponentPrivate->pParams->unAudioFormat);
927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("::pComponentPrivate->pParams->ulSamplingFreq = %ld\n",
928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       pComponentPrivate->pParams->ulSamplingFreq);
929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("::pComponentPrivate->pParams->unUUID = %ld\n",
930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       pComponentPrivate->pParams->unUUID);
931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pValues[0] = USN_STRMCMD_SETCODECPARAMS;
933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pValues[1] = (OMX_U32)pComponentPrivate->pParams;
934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pValues[2] = sizeof(G722D_USN_AudioCodecParams);
935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   EMMCodecControlStrmCtrl,(void *)pValues);
938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if(eError != OMX_ErrorNone) {
939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT(": Error Occurred in Codec StreamControl..\n");
940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->curState = OMX_StateInvalid;
941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   OMX_EventError, OMX_ErrorInvalidState,0, NULL);
943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               EMMCodecControlStart,(void *)pArgs);
950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(eError != OMX_ErrorNone) {
951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("Error Occurred in Codec Start..\n");
952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,0, NULL);
955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else if (pComponentPrivate->curState == OMX_StatePause) {
958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    char *pArgs = "damedesuStr";
959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": Comp: Resume Command Came from App\n");
960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n");
961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               EMMCodecControlStart,(void *)pArgs);
963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (eError != OMX_ErrorNone) {
964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT ("Error While Resuming the codec\n");
965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->curState = OMX_StateInvalid;
966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                               OMX_EventError, OMX_ErrorInvalidState,0, NULL);
968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        goto EXIT;
969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    for(i=0; i< pComponentPrivate->nPendingOutPausedBufs; i++){
972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.FillBufferDone( pHandle,
973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                  pHandle->pApplicationPrivate,
974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                  pComponentPrivate->pOutBufHdrWhilePaused[i]);
975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nOutStandingFillDones--;
976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nOpBuf--;
977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->app_nBuf++;
978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nFillBufferDoneCount++;
979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nPendingOutPausedBufs = 0;
982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pComponentPrivate->nNumInputBufPending < pComponentPrivate->pInputBufferList->numBuffers) {
984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nNumInputBufPending = pComponentPrivate->pInputBufferList->numBuffers;
985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumInputBufPending; i++) {
987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (pComponentPrivate->pInputBufHdrPending[i]) {
988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722D_LCML_BUFHEADERTYPE *pLcmlHdr;
989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                OMX_DirInput, &pLcmlHdr);
992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_SetPending(pComponentPrivate,pComponentPrivate->pInputBufHdrPending[i],OMX_DirInput,
993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               __LINE__);
994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      EMMCodecInputBuffer,
996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->pBuffer,
997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->nAllocLen,
998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      pComponentPrivate->pInputBufHdrPending[i]->nFilledLen,
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      (OMX_U8 *) pLcmlHdr->pIpParam,
1000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      sizeof(G722DEC_ParamStruct),
1001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                      NULL);
1002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nNumInputBufPending = 0;
1005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (pComponentPrivate->nNumOutputBufPending < pComponentPrivate->pOutputBufferList->numBuffers) {
1006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nNumOutputBufPending = pComponentPrivate->pOutputBufferList->numBuffers;
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    for (i=0; i < pComponentPrivate->nNumOutputBufPending; i++) {
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (pComponentPrivate->pOutputBufHdrPending[i]) {
1010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722D_LCML_BUFHEADERTYPE *pLcmlHdr;
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                OMX_DirOutput, &pLcmlHdr);
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            if (!G722DEC_IsPending(pComponentPrivate, pComponentPrivate->pOutputBufHdrPending[i],
1015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_DirOutput)) {
1016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                G722DEC_SetPending(pComponentPrivate,pComponentPrivate->pOutputBufHdrPending[i],
1017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_DirOutput,__LINE__);
1018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          EMMCodecOuputBuffer,
1020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufHdrPending[i]->pBuffer,
1021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufHdrPending[i]->nAllocLen,
1022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufHdrPending[i]->nFilledLen,
1023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          NULL,
1024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          sizeof(G722DEC_ParamStruct),
1025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          NULL);
1026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            }
1027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nNumOutputBufPending = 0;
1030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }else {
1031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate,
1032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
1033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            "Invalid State");
1034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Error: Invalid State Given by \
1035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       Application\n");
1036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_STATEPRINT("****************** Component State Set to Executing\n\n");
1040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateExecuting;
1041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_CommandStateSet, pComponentPrivate->curState, NULL);
1045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateLoaded:
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd Loaded\n");
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateWaitForResources ){
1050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_STATEPRINT("***************** Component State Set to Loaded\n\n");
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateLoaded;
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate,
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            OMX_EventCmdComplete, OMX_CommandStateSet,
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            pComponentPrivate->curState,
1055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            NULL);
1056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Tansitioning from WaitFor to Loaded\n");
1057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
1058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState != OMX_StateIdle) {
1060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate,
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
1062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            "Invalid State");
1063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Error: Invalid State Given by \
1064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       Application\n");
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("Current State = %d\n",pComponentPrivate->curState);
1069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("pComponentPrivate->pInputBufferList->numBuffers = %ld\n",
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pComponentPrivate->pInputBufferList->numBuffers);
1071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("pComponentPrivate->pOutputBufferList->numBuffers = %ld\n",
1072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pComponentPrivate->pOutputBufferList->numBuffers);
1073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Loaded State - in while(1) loop: ip : %ld : op: %ld\n",
1075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pComponentPrivate->pInputBufferList->numBuffers,
1076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               pComponentPrivate->pOutputBufferList->numBuffers);
1077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->pInputBufferList->numBuffers ||
1078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->pOutputBufferList->numBuffers) {
1079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->InIdle_goingtoloaded = 1;
1080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_lock(&pComponentPrivate->InIdle_mutex);
1082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_cond_wait(&pComponentPrivate->InIdle_threshold,
1083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      &pComponentPrivate->InIdle_mutex);
1084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pthread_mutex_unlock(&pComponentPrivate->InIdle_mutex);
1085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    OMX_WaitForEvent(&(pComponentPrivate->InIdle_event));
1088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bLoadedCommandPending = OMX_FALSE;
1090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* Now Deinitialize the component No error should be returned from
1092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                 * this function. It should clean the system as much as possible */
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           EMMCodecControlDestroy,(void *)pArgs);
1095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bInitParamsInitialized = 0;
1096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = EXIT_COMPONENT_THRD;
1097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StatePause:
1100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("Cmd Pause: Cur State = %d\n", pComponentPrivate->curState);
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if ((pComponentPrivate->curState != OMX_StateExecuting) &&
1103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->curState != OMX_StateIdle)) {
1104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler (pHandle, pHandle->pApplicationPrivate,
1105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            OMX_EventError, OMX_ErrorIncorrectStateTransition, 0,
1106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                            "Invalid State");
1107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Error: Invalid State Given by \
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       Application\n");
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": G722DECUTILS::About to call LCML_ControlCodec\n");
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           EMMCodecControlPause,(void *)pArgs);
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": Error: in Pausing the codec\n");
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateInvalid;
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError, OMX_ErrorInvalidState,0, NULL);
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Component: Codec Is Paused\n");
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_STATEPRINT("****************** Component State Set to Pause\n\n");
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StatePause;
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandStateSet,
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->curState, NULL);
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateWaitForResources:
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd : OMX_StateWaitForResources\n");
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateLoaded) {
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateWaitForResources;
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(": Transitioning from Loaded to OMX_StateWaitForResources\n");
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventCmdComplete,
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_CommandStateSet,pComponentPrivate->curState, NULL);
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                } else {
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pHandle, pHandle->pApplicationPrivate,
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventError, OMX_ErrorIncorrectStateTransition,0, NULL);
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateInvalid:
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd OMX_StateInvalid:\n");
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->curState = OMX_StateInvalid;
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle, pHandle->pApplicationPrivate,
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError, OMX_ErrorInvalidState,0, NULL);
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_StateMax:
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": HandleCommand: Cmd OMX_StateMax::\n");
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } /* End of Switch */
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandMarkBuffer) {
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("command OMX_CommandMarkBuffer received\n");
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(!pComponentPrivate->pMarkBuf){
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("command OMX_CommandMarkBuffer received \n");
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pMarkBuf = (OMX_MARKTYPE *)(commandData);
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandPortDisable) {
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pComponentPrivate->bDisableCommandPending) {
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x0){
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* disable port */
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if (G722DEC_IsPending(pComponentPrivate,pComponentPrivate->pInputBufferList->pBufHdr[i],
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          OMX_DirInput)) {
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        /* Real solution is flush buffers from DSP.  Until we have the ability to do that
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           we just call EmptyBufferDone() on any pending buffers */
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pInputBufferList->pBufHdr[i]);
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nEmptyBufferDoneCount++;
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_FALSE;
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == -1){
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_FALSE;
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x1 || commandData == -1){
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                char *pArgs = "damedesuStr";
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = OMX_FALSE;
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState == OMX_StateExecuting) {
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bNoIdleOnStop = OMX_TRUE;
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               MMCodecControlStop,(void *)pArgs);
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("commandData = %ld\n",commandData);
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated = %d\n",
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated);
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated = %d\n",
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated);
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0) {
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated){
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if input unpopulated */
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_INPUT_PORT, NULL);
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else{
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1) {
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated){
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if output unpopulated */
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_OUTPUT_PORT, NULL);
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == -1) {
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated &&
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                !pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated){
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* return cmdcomplete event if inout & output unpopulated */
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_INPUT_PORT, NULL);
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortDisable,
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_OUTPUT_PORT, NULL);
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 0;
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandPending = 1;
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDisableCommandParam = commandData;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sched_yield();
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Sleep(0);
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandPortEnable) {
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0 || commandData == -1){
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* enable in port */
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("setting input port to enabled\n");
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = OMX_TRUE;
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled = %d\n",
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bEnabled);
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->AlloBuf_waitingsignal){
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->AlloBuf_waitingsignal = 0;
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1 || commandData == -1){
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            char *pArgs = "damedesuStr";
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* enable out port */
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("setting output port to enabled\n");
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = OMX_TRUE;
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->AlloBuf_waitingsignal){
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->AlloBuf_waitingsignal = 0;
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->AlloBuf_mutex);
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_cond_signal(&pComponentPrivate->AlloBuf_threshold);
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->AlloBuf_mutex);
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                OMX_SignalEvent(&(pComponentPrivate->AlloBuf_event));
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->curState == OMX_StateExecuting){
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bDspStoppedWhileExecuting = OMX_FALSE;
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           EMMCodecControlStart,(void *)pArgs);
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled = %d\n",
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bEnabled);
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        while (1) {
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("commandData = %ld\n",commandData);
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pComponentPrivate->curState = %d\n",pComponentPrivate->curState);
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated = %d\n",
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated);
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(commandData == 0x0 && (pComponentPrivate->curState == OMX_StateLoaded ||
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated)){
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_CommandPortEnable,G722D_INPUT_PORT,
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(commandData == 0x1 && (pComponentPrivate->curState == OMX_StateLoaded ||
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated)){
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete,
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_CommandPortEnable,G722D_OUTPUT_PORT,
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else if(commandData == -1 && (pComponentPrivate->curState == OMX_StateLoaded ||
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                          (pComponentPrivate->pPortDef[G722D_INPUT_PORT]->bPopulated &&
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                           pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->bPopulated))) {
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_INPUT_PORT,
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventCmdComplete, OMX_CommandPortEnable,
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       G722D_OUTPUT_PORT,
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DECFill_LCMLInitParamsEx(pComponentPrivate->pHandle);
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            sched_yield();
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Sleep(0);
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (command == OMX_CommandFlush) {
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        int j=0;
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: Inside OMX_CommandFlush Command\n");
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x0 || commandData == -1) {
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < MAX_NUM_OF_BUFS; i++) {
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufHdrPending[i] = NULL;
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nNumInputBufPending=0;
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                numCalls = pComponentPrivate->nEmptyThisBufferCount - pComponentPrivate->nEmptyBufferDoneCount;
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (numCalls > 0) {
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    for (j=0; j < numCalls; j++) {
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pInputBufferList->pBufHdr[i]
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   );
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->nEmptyBufferDoneCount++;
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* return all input buffers */
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandFlush,G722D_INPUT_PORT, NULL);
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(commandData == 0x1 || commandData == -1){
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("Flusing output queue\n");
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < MAX_NUM_OF_BUFS; i++) {
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufHdrPending[i] = NULL;
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nNumOutputBufPending=0;
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* return all output buffers */
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufferList->pBufHdr[i]);
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nFillBufferDoneCount++;
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle, pHandle->pApplicationPrivate,
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandFlush,G722D_OUTPUT_PORT, NULL);
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting HandleCommand Function\n");
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_HandleDataBuf_FromApp() function handles the input and output buffers
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * that come from the application. It is not direct function wich gets called by
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the application rather, it gets called eventually.
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed.
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pComponentPrivate  This is component's private date structure.
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured lile LCML failed
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               to do any said operartion.
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_HandleDataBuf_FromApp(OMX_BUFFERHEADERTYPE* pBufHeader,
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            G722DEC_COMPONENT_PRIVATE *pComponentPrivate)
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_DIRTYPE eDir;
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Entering HandleDataBuf_FromApp Function\n");
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: pBufHeader->pMarkData = %p\n",pBufHeader->pMarkData);
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pBufHeader->pPlatformPrivate  = pComponentPrivate;
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = G722DEC_GetBufferDirection(pBufHeader, &eDir);
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: HandleDataBuf_FromApp Function\n");
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT (":: The pBufHeader is not found in the list\n");
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_LCML_BUFHEADERTYPE *pLcmlHdr;
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                     pBufHeader->pBuffer, OMX_DirInput, &pLcmlHdr);
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n");
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Store time stamp information */
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp;
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Store nTickCount information */
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount;
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->IpBufindex++;
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual;
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pBufHeader->nFilledLen > 0 || pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bBypassDSP = 0;
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: HandleDataBuf_FromApp Function\n");
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":::Calling LCML_QueueBuffer\n");
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlHdr->pIpParam->usLastFrame = 0;
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBufHeader->nFlags == OMX_BUFFERFLAG_EOS) {
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: usLastFrame Is Set Here....\n");
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pLcmlHdr->pIpParam->usLastFrame = 1;
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bIsEOFSent = 1;
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pBufHeader->nFlags = 0;
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT ("Comp:: Sending Filled Input buffer = %p, %p to LCML\n",pBufHeader,pBufHeader->pBuffer);
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* Store time stamp information */
1464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->arrTimestamp[pComponentPrivate->IpBufindex] = pBufHeader->nTimeStamp;
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->arrTickCount[pComponentPrivate->IpBufindex] = pBufHeader->nTickCount;
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IpBufindex++;
1467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->IpBufindex %= pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferCountActual;
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
1469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!G722DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirInput)) {
1470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!pComponentPrivate->bDspStoppedWhileExecuting) {
1471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirInput,__LINE__);
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle,
1473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  EMMCodecInputBuffer,
1474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer,
1475b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->nAllocLen,
1476b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->nFilledLen,
1477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  (OMX_U8 *) pLcmlHdr->pIpParam,
1478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  sizeof(G722DEC_ParamStruct),
1479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer);
1480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (eError != OMX_ErrorNone) {
1481b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT ("::Comp: SetBuff: IP: Error Occurred\n");
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_ErrorHardware;
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nCntIp++;
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nIpBuf++;
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->num_Sent_Ip_Buff++;
1489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT ("Sending Input buffer to Codec\n");
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    else {
1492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT("Calling EmptyBufferDone from line %d\n",__LINE__);
1493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                                   pBufHeader );
1496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } else if (pComponentPrivate->curState == OMX_StatePause) {
1500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufHdrPending[pComponentPrivate->nNumInputBufPending++] = pBufHeader;
1501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
1503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bBypassDSP = 1;
1504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT ("Forcing EmptyBufferDone\n");
1505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pComponentPrivate->dasfmode == 0) {
1506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pInputBufferList->pBufHdr[0]);
1509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nEmptyBufferDoneCount++;
1510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHeader->pMarkData){
1513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":Detected pBufHeader->pMarkData\n");
1514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pMarkData = pBufHeader->pMarkData;
1515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
1516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOutputBufferList->pBufHdr[0]->pMarkData = pBufHeader->pMarkData;
1517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->pOutputBufferList->pBufHdr[0]->hMarkTargetComponent = pBufHeader->hMarkTargetComponent;
1518b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBufHeader->hMarkTargetComponent == pComponentPrivate->pHandle && pBufHeader->pMarkData){
1519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
1521b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventMark,
1522b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       0,
1523b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       0,
1524b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pBufHeader->pMarkData);
1525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1526b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1527b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (eDir == OMX_DirOutput) {
1529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LCML_DSP_INTERFACE *pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
1530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(": pComponentPrivate->lcml_nOpBuf = %ld\n",
1533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->lcml_nOpBuf);
1534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(": pComponentPrivate->lcml_nIpBuf = %ld\n",
1535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                       pComponentPrivate->lcml_nIpBuf);
1536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBufHeader->pBuffer, OMX_DirOutput, &pLcmlHdr);
1537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n");
1539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT (":::Calling LCML_QueueBuffer\n");
1543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->bBypassDSP == 0) {
1544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT ("Comp:: Sending Emptied Output buffer=%p to LCML\n",pBufHeader);
1545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->curState == OMX_StateExecuting) {
1546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Comp:: in G722DEC UTILS pLcmlHandle->pCodecinterfacehandle= %p\n",
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                pLcmlHandle->pCodecinterfacehandle);
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Comp:: in G722DEC UTILS EMMCodecOuputBuffer = %d\n",EMMCodecOuputBuffer);
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Comp:: in G722DEC UTILS pBufHeader->pBuffer = %p\n",pBufHeader->pBuffer);
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Comp:: in G722DEC UTILS pBufHeader->nAllocLen = %ld\n",pBufHeader->nAllocLen);
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (!G722DEC_IsPending(pComponentPrivate,pBufHeader,OMX_DirOutput) &&
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    (pComponentPrivate->numPendingBuffers < pComponentPrivate->pOutputBufferList->numBuffers))  {
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_SetPending(pComponentPrivate,pBufHeader,OMX_DirOutput,__LINE__);
1554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    if(!pComponentPrivate->bDspStoppedWhileExecuting){
1555b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle,
1556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  EMMCodecOuputBuffer,
1557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer,
1558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->nAllocLen,
1559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  0,
1560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  NULL,
1561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  sizeof(G722DEC_ParamStruct),
1562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  pBufHeader->pBuffer);
1563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        if (eError != OMX_ErrorNone ) {
1564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            G722DEC_DPRINT (":: Comp:: SetBuff OP: Error Occurred\n");
1565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            eError = OMX_ErrorHardware;
1566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            goto EXIT;
1567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        }
1568b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nCntOp++;
1569b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->lcml_nOpBuf++;
1570b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        pComponentPrivate->num_Op_Issued++;
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                        G722DEC_DPRINT ("Comp:: in G722DEC UTILS \n");
1572b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    }
1573b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1574b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            } else {
1575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufHdrPending[pComponentPrivate->nNumOutputBufPending++] = pBufHeader;
1576b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1577b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1578b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } /* end of OMX_DirOutput if struct */
1579b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(": BufferHeader %p, Buffer %p Unknown ..........\n",pBufHeader, pBufHeader->pBuffer);
1581b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1582b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1583b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(": Exiting from  HandleDataBuf_FromApp: %x \n",eError);
1585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError == OMX_ErrorBadParameter) {
1586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(": Error = OMX_ErrorBadParameter\n");
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetBufferDirection() function determines whether it is input buffer or
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * output buffer.
1596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is pointer to buffer header whose direction needs to
1598b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *                    be determined.
1599b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *eDir  This is output argument which stores the direction of buffer.
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
1603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
1605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
1607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorBadParameter = In case of invalid buffer
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
1610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
1612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_GetBufferDirection(OMX_BUFFERHEADERTYPE *pBufHeader,
1614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                         OMX_DIRTYPE *eDir)
1615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate = pBufHeader->pPlatformPrivate;
1618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nBuf = pComponentPrivate->pInputBufferList->numBuffers;
1619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBuf = NULL;
1620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int flag = 1;
1621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i=0;
1622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Entering GetBufferDirection Function\n");
1624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuf = pComponentPrivate->pInputBufferList->pBufHdr[i];
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHeader == pBuf) {
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *eDir = OMX_DirInput;
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: Buffer %p is INPUT BUFFER\n", pBufHeader);
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            flag = 0;
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nBuf = pComponentPrivate->pOutputBufferList->numBuffers;
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1636b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nBuf; i++) {
1637b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pBuf = pComponentPrivate->pOutputBufferList->pBufHdr[i];
1638b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pBufHeader == pBuf) {
1639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            *eDir = OMX_DirOutput;
1640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (":: Buffer %p is OUTPUT BUFFER\n", pBufHeader);
1641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            flag = 0;
1642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
1643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (flag == 1) {
1647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_ERROR_EXIT(eError, OMX_ErrorBadParameter,
1648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                             "Buffer Not Found in List : OMX_ErrorBadParameter");
1649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting GetBufferDirection Function\n");
1652b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
1656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_LCML_Callback() function is callback which is called by LCML whenever
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * there is an even generated for the component.
1659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param event  This is event that was generated.
1661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param arg    This has other needed arguments supplied by LCML like handles
1663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               etc.
1664b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
1666b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
1668b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1669b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful processing.
1670b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorInsufficientResources = Not enough memory
1671b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
1673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_LCML_Callback (TUsnCodecEvent event,void * args [10])
1676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *pBuffer = args[1];
1679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_LCML_BUFHEADERTYPE *pLcmlHdr = NULL;
1680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
1682b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
1683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate = (G722DEC_COMPONENT_PRIVATE*)
1684b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((LCML_DSP_INTERFACE*)args[6])->pComponentPrivate;
1685b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("Component private handle: pComponentPrivate = %p\n",pComponentPrivate);
1686b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Entering the LCML_Callback() : event = %d\n",event);
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1688b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef G722DEC_DEBUG
1689b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printEmmEvent (event);
1690b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1691b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1692b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(event == EMMCodecBufferProcessed){
1693b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: --------- EMMCodecBufferProcessed Here\n");
1694b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( args[0] == (void *)EMMCodecInputBuffer) {
1695b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (" :: Inside the LCML_Callback EMMCodecInputBuffer\n");
1696b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Input: pBufferr = %p\n", pBuffer);
1697b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1698b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirInput, &pLcmlHdr);
1699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Output: pLcmlHeader = %p\n", pLcmlHdr);
1700b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Output: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir);
1701b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Output: *pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir);
1702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Output: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen);
1703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
1704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n");
1705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Input: pLcmlHeader = %p\n", pLcmlHdr);
1708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->lcml_nCntIpRes++;
1710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirInput,__LINE__);
1712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* >>>>>>>>>>>>>>>>>>>>> */
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(": Component Sending Empty Input buffer%p to App\n", pLcmlHdr->pBufHdr->pBuffer);
1714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EmptyBufferDone (pComponentPrivate->pHandle,
1715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
1716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pLcmlHdr->pBufHdr );
1717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nEmptyBufferDoneCount++;
1718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->lcml_nIpBuf--;
1719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->app_nBuf++;
1720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* <<<<<<<<<<<<<<<<<<<<< */
1721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else if (args[0] == (void *)EMMCodecOuputBuffer) {
1722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT (" :: Inside the LCML_Callback EMMCodecOuputBuffer\n");
1723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Output: pBuffer = %p\n", pBuffer);
1724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (!G722DEC_IsValid(pComponentPrivate,pBuffer,OMX_DirOutput)) {
1725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* If the buffer we get back from the DSP is not valid call FillBufferDone
1726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                   on a valid buffer */
1727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
1728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pHandle->pApplicationPrivate,
1729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                          pComponentPrivate->pOutputBufferList->pBufHdr[pComponentPrivate->nInvalidFrameCount++]);
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nOutStandingFillDones--;
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->numPendingBuffers--;
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
1734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->nOutStandingFillDones++;
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = G722DEC_GetCorresponding_LCMLHeader(pComponentPrivate,pBuffer, OMX_DirOutput, &pLcmlHdr);
1736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT(":: Error: Invalid Buffer Came ...\n");
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
1739b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pLcmlHdr->pBufHdr->nFilledLen = (int)args[8];
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Output: pLcmlHeader = %p\n", pLcmlHdr);
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Output: pLcmlHdr->eDir = %d\n", pLcmlHdr->eDir);
1743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(":: Output: Filled Len = %ld\n", pLcmlHdr->pBufHdr->nFilledLen);
1744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->lcml_nCntOpReceived++;
1745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_ClearPending(pComponentPrivate,pLcmlHdr->pBufHdr,OMX_DirOutput,__LINE__);
1746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* >>>>>>>>>>>>>>>>>>>>> */
1747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT ("Sending Output buffer to Applcation\n");
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->bIsEOFSent){
1749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT ("Adding EOS flag to the output buffer\n");
1750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pBufHdr->nFlags |= OMX_BUFFERFLAG_EOS;
1751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pComponentPrivate->pHandle->pApplicationPrivate,
1753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           OMX_EventBufferFlag,
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pLcmlHdr->pBufHdr->nOutputPortIndex,
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                           pLcmlHdr->pBufHdr->nFlags, NULL);
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->bIsEOFSent = 0;
1757b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->pMarkData) {
1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    G722DEC_DPRINT ("pComponentPrivate->pMarkData set\n");
1760b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pBufHdr->pMarkData = pComponentPrivate->pMarkData;
1761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pBufHdr->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->num_Reclaimed_Op_Buff++;
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT(": Component Sending Filled Output buffer%p to App\n", pLcmlHdr->pBufHdr);
1765b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("pLcmlHdr->pBufHdr = 0x%p\n", pLcmlHdr->pBufHdr);
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->curState != OMX_StatePause) {
1767b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* Copying time stamp information to output buffer */
1768b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pBufHdr->nTimeStamp = (OMX_TICKS)pComponentPrivate->arrTimestamp[pComponentPrivate->OpBufindex];
1769b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    /* Copying nTickCount information to output buffer */
1770b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pLcmlHdr->pBufHdr->nTickCount = pComponentPrivate->arrTickCount[pComponentPrivate->OpBufindex];
1771b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1772b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->OpBufindex++;
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->OpBufindex %= pComponentPrivate->pPortDef[OMX_DirInput]->nBufferCountActual;
1774b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle, /* pHandle, */
1776b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pComponentPrivate->pHandle->pApplicationPrivate, /* pHandle->pApplicationPrivate, */
1777b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                              pLcmlHdr->pBufHdr);
1778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutStandingFillDones--;
1779b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->lcml_nOpBuf--;
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->app_nBuf++;
1781b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nFillBufferDoneCount++;
1782b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
1783b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* <<<<<<<<<<<<<<<<<<<<< */
1784b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1785b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1786b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if(event == EMMCodecProcessingStoped) {
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (!pComponentPrivate->bNoIdleOnStop) {
1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateIdle;
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1792b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete,
1793b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_CommandStateSet,
1794b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pComponentPrivate->curState,
1795b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
1796b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bIdleCommandPending = OMX_FALSE;
1797b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
1798b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->bNoIdleOnStop= OMX_FALSE;
1799b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if(event == EMMCodecAlgCtrlAck) {
1801b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT ("GOT MESSAGE USN_DSPACK_ALGCTRL \n");
1802b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (event == EMMCodecDspError) {
1803b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: commandedState  = %p\n",args[0]);
1804b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: arg4 = %p\n",args[4]);
1805b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: arg5 = %p\n",args[5]);
1806b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: --------- EMMCodecDspError Here\n");
1807b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(((int)args[4] == USN_ERR_WARNING) && ((int)args[5] == IUALG_WARN_PLAYCOMPLETED)) {
1808b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* add callback to application to indicate SN/USN has completed playing of current set of date */
1809b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1810b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventBufferFlag,
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   (OMX_U32)NULL,
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_BUFFERFLAG_EOS,
1814b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
1815b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1816b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((int)args[5] == IUALG_WARN_CONCEALED) {
1817b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT( "Algorithm issued a warning. But can continue" );
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]);
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1821b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((int)args[5] == IUALG_ERR_GENERAL) {
1822b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT( "Algorithm error. Cannot continue" );
1823b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]);
1824b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: LCML_Callback: IUALG_ERR_GENERAL\n",__LINE__);
1825b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pHandle = pComponentPrivate->pHandle;
1826b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
1827b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1828b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1829b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( (int)args[5] == IUALG_ERR_DATA_CORRUPT ){
1830b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            char *pArgs = "damedesuStr";
1831b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: arg5 = %p\n",__LINE__,args[5]);
1832b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: LCML_Callback: IUALG_ERR_DATA_CORRUPT\n",__LINE__);
1833b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pHandle = pComponentPrivate->pHandle;
1834b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlHandle = (LCML_DSP_INTERFACE *)pComponentPrivate->pLcmlHandle;
1835b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1836b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                       MMCodecControlStop,(void *)pArgs);
1838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(eError != OMX_ErrorNone) {
1839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("%d: Error Occurred in Codec Stop..\n",
1840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                               __LINE__);
1841b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1842b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1843b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d :: G722DEC: Codec has been Stopped here\n",__LINE__);
1844b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->curState = OMX_StateIdle;
1845b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1846b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(
1847b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle, pHandle->pApplicationPrivate,
1848b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_ErrorNone,0, NULL);
1849b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1850b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1851b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1852b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( (int)args[5] == IUALG_WARN_OVERFLOW ){
1853b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT( "Algorithm error. Overflow" );
1854b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1855b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if( (int)args[5] == IUALG_WARN_UNDERFLOW ){
1856b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT( "Algorithm error. Underflow" );
1857b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1858b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (event == EMMCodecStrmCtrlAck) {
1859b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: GOT MESSAGE USN_DSPACK_STRMCTRL ----\n");
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1861b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1862b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1863b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting the LCML_Callback() \n");
1864b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1865b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1866b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1867b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1868b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
1869b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1870b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetCorresponding_LCMLHeader() function gets the corresponding LCML
1871b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * header from the actual data buffer for required processing.
1872b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1873b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBuffer This is the data buffer pointer.
1874b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1875b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir   This is direction of buffer. Input/Output.
1876b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1877b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *G722D_LCML_BUFHEADERTYPE  This is pointer to LCML Buffer Header.
1878b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1879b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
1880b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1881b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
1882b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1883b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_ErrorNone = Successful Inirialization of the component\n
1884b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
1885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1886b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
1887b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1888b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
1889b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DEC_GetCorresponding_LCMLHeader(G722DEC_COMPONENT_PRIVATE *pComponentPrivate,
1890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  OMX_U8 *pBuffer,
1891b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  OMX_DIRTYPE eDir,
1892b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                  G722D_LCML_BUFHEADERTYPE **ppLcmlHdr)
1893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1894b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1895b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_LCML_BUFHEADERTYPE *pLcmlBufHeader = NULL;
1896b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nIpBuf=0, nOpBuf=0, i=0;
1897b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1898b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Entering the G722DEC_GetCorresponding_LCMLHeader()\n");
1899b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: eDir = %d\n",eDir);
1900b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1901b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (!pComponentPrivate->bInitParamsInitialized) {
1902b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1903b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        sched_yield();
1904b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
1905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        Sleep(0);
1906b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1907b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1908b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1909b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eDir == OMX_DirInput) {
1910b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT (":: In GetCorresponding_LCMLHeader()\n");
1911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1912b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
1913b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT];
1915b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nIpBuf; i++) {
1917b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pBuffer = %p\n",pBuffer);
1918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer);
1919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
1920b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
1921b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("::Corresponding LCML Header Found\n");
1922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1923b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1924b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlBufHeader++;
1925b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1926b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else if (eDir == OMX_DirOutput) {
1927b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i = 0;
1928b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
1929b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1930b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pLcmlBufHeader = pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT];
1931b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT (":: nOpBuf = %d\n",nOpBuf);
1932b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1933b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for(i=0; i<nOpBuf; i++) {
1934b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pBuffer = %p\n",pBuffer);
1935b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("pLcmlBufHeader->pBufHdr->pBuffer = %p\n",pLcmlBufHeader->pBufHdr->pBuffer);
1936b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pBuffer == pLcmlBufHeader->pBufHdr->pBuffer) {
1937b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                *ppLcmlHdr = pLcmlBufHeader;
1938b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("::Corresponding LCML Header Found\n");
1939b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
1940b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
1941b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pLcmlBufHeader++;
1942b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1943b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    } else {
1944b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT(":: Invalid Buffer Type :: exiting...\n");
1945b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1947b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
1948b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: Exiting the GetCorresponding_LCMLHeader() \n");
1949b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1950b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1951b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================= * */
1953b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
1954b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @fn G722DEC_GetLCMLHandle() function gets the LCML handle and interacts with LCML
1955b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * by using this LCML Handle.
1956b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1957b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pBufHeader This is the buffer header that needs to be processed.
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1959b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param *pComponentPrivate  This is component's private date structure.
1960b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1961b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre          None
1962b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1963b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post         None
1964b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1965b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @return      OMX_HANDLETYPE = Successful loading of LCML library.
1966b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *               OMX_ErrorHardware = Hardware error has occured.
1967b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
1968b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *  @see         None
1969b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
1970b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ================================================================================ * */
1971b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifndef UNDER_CE
1972b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722DEC_GetLCMLHandle(G722DEC_COMPONENT_PRIVATE *pComponentPrivate)
1973b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1974b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* This must be taken care by WinCE */
1975b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
1976b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1977b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    void *handle = NULL;
1978b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE (*fpGetHandle)(OMX_HANDLETYPE);
1979b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *error = NULL;
1980b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1981b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    handle = dlopen("libLCML.so", RTLD_LAZY);
1982b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!handle) {
1983b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(dlerror(), stderr);
1984b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1985b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1986b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1987b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle = dlsym (handle, "GetHandle");
1988b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ((error = dlerror()) != NULL) {
1989b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fputs(error, stderr);
1990b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1991b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1992b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = (*fpGetHandle)(&pHandle);
1993b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
1994b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
1995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("eError != OMX_ErrorNone...\n");
1996b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
1997b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
1998b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2000b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate;
2001b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2002b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
2003b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2004b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
2005b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* WINDOWS Explicit dll load procedure */
2006b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_HANDLETYPE G722DEC_GetLCMLHandle(G722DEC_COMPONENT_PRIVATE *pComponentPrivate)
2007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
2009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_HANDLETYPE pHandle = NULL;
2010b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HINSTANCE hDLL;               /* Handle to DLL */
2012b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LPFNDLLFUNC1 fpGetHandle1;
2013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL,0);
2015b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (hDLL == NULL)
2016b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2017b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*fputs(dlerror(), stderr); */
2018b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("BML Load Failed!!!\n");
2019b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
2020b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2021b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2022b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle"));
2023b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (!fpGetHandle1)
2024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* handle the error */
2026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FreeLibrary(hDLL);
2027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
2028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* call the function */
2031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = fpGetHandle1(&pHandle);
2032b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
2033b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError = OMX_ErrorUndefined;
2034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("eError != OMX_ErrorNone...\n");
2035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle = NULL;
2036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        return pHandle;
2037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((LCML_DSP_INTERFACE*)pHandle)->pComponentPrivate = pComponentPrivate;
2039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return pHandle;
2040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_CleanupInitParams(OMX_HANDLETYPE pComponent)
2044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
2046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate = (G722DEC_COMPONENT_PRIVATE *)
2047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pHandle->pComponentPrivate;
2048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
2049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = pComponentPrivate->nRuntimeInputBuffers;
2050b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nOpBuf = pComponentPrivate->nRuntimeOutputBuffers;
2051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i=0;
2052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *ptemp = NULL;
2053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT (":: G722DEC_CleanupInitParams()\n");
2055b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_MEMPRINT(":: Freeing:  pComponentPrivate->strmAttr = %p\n", pComponentPrivate->strmAttr);
2056b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2057b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_FREE(pComponentPrivate->strmAttr);
2058b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*pComponentPrivate->strmAttr = NULL;*/
2059b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2060b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*if (pComponentPrivate->dasfmode == 1) {*/
2061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_MEMPRINT(":: Freeing: pComponentPrivate->pParams = %p\n",pComponentPrivate->pParams);
2062b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptemp = (OMX_U8*)pComponentPrivate->pParams;
2063b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(ptemp != NULL){
2064b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptemp -= 128;
2065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2066b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pParams = (G722D_USN_AudioCodecParams *)ptemp;
2067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_FREE(pComponentPrivate->pParams);
2068b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*}*/
2069b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT];
2071b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nIpBuf; i++) {
2072b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_MEMPRINT(":: Freeing: pTemp_lcml->pIpParam = %p\n",pTemp_lcml->pIpParam);
2073b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pTemp_lcml->pIpParam);
2074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2075b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2076b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2077b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_MEMPRINT(":: Freeing pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = %p\n",
2078b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]);
2079b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_FREE(pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT]);
2080b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2081b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2082b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT];
2083b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for(i=0; i<nOpBuf; i++) {
2084b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_MEMPRINT(":: Freeing: pTemp_lcml->pIpParam = %p\n",pTemp_lcml->pOpParam);
2085b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_FREE(pTemp_lcml->pOpParam);
2086b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2087b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2088b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2089b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_MEMPRINT(":: Freeing: pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = %p\n",
2090b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]);
2091b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_FREE(pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT]);
2092b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT ("Exiting Successfully G722DEC_CleanupInitParams()\n");
2093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2095b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2096b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_SetPending() This function marks the buffer as pending when it is sent
2097b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * to DSP/
2098b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2099b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
2100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header whose buffer is sent to DSP
2102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
2104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None
2106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None
2108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
2110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_SetPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber)
2113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("Called G722DEC_SetPending\n");
2117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT("eDir = %d\n",eDir);
2118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 1;
2123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("*******************INPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber);
2124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 1;
2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("*******************OUTPUT BUFFER %d IS PENDING Line %ld******************************\n",i,lineNumber);
2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_ClearPending() This function clears the buffer status from pending
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * when it is received back from DSP.
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header that is received from
2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * DSP/LCML.
2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid G722DEC_ClearPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir, OMX_U32 lineNumber)
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pInputBufferList->bBufferPending[i] = 0;
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("*******************INPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber);
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->pOutputBufferList->bBufferPending[i] = 0;
2173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                G722DEC_DPRINT("*******************OUTPUT BUFFER %d IS RECLAIMED Line %ld******************************\n",i,lineNumber);
2174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_IsPending() This function checks whether or not a buffer is pending.
2182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
2184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest.
2186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return none
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_IsPending(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE *pBufHdr, OMX_DIRTYPE eDir)
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pInputBufferList->pBufHdr[i]) {
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return pComponentPrivate->pInputBufferList->bBufferPending[i];
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBufHdr == pComponentPrivate->pOutputBufferList->pBufHdr[i]) {
2211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                return pComponentPrivate->pOutputBufferList->bBufferPending[i];
2212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return -1;
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DEC_IsValid() This function identifies whether or not buffer recieved from
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * LCML is valid. It searches in the list of input/output buffers to do this.
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponentPrivate This is component's private date area.
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pBufHdr This is poiter to OMX Buffer header of interest.
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param eDir This is direction of buffer i.e. input or output.
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return status of the buffer.
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 G722DEC_IsValid(G722DEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U8 *pBuffer, OMX_DIRTYPE eDir)
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 i = 0;
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 found=0;
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (eDir == OMX_DirInput) {
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pInputBufferList->numBuffers; i++) {
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pInputBufferList->pBufHdr[i]->pBuffer) {
2246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                found = 1;
2247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (i=0; i < pComponentPrivate->pOutputBufferList->numBuffers; i++) {
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pBuffer == pComponentPrivate->pOutputBufferList->pBufHdr[i]->pBuffer) {
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                found = 1;
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return found;
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @G722DECFill_LCMLInitParamsEx() This function initializes the init parameter of
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * the LCML structure when a port is enabled and component is in idle state.
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @param pComponent This is component handle.
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @pre None
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @post None
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * @return appropriate OMX Error.
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ========================================================================== */
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE G722DECFill_LCMLInitParamsEx(OMX_HANDLETYPE pComponent)
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nIpBuf = 0,nIpBufSize = 0,nOpBuf = 0,nOpBufSize = 0;
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i = 0;
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pTemp = NULL;
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_COMPONENT_PRIVATE *pComponentPrivate =
2284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        (G722DEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_LCML_BUFHEADERTYPE *pTemp_lcml = NULL;
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 size_lcml = 0;
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U8 *ptr = NULL;
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: Entered Fill_LCMLInitParams");
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBuf = pComponentPrivate->pInputBufferList->numBuffers;
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBuf = pComponentPrivate->pOutputBufferList->numBuffers;
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nIpBufSize = pComponentPrivate->pPortDef[G722D_INPUT_PORT]->nBufferSize;
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nOpBufSize = pComponentPrivate->pPortDef[G722D_OUTPUT_PORT]->nBufferSize;
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Input Buffer Count = %ld\n",nIpBuf);
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Input Buffer Size = %ld\n",nIpBufSize);
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Output Buffer Count = %ld\n",nOpBuf);
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_BUFPRINT("Output Buffer Size = %ld\n",nOpBufSize);
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: bufAlloced = %d\n",pComponentPrivate->bufAlloced);
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nIpBuf * sizeof(G722D_LCML_BUFHEADERTYPE);
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_MALLOC_SIZE(ptr,size_lcml,OMX_U8);
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pTemp_lcml = (G722D_LCML_BUFHEADERTYPE *)ptr;
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722D_INPUT_PORT] = pTemp_lcml;
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nIpBuf; i++) {
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->bufAlloced == 0) {
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722D_OMX_MALLOC(pTemp, OMX_BUFFERHEADERTYPE);
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: IpBufferHeader %p is already there\n",
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pInputBufferList->pBufHdr[i]);
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp = pComponentPrivate->pInputBufferList->pBufHdr[i];
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nIpBufSize;
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nIpBufSize;
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER;
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER;
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = DONT_CARE;
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->bufAlloced == 0) {
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722D_OMX_MALLOC_SIZE(pTemp->pBuffer,(nIpBufSize+256),OMX_U8);
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp->pBuffer = pTemp->pBuffer + 128;
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: IpBuffer %p is already there\n",pTemp->pBuffer);
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pTemp->pBuffer == NULL) {
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: Malloc Failed...\n");
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirInput;
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722D_OMX_MALLOC(pTemp_lcml->pIpParam, G722DEC_ParamStruct);
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pIpParam->usLastFrame = 0;
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722DEC_COMPONENT_PRIVATE *) pTemp->pPlatformPrivate)->pHandle = pHandle;
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: InBuffHeader[%ld] = %p\n", i, pTemp);
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>> InputBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: Ip : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    size_lcml = nOpBuf * sizeof(G722D_LCML_BUFHEADERTYPE);
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722D_OMX_MALLOC_SIZE(pTemp_lcml,size_lcml,G722D_LCML_BUFHEADERTYPE);
2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pLcmlBufHeader[G722D_OUTPUT_PORT] = pTemp_lcml;
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (i=0; i<nOpBuf; i++) {
2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if(pComponentPrivate->bufAlloced == 0) {
2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722D_OMX_MALLOC(pTemp, OMX_BUFFERHEADERTYPE);
2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: OpBufferHeader %p is already there\n",
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pComponentPrivate->pOutputBufferList->pBufHdr[i]);
2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp = pComponentPrivate->pOutputBufferList->pBufHdr[i];
2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nAllocLen = nOpBufSize;
2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFilledLen = nOpBufSize;
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMajor = G722DEC_MAJOR_VER;
2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nVersion.s.nVersionMinor = G722DEC_MINOR_VER;
2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->pPlatformPrivate = pHandle->pComponentPrivate;
2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTickCount = 0;
2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nTimeStamp = 0;
2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->bufAlloced == 0) {
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722D_OMX_MALLOC_SIZE(pTemp->pBuffer,(nOpBufSize+256),OMX_U8);
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pTemp->pBuffer += 128;
2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT("%d:: OpBuffer %p is already there\n",__LINE__,pTemp->pBuffer);
2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        } else {
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            G722DEC_DPRINT(":: OpBuffer %p is already there\n",pTemp->pBuffer);
2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pBufHdr = pTemp;
2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->eDir = OMX_DirOutput;
2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml->pOtherParams[i] = NULL;
2396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp->nFlags = NORMAL_BUFFER;
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ((G722DEC_COMPONENT_PRIVATE *)pTemp->pPlatformPrivate)->pHandle = pHandle;
2399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>>>>>>>>>>> OutBuffHeader[%ld] = %p\n", i, pTemp);
2400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp:  >>>> OutBuffHeader[%ld]->pBuffer = %p\n", i, pTemp->pBuffer);
2401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("::Comp: Op : pTemp_lcml[%ld] = %p\n", i, pTemp_lcml);
2402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTemp_lcml++;
2403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bPortDefsAllocated = 1;
2405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    G722DEC_DPRINT(":: Exiting Fill_LCMLInitParams");
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->bInitParamsInitialized = 1;
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin EXIT:
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid printEmmEvent (TUsnCodecEvent event)
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    switch(event) {
2419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspError:
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspError >>>>>>>>>>\n");
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInternalError:
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInternalError >>>>>>>>>> \n");
2426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecInitError:
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecInitError>>>>>>>>>> \n");
2430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecDspMessageRecieved:
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecDspMessageRecieved>>>>>>>>>> \n");
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferProcessed:
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferProcessed>>>>>>>>>> \n");
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStarted:
2441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStarted>>>>>>>>>> \n");
2442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingPaused:
2445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingPaused>>>>>>>>>> \n");
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingStoped:
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingStoped>>>>>>>>>> \n");
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecProcessingEof:
2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecProcessingEof>>>>>>>>>> \n");
2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecBufferNotProcessed:
2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecBufferNotProcessed>>>>>>>>>> \n");
2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecAlgCtrlAck:
2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecAlgCtrlAck>>>>>>>>>> \n");
2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    case EMMCodecStrmCtrlAck:
2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        G722DEC_DPRINT("[LCML CALLBACK EVENT]  EMMCodecStrmCtrlAck>>>>>>>>>> \n");
2466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        break;
2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return;
2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
2470