1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*
3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either
8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details.
15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *
17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ====================================================================
22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*             Texas Instruments OMAP(TM) Platform Software
23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved.
24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found
26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied.
27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==================================================================== */
28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_JpegEnc_Utils.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for JPEG encoder that
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* is fully compliant with the OMX specification 1.5.
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path  $(CSLPATH)\src
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev  0.1
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------------- */
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ===================================
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 22-May-2006 mf: Revisions appear in reverse chronological order;
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! that is, newest first.  The date format is dd-Mon-yyyy.
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ================================================================================= */
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  INCLUDE FILES
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- System and Platform Files ----------------------------*/
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <malloc.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <memory.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/stat.h>
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Types.h>
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h>
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Core.h>
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Index.h>
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Image.h>
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Audio.h>
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Video.h>
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_IVCommon.h>
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Other.h>
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <usn.h>
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*------- Program Header Files ----------------------------------------*/
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegEnc_Utils.h"
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegEnc_CustomCmd.h"
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <ResourceManagerProxyAPI.h>
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define JPEGENC_TIMEOUT 0xFFFFFFFE
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE HandleJpegEncInternalFlush(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1);
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData);
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid sleep(DWORD Duration)
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Sleep(Duration);
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JpegEncLCML_Callback (TUsnCodecEvent event,
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                    void * args [10]);
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------- Function Implementations ---------------------------------*/
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE GetJpegEncLCMLHandle(OMX_HANDLETYPE pComponent)
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE LCML_pHandle;
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fpo fpGetHandle ;
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void *handle = NULL;
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    char *error =NULL;
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "Inside GetLCMLHandle function\n");
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    handle = dlopen("libLCML.so", RTLD_LAZY);
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( !handle ) {
132b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ( (error = (char *)dlerror()) != NULL ) {
133b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            fputs(error, stderr);
134b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorComponentNotFound;
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fpGetHandle = dlsym (handle, "GetHandle");
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( (error = (char *)dlerror()) != NULL ) {
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fputs(error, stderr);
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidComponent;
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*  calling gethandle and passing phandle to b filled   */
147b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( fpGetHandle != NULL ) {
148b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = (*fpGetHandle)(&LCML_pHandle);
149b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
150b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    else  {
151b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        eError = OMX_ErrorInvalidComponent;
152b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto EXIT;
153b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError != OMX_ErrorNone ) {
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP4(pComponentPrivate->dbg, "eError != OMX_ErrorNone...\n");
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "Received LCML Handle\n");
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pDllHandle = handle;
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLCML = (void *)LCML_pHandle;
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLCML->pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pComponentPrivate;
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE);
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LPFNDLLFUNC1 fpGetHandle1;
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE LCML_pHandle = NULL;
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent;
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    HINSTANCE hDLL;
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    hDLL = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL, 0);
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (hDLL == NULL)
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorComponentNotFound;
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,TEXT("GetHandle"));
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!fpGetHandle1)
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        FreeLibrary(hDLL);
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorComponentNotFound;
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = fpGetHandle1(&LCML_pHandle);
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError != OMX_ErrorNone) {
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        LCML_pHandle = NULL;
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          goto EXIT;
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML = (LCML_DSP_INTERFACE *)LCML_pHandle;
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLCML->pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pComponentPrivate;
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exit\n");
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------*/
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Disable Port()
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Called by component thread, handles commands sent by the app.
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorNone                  success, ready to roll
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------*/
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JpegEncDisablePort (JPEGENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1)
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside DisablePort function\n");
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "Inside disable port (%lu) %lu %lu %lu %lu\n",
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nParam1,
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nInPortIn,
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nInPortOut,
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nOutPortIn,
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nOutPortOut);
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   if (pComponentPrivate->nCurState == OMX_StateExecuting || pComponentPrivate->nCurState == OMX_StatePause) {
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if ((nParam1 == JPEGENC_INP_PORT) || (nParam1 == JPEGENC_OUT_PORT) || ((int)nParam1 == -1)) {
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           eError = HandleJpegEncInternalFlush(pComponentPrivate, nParam1);
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   }
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
241eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "Exit form JPEGEnc Disable Port eError is = %x\n",eError);
242b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------*/
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Enable Port()
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Called by component thread, handles commands sent by the app.
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorNone                  success, ready to roll
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-----------------------------------------------------------------------------*/
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JpegEncEnablePort (JPEGENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_U32 nParam1)
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside EnablePort function\n");
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nParam1 == 0) {
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->nCurState != OMX_StateLoaded) {
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (!pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bPopulated) {
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->populate_cond, &pComponentPrivate->jpege_mutex_app);
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortEnable,
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_INP_PORT,
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if (nParam1 == 1) {
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->nCurState != OMX_StateLoaded) {
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (!pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bPopulated) {
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->populate_cond, &pComponentPrivate->jpege_mutex_app);
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortEnable,
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_OUT_PORT,
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if ((int)nParam1 == -1) {
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->nCurState != OMX_StateLoaded) {
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while ((!pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bPopulated) ||
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               (!pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bPopulated)) {
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->populate_cond, &pComponentPrivate->jpege_mutex_app);
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortEnable,
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_INP_PORT,
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortEnable,
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_OUT_PORT,
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGEnc_Start_ComponentThread() Starts Component Thread
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  Creates data pipes, commmand pipes and initializes Component thread
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorInsufficientResources    Insiffucient Resources
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGEnc_Start_ComponentThread(OMX_HANDLETYPE pComponent)
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside JPEGEnc_Start_ComponentThread function\n");
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create the pipe used to maintain free output buffers*/
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = pipe (pComponentPrivate->free_outBuf_Q);
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError ) {
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create the pipe used to maintain filled input buffers*/
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = pipe (pComponentPrivate->filled_inpBuf_Q);
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError ) {
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create the pipe used to send commands to the thread */
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = pipe (pComponentPrivate->nCmdPipe);
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError ) {
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* create the pipe used to send commands to the thread */
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = pipe (pComponentPrivate->nCmdDataPipe);
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError ) {
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*  No buffers have been sent to dsp    */
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nNum_dspBuf = 0;
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Create the Component Thread */
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = pthread_create (&(pComponentPrivate->ComponentThread), NULL,
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_JpegEnc_Thread, pComponent);
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError || !pComponentPrivate->ComponentThread ) {
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ThreadCreated(pComponentPrivate->pPERF,
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->ComponentThread,
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_FOURCC('J','P','E','T'));
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------- */
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @JPEGEnc_Free_ComponentResources() This function is called by the component during
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* de-init to close component thread, Command pipe, data pipe & LCML pipe.
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @param pComponent  handle for this instance of the component
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @pre
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @post
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @return none
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------- */
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGEnc_Free_ComponentResources(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate)
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE threadError = OMX_ErrorNone;
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE err = OMX_ErrorNone;
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int pipeError = 0;
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int pthreadError = 0;
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE eCmd = OMX_CustomCommandStopThread;
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nParam = 0;
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_TI_Debug dbg;
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
433b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_DBG_INIT_BASE(dbg);
434b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_CHECK_PARAM(pComponentPrivate);
435b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_Boundary(pComponentPrivate->pPERF,
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      PERF_BoundaryStart | PERF_BoundaryCleanup);
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( pComponentPrivate->pLCML != NULL && pComponentPrivate->isLCMLActive) {
442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	LCML_ControlCodec(((LCML_DSP_INTERFACE*)pComponentPrivate->pLCML)->pCodecinterfacehandle,EMMCodecControlDestroy,NULL);
443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	dlclose(pComponentPrivate->pDllHandle);
444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	pComponentPrivate->pLCML = NULL;
445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	pComponentPrivate->isLCMLActive = 0;
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pipeError = write(pComponentPrivate->nCmdPipe[1], &eCmd, sizeof(eCmd));
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pipeError == -1) {
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while writing to nCmdPipe\n");
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pipeError = write(pComponentPrivate->nCmdDataPipe[1], &nParam, sizeof(nParam));
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pipeError == -1) {
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while writing to nCmdPipe\n");
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthreadError = pthread_join (pComponentPrivate->ComponentThread,
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                 (void*)&threadError);
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != pthreadError ) {
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(dbg, "Error while closing Component Thread\n");
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( OMX_ErrorNone != threadError && OMX_ErrorNone != eError ) {
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(dbg, "Error while closing Component Thread\n");
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*  close the data pipe handles */
473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->free_outBuf_Q[0]);
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing data pipe\n");
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->filled_inpBuf_Q[0]);
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing data pipe\n");
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->free_outBuf_Q[1]);
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing data pipe\n");
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->filled_inpBuf_Q[1]);
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing data pipe\n");
496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*  close the command pipe handles  */
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->nCmdPipe[0]);
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing cmd pipe\n");
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->nCmdPipe[1]);
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing cmd pipe\n");
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*  close the command data pipe handles */
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->nCmdDataPipe[0]);
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing cmd pipe\n");
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = close (pComponentPrivate->nCmdDataPipe[1]);
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( 0 != err && OMX_ErrorNone == eError ) {
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(dbg, "Error while closing cmd pipe\n");
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->jpege_mutex);
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->stop_cond);
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->flush_cond);
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* pthread_cond_destroy(&pComponentPrivate->control_cond); */
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_destroy(&pComponentPrivate->jpege_mutex_app);
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->populate_cond);
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_destroy(&pComponentPrivate->unpopulate_cond);
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
533b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    		PERF_BoundaryComplete | PERF_BoundaryCleanup);
535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERF);
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* LinkedList_DisplayAll (&AllocList); */
539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREEALL();
540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList_Destroy(&AllocList);
541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(dbg, "Exiting JPEG FreeComponentresources\n");
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE Fill_JpegEncLCMLInitParams(LCML_DSP *lcml_dsp, OMX_U16 arr[], OMX_HANDLETYPE pComponent)
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
554b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int outbufsize = 0;
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
556b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U16 *ptCreateString = (OMX_U16*)arr;
557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 *ptCreateStringPPLIB = (OMX_U32*)arr;
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Initialize Params\n");
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    outbufsize = pPortDefOut->nBufferSize;
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->In_BufInfo.nBuffers = NUM_OF_BUFFERSJPEG;
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->In_BufInfo.nSize = pPortDefIn->nBufferSize;
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD;
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Out_BufInfo.nBuffers = NUM_OF_BUFFERSJPEG;
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Out_BufInfo.nSize = outbufsize;
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD;
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.nNumOfDLLs = OMX_JPEGENC_NUM_DLLS;
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID * )&JPEGESOCKET_TI_UUID;
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,JPEG_ENC_NODE_DLL);
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT;
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID * )&JPEGESOCKET_TI_UUID;
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,JPEG_ENC_NODE_DLL);
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT;
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[2].uuid =(struct DSP_UUID * ) &USN_UUID;
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,USN_DLL);
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT;
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
588b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[3].uuid =(struct DSP_UUID * ) &CONVERSIONS_UUID;
589b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[3].DllName,CONVERSIONS_DLL);
590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[3].eDllType = DLL_DEPENDENT;
591b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __JPEG_OMX_PPLIB_ENABLED__
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[4].uuid =(struct DSP_UUID * ) &PPLIB_UUID;
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[4].DllName,PPLIB_DLL);
595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    lcml_dsp->NodeInfo.AllUUIDs[4].eDllType = DLL_DEPENDENT;
596b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->SegID = 0;
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Timeout = -1;
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Alignment = 0;
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    lcml_dsp->Priority = 5;
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
602d8b67d87f24cb14a2550934992536d7840008276Sanjay Guin#ifdef __JPEG_OMX_PPLIB_ENABLED__
603b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (352*288)) {
604b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 2 ;
605b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
606b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (640*480)) {
607b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 2 +1 ; // temporary fix meanwhile SN confirms is there's any problem with VGA profile ID
608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
609b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (720*576)) {
610b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 3 ;
611b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
612b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (1*1024*1024)) {
613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 4 ;
614b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (2*1024*1024)) {
616b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 5 ;
617b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
618b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (3*1024*1024)) {
619b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 6 ;
620b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
621b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (4*1024*1024)) {
622b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 7 ;
623b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
624b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (5*1024*1024)) {
625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 8 ;
626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else if ((pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth) <= (6*1024*1024)) {
628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 9 ;
629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      else {
631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          lcml_dsp->ProfileID = 10;
632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin      }
633d8b67d87f24cb14a2550934992536d7840008276Sanjay Guin#else
634b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* according to JPEG Enc SN Interface guide */
635b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* if PPLib is not enabled than  use profile 1 by default */
63620d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    lcml_dsp->ProfileID = 2;
637d8b67d87f24cb14a2550934992536d7840008276Sanjay Guin#endif
638d8b67d87f24cb14a2550934992536d7840008276Sanjay Guin
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* CrPhArgs for JpegEnc */
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[0] = JPGENC_SNTEST_STRMCNT;
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[1] = JPGENC_SNTEST_INSTRMID; /* Stream ID   */
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[2] = 0;                      /* Stream based input stream   */
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[3] = JPGENC_SNTEST_INBUFCNT; /* Number of buffers on input stream   */
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[4] = JPGENC_SNTEST_OUTSTRMID;/* Stream ID   */
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[5] = 0;                      /* Stream based input stream   */
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[6] = JPGENC_SNTEST_OUTBUFCNT;/* Number of buffers on input stream   */
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[7] = (pPortDefOut->format.image.nFrameWidth > 0) ? pPortDefOut->format.image.nFrameWidth : JPGENC_SNTEST_MAX_WIDTH;
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[8] = (pPortDefOut->format.image.nFrameHeight > 0) ? pPortDefOut->format.image.nFrameHeight : JPGENC_SNTEST_MAX_HEIGHT;
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar ) {
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[9] = 1;
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else if ( pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_FormatCbYCrY ) {
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        arr[9] = 4;
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }  else {
656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        arr[9] = 4;
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    */
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[9] = 1;
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
66120d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[10] = 512; /* Maximum Horizontal Size of the Thumbnail for App0 marker */
66220d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[11] = 384; /* Maximum Vertical Size of the Thumbnail for App0 marker */
66320d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[12] = 512; /* Maximum Horizontal Size of the Thumbnail for App1 marker */
66420d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[13] = 384; /* Maximum Vertical Size of the Thumbnail for App1 marker */
66520d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[14] = 512; /* Maximum Horizontal Size of the Thumbnail for App13 marker */
66620d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[15] = 384; /* Maximum Vertical Size of the Thumbnail for App13 marker */
667b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[16] = 0; /* Number of scans is always 0 */
668b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
669b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/*
670b65f253fdc60f6208a54911bee793d225f23cdf8James Dongthis option supportsonly up to 3 mega pixels
671b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	if (pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar)
672b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
673b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	ptCreateString[16] = 1;
674b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
675b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*/
676b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
677b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[17] = 0;
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( pPortDefIn->format.image.eColorFormat == OMX_COLOR_Format32bitARGB8888){
679b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	ptCreateString[17] = 1; //Convert flag
680b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
681b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
682b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	/*Do an internal conversion from YUV420P to YUV422I and encode so that
683b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	this JPEG would be viewable using the TI JPEG decoder*/
684b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	else if (pComponentPrivate->bConvert420pTo422i ){
685b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		if (pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar ){
686b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			ptCreateString[17] = 10;
687b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			if(pComponentPrivate->bPPLibEnable)
688b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			{
689b65f253fdc60f6208a54911bee793d225f23cdf8James Dong				/* memory requirement for having both conversion and pplib is much larger */
690b65f253fdc60f6208a54911bee793d225f23cdf8James Dong				lcml_dsp->ProfileID +=3;
691b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			}
692b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		}
693b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		else{
694b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			OMX_PRMGR4(pComponentPrivate->dbg, "Error invalid ColorFormat for YUVConvertion\n");
695b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			eError=-1;
696b65f253fdc60f6208a54911bee793d225f23cdf8James Dong			goto EXIT;
697b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		}
698b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
699b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
70020d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[18] = 512; /* Maximum Horizontal Size of the Thumbnail for App5 marker */
70120d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura    ptCreateString[19] = 384; /* Maximum Vertical Size of the Thumbnail for App5 marker */
702b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
703b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __JPEG_OMX_PPLIB_ENABLED__
704b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
705b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //size
706b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateStringPPLIB[10] = JPEGENC_PPLIB_CREATEPARAM_SIZE;
707b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
708b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //SlibVersion
709b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateStringPPLIB[11] = 0x00000100;
710b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
711b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //MaxInWidth
712b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateStringPPLIB[12] = pPortDefIn->format.image.nFrameWidth;
713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
714b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //MaxOutWidth
715b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateStringPPLIB[13] = pPortDefIn->format.image.nFrameWidth;
716b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Input Format => 0:RGB24, 1:RGB16, 2:RGB12, 3:RGB8, 4:RGB4, 5:YUV422ILE, 6:YUV422IBE,
717b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //                7:422_IN_UY_WS, 8:422_IN_YU_WS, 9:YUV420P, 10:GRAY8, 11:GRAY4, 12:GRAY2_IN, 13:GRAY1
718b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_FormatCbYCrY
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ||  pPortDefIn->format.image.eColorFormat == OMX_COLOR_Format32bitARGB8888
720b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ||  pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYCbYCr
721b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ||  ptCreateString[17] == 10)
722b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
723b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[14] = 5;
724b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
725b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_FormatYUV420PackedPlanar)
726b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
727b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[14] = 9;
728b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
729b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if (pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_Format16bitRGB565)
730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[14] = 1;
732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
733b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else{
734b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[14] = 9;
735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
736b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
737b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //YuvOutputFormat
738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // --> 0 = OFF, 1 = YUV420, 2 = YUV422ILE, 3 = YUV422IBE
739b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_FormatYUV420PackedPlanar
740b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        && ptCreateString[17] != 10)
741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[15] = 1;
743b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
744b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else
745b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
746b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptCreateStringPPLIB[15] = 2;
747b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
749b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //RGBOuputFormat
750b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // --> 0 = OFF, 1 = RGB4, 2 = RGB8, 3 = RGB12, 4 = RGB16, 5 = RGB24, 6 = RGB32,
751b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //     7 = GRAY8, 8 = GRAY4, 9 = GRAY2, 10 = GRAY1
752b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateStringPPLIB[16] = 0;
753b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
754b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if(pComponentPrivate->bPPLibEnable)
755b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {
756b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ptCreateString[34] = END_OF_CR_PHASE_ARGS;
757b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }else
758b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {
759b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        ptCreateString[20] = END_OF_CR_PHASE_ARGS;
760b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
761b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
762b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptCreateString[20] = END_OF_CR_PHASE_ARGS;
763b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    lcml_dsp->pCrPhArgs = ptCreateString;
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE HandleJpegEncInternalFlush(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1)
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 aParam[4];
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
775b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
778b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nParam1 == 0x0 ||
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (int)nParam1 == -1 ) {
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[0] = USN_STRMCMD_FLUSH;
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[1] = 0;
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[2] = 0;
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam);
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
788b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto PRINT_EXIT;
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->bFlushComplete == OMX_FALSE) {
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->flush_cond, &pComponentPrivate->jpege_mutex);
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
800b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nParam1 == 0x1 ||
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	 (int)nParam1 == -1 ) {
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[0] = USN_STRMCMD_FLUSH;
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[1] = 1;
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[2] = 0;
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam);
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
810b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto PRINT_EXIT;
811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->bFlushComplete == OMX_FALSE) {
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->flush_cond, &pComponentPrivate->jpege_mutex);
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
824b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    PRINT_EXIT:
825b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_PRINT1(pComponentPrivate->dbg, "Exiting HandleCommand FLush Function JEPG Encoder\n");
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncCommandFlush(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1)
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 aParam[4];
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE *pLcmlHandle = NULL;
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
840b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nParam1 == 0x0 ||
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (int)nParam1 == -1 ) {
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[0] = USN_STRMCMD_FLUSH;
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[1] = 0;
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[2] = 0;
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam);
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
851b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto PRINT_EXIT;
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_PRDSP2(pComponentPrivate->dbg, "sent EMMCodecControlStrmCtrl command\n");
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->bFlushComplete == OMX_FALSE) {
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->flush_cond, &pComponentPrivate->jpege_mutex);
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->nInPortIn > pComponentPrivate->nInPortOut) {
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            int ret;
869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            ret = read(pComponentPrivate->filled_inpBuf_Q[0], &(pBuffHead), sizeof(pBuffHead));
871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( ret == -1 ) {
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n");
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffHead != NULL) {
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBuffPrivate = pBuffHead->pInputPortPrivate;
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nInPortOut ++;
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (return empty output buffer) %lu %lu %lu %lu\n",
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
885b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "before EmptyBufferDone\n");
887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EmptyBufferDone(
888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pHandle,
889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pHandle->pApplicationPrivate,
890b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                           pBuffHead);
891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_PRBUFFER1(pComponentPrivate->dbg, "after EmptyBufferDone\n");
892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
893b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for ( i=0; i < pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual; i++ ) {
895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PREF(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[i]->pBufferHdr,pBuffer),
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              0,
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleHLMM);
901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          pBuffPrivate = (JPEGENC_BUFFER_PRIVATE*) pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[i]->pBufferHdr->pInputPortPrivate;
903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          OMX_PRBUFFER2(pComponentPrivate->dbg, "flush input port. buffer owner (%d) %d\n", i, pBuffPrivate->eBufferOwner);
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
905b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (flush input) %lu %lu %lu %lu\n",
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
911b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* returned all input buffers */
914b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      pComponentPrivate->pHandle->pApplicationPrivate,
916b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                      OMX_EventCmdComplete,
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_CommandFlush,
918b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      JPEGENC_INP_PORT,
919b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                      NULL);
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
922b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( nParam1 == 0x1 ||
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (int)nParam1 == -1 ) {
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[0] = USN_STRMCMD_FLUSH;
928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[1] = 1;
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        aParam[2] = 0;
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam);
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
933b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto PRINT_EXIT;
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "(1) sent EMMCodecControlStrmCtrl command\n");
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->bFlushComplete == OMX_FALSE) {
939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->flush_cond, &pComponentPrivate->jpege_mutex);
941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bFlushComplete = OMX_FALSE;
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* return all output buffers */
946b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for ( i=0; i < pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nBufferCountActual ; i++ ) {
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "BEFORE  FillBufferDone in OMX_CommandFlush\n");
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr,pBuffer),
954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PREF(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr,nFilledLen),
955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          PERF_ModuleHLMM);
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          pBuffPrivate = (JPEGENC_BUFFER_PRIVATE*) pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr->pOutputPortPrivate;
958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          OMX_PRBUFFER2(pComponentPrivate->dbg, "flush output port. buffer owner (%d) %d\n", i, pBuffPrivate->eBufferOwner);
959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          OMX_PRBUFFER1(pComponentPrivate->dbg, "in flush 1: buffer %d owner %d\n", i, pBuffPrivate->eBufferOwner);
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          if (pBuffPrivate->eBufferOwner == JPEGENC_BUFFER_COMPONENT_IN) {
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  OMX_PRBUFFER1(pComponentPrivate->dbg, "return output buffer %p from free_in_pipe (flush)\n",
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                     pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr);
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->nOutPortOut ++;
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->cbInfo.FillBufferDone (pComponentPrivate->pHandle,
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pHandle->pApplicationPrivate,
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr);
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          }
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->nOutPortIn > pComponentPrivate->nOutPortOut) {
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            int ret;
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "in while loop %lu %lu )\n", pComponentPrivate->nOutPortIn, pComponentPrivate->nOutPortOut);
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            ret = read(pComponentPrivate->free_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead));
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( ret == -1 ) {
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n");
982b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                goto PRINT_EXIT;
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM1(pComponentPrivate->dbg, "after read\n");
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffHead != NULL) {
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pBuffPrivate = pBuffHead->pOutputPortPrivate;
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nOutPortOut ++;
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (return empty output buffer) %lu %lu %lu %lu\n",
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
995b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_PRBUFFER1(pComponentPrivate->dbg, "before FillBufferDone\n");
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle,
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pHandle->pApplicationPrivate,
999b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pBuffHead);
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_PRBUFFER1(pComponentPrivate->dbg, "after FillBufferDone\n");
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (flush input) %lu %lu %lu %lu\n",
1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
1007b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
1008b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1009b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
1011b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_CommandFlush,
1013b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               JPEGENC_OUT_PORT,
1014b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               NULL);
1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1017b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    PRINT_EXIT:
1018b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_PRINT1(pComponentPrivate->dbg, "Exiting HandleCommand FLush Function JEPG Encoder\n");
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE SendDynamicParam(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate)
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    IDMJPGE_TIGEM_DynamicParams* pTmpDynParams;
1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = NULL;
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char* pTmp = NULL;
1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 cmdValues[3] = {0, 0, 0};
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    IIMGENC_DynamicParams ptParam;
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ptParam.nNumAU = 0; /*  XDM_DEFAULT */
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    //ptParam.nSize   =   sizeof(IIMGENC_DynamicParams);
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ptParam.nSize   =   sizeof(IDMJPGE_TIGEM_DynamicParams) ;
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if ( pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYUV420PackedPlanar ) {
1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ptParam.nInputChromaFormat = 1;
1046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1047b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else if ( pPortDefIn->format.image.eColorFormat ==  OMX_COLOR_FormatCbYCrY
1048b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    		|| pPortDefIn->format.image.eColorFormat == OMX_COLOR_Format32bitARGB8888
1049b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            || pPortDefIn->format.image.eColorFormat == OMX_COLOR_Format16bitRGB565) {
1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ptParam.nInputChromaFormat = 4;
1051b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1052b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if ( pPortDefIn->format.image.eColorFormat == OMX_COLOR_FormatYCbYCr) {
1053b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		ptParam.nInputChromaFormat = 9;
1054b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ptParam.nInputChromaFormat = 1;
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCrop->nWidth == 0)
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1061b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptParam.nInputWidth     = pPortDefIn->format.image.nFrameWidth;
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1065b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptParam.nInputWidth     = pComponentPrivate->pCrop->nWidth;
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1067b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCrop->nHeight == 0)
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1070b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptParam.nInputHeight     = pPortDefIn->format.image.nFrameHeight;
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1074b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptParam.nInputHeight     = pComponentPrivate->pCrop->nHeight;
1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ptParam.nCaptureWidth   =  pPortDefIn->format.image.nFrameWidth;
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ptParam.nGenerateHeader =   0; /*XDM_ENCODE_AU*/
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ptParam.qValue          =   pComponentPrivate->pQualityfactor->nQFactor;
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP1(pComponentPrivate->dbg, "ptParam.qValue %lu\n", ptParam.qValue);
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmp = (char*)pComponentPrivate->pDynParams;
1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmp += 128;
1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams = (IDMJPGE_TIGEM_DynamicParams*)pTmp;
1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams->params         = ptParam;
1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams->captureHeight = pPortDefIn->format.image.nFrameHeight;
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams->DRI_Interval  = pComponentPrivate->nDRI_Interval;
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams->huffmanTable = NULL;
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTmpDynParams->quantTable     = NULL;
1093b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1094b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    cmdValues[0] = IUALG_CMD_SETSTATUS;
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    cmdValues[1] = (OMX_U32)(pTmpDynParams);
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    cmdValues[2] = sizeof(IDMJPGE_TIGEM_DynamicParams) + 128;
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bAckFromSetStatus = 0;
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
1101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               EMMCodecControlAlgCtrl,
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               (void*)&cmdValues);
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __JPEG_OMX_PPLIB_ENABLED__
1109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_ERRORTYPE SendDynamicPPLibParam(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate,OMX_U32 *ptInputParam)
1110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
1111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
1114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
1116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
1117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
1118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // PPLIB hardcoded params
1120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulOutPitch = 0;
1121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBVideoGain=64;
1122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBEnableCropping=0;
1123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBXstart=0;
1124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBYstart=0;
1125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBXsize=0;
1126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBYsize=0;
1127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBEnableZoom=0;
1128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBZoomFactor=0;
1129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBZoomLimit=0;
1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBZoomSpeed=0;
1131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBLightChroma=0;
1132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBLockedRatio=1;
1133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBMirroring=0;
1134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBRGBrotation=0;
1135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBYUVRotation=0;
1136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBIORange=1;
1137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 ulPPLIBDithering=0;
1138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 cOffset = 0;
1140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* PPLIB_RunTimeParams */
1142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns size; // size of structure
1143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[0] = JPEGENC_PPLIB_DYNPARM_SIZE; // 252 bytes
1145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulInWidth; // picture buffer width
1147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[1] = pPortDefIn->format.image.nFrameWidth;
1149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulInHeight; // picture buffer height
1151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[2] = pPortDefIn->format.image.nFrameHeight;
1153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameEnabled[0] (enable instance 1 of VGPOP)
1155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[3] = 1;
1157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameEnabled[1] (enable instance 2 of VGPOP - not used now)
1159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[4] = 0;
1161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns EnalbeYUVOutput[0]
1163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[5] = 1;
1165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameEnabled[1]
1167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[6] = 0;
1169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns EnalbeRGBOutput[0]
1171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[7] = 0;
1173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns EnalbeRGBOutput[1]
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[8] = 0;
1177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameInputStartYOffset[0]
1179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[9] = 0;
1181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameInputStartYOffset[1]
1183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[10] = 0;
1185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin     cOffset = (pPortDefIn->format.image.nFrameWidth * pPortDefIn->format.image.nFrameHeight);
1187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameInputStartCOffset[0]
1189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[11] = cOffset;
1191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameInputStartCOffset[1]
1193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[12] = cOffset;
1195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputStartYOffset[0]
1197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[13] = 0;
1199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputStartYOffset[1]
1201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[14] = 0;
1203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ulOutPitch > 0) {
1205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (ulPPLIBYUVRotation == 0 || ulPPLIBYUVRotation == 180) {
1206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cOffset = (pPortDefIn->format.image.nFrameHeight * ulOutPitch);
1207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
1209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            cOffset = (pPortDefIn->format.image.nFrameWidth * ulOutPitch);
1210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        cOffset = (pPortDefIn->format.image.nFrameHeight * pPortDefIn->format.image.nFrameWidth);
1214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputStartCOffset[0]
1217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[15] = cOffset;
1218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputStartCOffset[1]
1220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[16] = cOffset;
1221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputRGBOffset[0]
1223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[17] = 0;
1224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns FrameOutputRGBOffset[1]
1226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[18] = 0;
1227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulOutHeight[0]; // picture buffer height
1229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[19] = pPortDefIn->format.image.nFrameHeight;
1230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulOutHeight[1]; // picture buffer height
1232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[20] = 0;
1233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulOutWidth[0]; // picture buffer width
1235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[21] = pPortDefIn->format.image.nFrameWidth;
1236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulOutWidth[1]; // picture buffer width
1238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[22] = 0;
1239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Contrast (same as Video Gain)
1241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[23] = ulPPLIBVideoGain;
1242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Contrast (same as Video Gain)
1244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[24] = ulPPLIBVideoGain;
1245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ulPPLIBEnableCropping == 1) {
1247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // Cropping
1248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXstart[0]; // Hin active start
1249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[25] = ulPPLIBXstart;
1250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // Cropping
1252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXstart[1]; // Hin active start
1253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[26] = 0;
1254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulInYstart[0]; // Vin active start
1256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[27] = ulPPLIBYstart;
1257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulInYstart[1]; // Vin active start
1259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[28] = 0;
1260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXsize[0]; // Hin active width
1262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[29] = ulPPLIBXsize;
1263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXsize[1]; // Hin active width
1265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[30] = 0;
1266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInYsize; // Vin active height
1268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[31] = ulPPLIBYsize;
1269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInYsize; // Vin active height
1271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[32] = 0;
1272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // Cropping
1275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXstart; // Hin active start
1276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[25] = 0;
1277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // Cropping
1279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXstart[1]; // Hin active start
1280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[26] = 0;
1281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulInYstart; // Vin active start
1283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[27] = 0;
1284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulInYstart[1]; // Vin active start
1286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[28] = 0;
1287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXsize; // Hin active width
1289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[29] = 0;
1290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInXsize[1]; // Hin active width
1292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[30] = 0;
1293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInYsize; // Vin active height
1295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[31] = 0;
1296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulInYsize; // Vin active height
1298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[32] = 0;
1299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (ulPPLIBEnableZoom) {
1302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //Zoom
1303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulZoomFactor; // zooming ratio (/1024)
1304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[33] = ulPPLIBZoomFactor;
1305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //Zoom
1307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulZoomFactor; // zooming ratio (/1024)
1308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[34] = 1024;
1309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulZoomLimit; // zooming ratio limit (/1024)
1311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[35] = ulPPLIBZoomLimit;
1312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulZoomLimit; // zooming ratio limit (/1024)
1314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[36] = 1024;
1315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgInt slZoomSpeed; // speed of ratio change
1317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[37] = ulPPLIBZoomSpeed;
1318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgInt slZoomSpeed; // speed of ratio change
1320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[38] = 0;
1321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
1323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //Zoom
1324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulZoomFactor; // zooming ratio (/1024)
1325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[33] = 1024;
1326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //Zoom
1328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        //LgUns ulZoomFactor; // zooming ratio (/1024)
1329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[34] = 1024;
1330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulZoomLimit; // zooming ratio limit (/1024)
1332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[35] = 1024;
1333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgUns ulZoomLimit; // zooming ratio limit (/1024)
1335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[36] = 1024;
1336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgInt slZoomSpeed; // speed of ratio change
1338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[37] = 0;
1339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        // LgInt slZoomSpeed; // speed of ratio change
1341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        ptInputParam[38] = 0;
1342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bLightChroma[0]; // Light chrominance process
1345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[39] = ulPPLIBLightChroma;
1346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bLightChroma[1]; // Light chrominance process
1348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[40] = ulPPLIBLightChroma;
1349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Aspect Ration Locked/unlocked
1351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bLockedRatio; // keep H/V ratio
1352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[41] = ulPPLIBLockedRatio;
1353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Aspect Ration Locked/unlocked
1355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bLockedRatio; // keep H/V ratio
1356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[42] = ulPPLIBLockedRatio;
1357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Mirroring and Rotation
1359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bMirror; // to mirror the picture
1360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[43] = ulPPLIBMirroring;
1361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    //Mirroring and Rotation
1363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bMirror; // to mirror the picture
1364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[44] = ulPPLIBMirroring;
1365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eRGBrotation; // 0, 90, 180, 270 deg.
1367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[45] = ulPPLIBRGBrotation;
1368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eRGBrotation; // 0, 90, 180, 270 deg.
1370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[46] = ulPPLIBRGBrotation;
1371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eYUVrotation; // 0, 90, 180, 270 deg.
1373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[47] = ulPPLIBYUVRotation;
1374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eYUVrotation; // 0, 90, 180, 270 deg.
1376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[48] = ulPPLIBYUVRotation;
1377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // IO Range and Dithering
1379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eIORange; // Input/Output video range
1380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 0 = VGPOP_IN_16_235_OUT_16_235 (limi range to limi range),
1381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 1 = VGPOP_IN_00_255_OUT_00_255 (full range to full range),
1382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 2 = VGPOP_IN_00_255_OUT_16_235 (full range to limi range),
1383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 3 = VGPOP_IN_16_235_OUT_00_255 (limi range to full range)
1384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[49] = ulPPLIBIORange;
1385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // IO Range and Dithering
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns eIORange; // Input/Output video range
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 0 = VGPOP_IN_16_235_OUT_16_235 (limi range to limi range),
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 1 = VGPOP_IN_00_255_OUT_00_255 (full range to full range),
1390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 2 = VGPOP_IN_00_255_OUT_16_235 (full range to limi range),
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // 3 = VGPOP_IN_16_235_OUT_00_255 (limi range to full range)
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[50] = ulPPLIBIORange;
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bDithering; // ON Enables the dithering
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[51] = ulPPLIBDithering;
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bDithering; // ON Enables the dithering
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[52] = ulPPLIBDithering;
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulFrameOutputPitch; // ON Enables the dithering
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[53] = ulOutPitch;
1402b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns bDithering; // ON Enables the dithering
1404b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[54] = ulOutPitch;
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulAlphaRGB;
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[55] = 0;
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulAlphaRGB;
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[56] = 0;
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulIsFrameGenerated[0]
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[57] = 0;
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulIsFrameGenerated[1]
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[58] = 0;
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulYUVFrameSize[0]
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[59] = 0;
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulYUVFrameSize[1]
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[60] = 0;
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulRGBFrameSize[0]
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[61] = 0;
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    // LgUns ulRGBFrameSize[1]
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ptInputParam[62] = 0;
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return eError;
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  HandleCommand() Handle State type commands
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  Depending on the State Command received it executes the corresponding code.
1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param phandle    handle for this instance of the component
1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorInsufficientResources    Insiffucient Resources
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorInvalidState    Invalid State Change
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncCommand (JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1)
1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE pLcmlHandle = NULL;
1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP *lcml_dsp;
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U16 arr[100];
1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_CALLBACKTYPE cb;
1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 lImageResolution = 0;
1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nMHzRM = 0;
1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1466b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "JPEGEnc Handlecommand\n");
1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle;
1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( (OMX_STATETYPE)(nParam1) ) {
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateIdle:
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateIdle\n");
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE1(pComponentPrivate->dbg, "CHP 1 pComponentPrivate->nCurState  = %d\n",pComponentPrivate->nCurState );
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE1(pComponentPrivate->dbg, "In idle in %lu out %lu\n", pComponentPrivate->nInPortIn, pComponentPrivate->nOutPortOut);
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StateIdle ) {
1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
1483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorSameState,
1484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if ( pComponentPrivate->nCurState == OMX_StateLoaded ||
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->nCurState == OMX_StateWaitForResources) {
1490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      OMX_PRSTATE2(pComponentPrivate->dbg, "state tranc from loaded to idle\n");
1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  PERF_Boundary(pComponentPrivate->pPERFcomp,
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                PERF_BoundaryStart | PERF_BoundarySetup);
1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED /* Resource Manager Proxy Calls */
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *)ResourceManagerCallback;
1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            lImageResolution = pPortDefIn->format.image.nFrameWidth * pPortDefIn->format.image.nFrameHeight;
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_GET_RM_VALUE(lImageResolution, nMHzRM, pComponentPrivate->dbg);
1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRMGR2(pComponentPrivate->dbg, "Value sent to RM = %d\n", nMHzRM);
1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->nCurState != OMX_StateWaitForResources) {
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, OMX_JPEG_Encoder_COMPONENT, nMHzRM, 3456, &(pComponentPrivate->rmproxyCallback));
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* resource is not available, need set state to OMX_StateWaitForResources*/
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRMGR4(pComponentPrivate->dbg, "Resource is not available\n");
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventError,
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_ErrorInsufficientResources,
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_TI_ErrorSevere,
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    eError = OMX_ErrorNone;
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pPortDefIn->bEnabled == OMX_TRUE && pPortDefOut->bEnabled == OMX_TRUE ) {
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                while ( (!pPortDefIn->bPopulated) || (!pPortDefOut->bPopulated)) {
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pthread_cond_wait(&pComponentPrivate->populate_cond, &pComponentPrivate->jpege_mutex_app);
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError =  GetJpegEncLCMLHandle(pHandle);
1532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( eError != OMX_ErrorNone ) {
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "GetLCMLHandle failed...\n");
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec);
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            Fill_JpegEncLCMLInitParams(lcml_dsp,arr, pHandle);
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            cb.LCML_Callback = (void *) JpegEncLCML_Callback;
1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "Start LCML_InitMMCodec JPEG Phase in JPEG.....\n");
1542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*  calling initMMCodec to init codec with details filled earlier   */
1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb);
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( eError != OMX_ErrorNone ) {
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "InitMMCodec failed...  %x\n", eError);
1547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                printf("Error : InitMMCodec failed...>>>>>>");
1548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_EventError,
1551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_ErrorHardware,
1552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1553b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                       NULL);
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->isLCMLActive = 1;
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "End LCML_InitMMCodec Phase\n");
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bFlushComplete = OMX_FALSE;
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE2(pComponentPrivate->dbg, "State has been Set to Idle\n");
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateIdle;
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1564644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            /* Decrement reference count with signal enabled */
1565644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
1566644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                   return OMX_ErrorUndefined;
1567644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            }
1568644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nInPortIn   = pComponentPrivate->nInPortOut   = 0;
1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nOutPortIn = pComponentPrivate->nOutPortOut = 0;
1571b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Encoder_COMPONENT, OMX_StateIdle,  3456, NULL);
1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available Loaded ->Idle\n");
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_ErrorInsufficientResources,
1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1587b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_BoundaryComplete | PERF_BoundarySetup);
1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1592b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pComponentPrivate->pHandle->pApplicationPrivate,
1595b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          OMX_EventCmdComplete,
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          OMX_CommandStateSet,
1597b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                          pComponentPrivate->nCurState,
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          NULL);
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1600b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1601b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1602b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else if ( pComponentPrivate->nCurState == OMX_StateExecuting ||
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                  pComponentPrivate->nCurState == OMX_StatePause ) {
1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_BoundaryComplete | PERF_BoundarySteadyState);
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1608b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          pComponentPrivate->bDSPStopAck = OMX_FALSE;
1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          OMX_PRDSP2(pComponentPrivate->dbg, "bDSPStopAck is %d\n", pComponentPrivate->bDSPStopAck);
1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,MMCodecControlStop,NULL);
1613b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin          pComponentPrivate->nApp_nBuf= 1;
1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         /* HandleJpegEncCommandFlush(pComponentPrivate, -1); */
1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          /*
1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          if ( pComponentPrivate->isLCMLActive ==1 ) {
1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              LCML_ControlCodec(((LCML_DSP_INTERFACE*)pComponentPrivate->pLCML)->pCodecinterfacehandle,EMMCodecControlDestroy,NULL);
1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              dlclose(pComponentPrivate->pDllHandle);
1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              pComponentPrivate->isLCMLActive = 0;
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          }
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          */
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1625b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Encoder_COMPONENT, OMX_StateIdle, 3456, NULL);
1626b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (eError != OMX_ErrorNone) {
1627b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	        OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available Executing ->Idle\n");
1628b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateWaitForResources;
1629b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
1630b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
1631b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventCmdComplete,
1632b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_CommandStateSet,
1633b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pComponentPrivate->nCurState,
1634b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   NULL);
1635b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          pComponentPrivate->ExeToIdleFlag |= JPEGE_BUFFERBACK;
1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG enc: before stop lock\n");
1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /*
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while ((pComponentPrivate->ExeToIdleFlag & 0x3) != JPEGE_IDLEREADY) {
1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->stop_cond, &pComponentPrivate->jpege_mutex);
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        */
1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        while (pComponentPrivate->bDSPStopAck == OMX_FALSE) {
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_wait(&pComponentPrivate->stop_cond, &pComponentPrivate->jpege_mutex);
1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG enc:got STOP ack from DSP\n");
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int i;
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i = 0; i < (int)(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual); i ++) {
1658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            JPEGENC_BUFFER_PRIVATE    *pBuffPrivate = NULL;
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[i]->pBufferHdr;
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate = pBuffHead->pInputPortPrivate;
1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "JPEG enc:: owner %d \n", pBuffPrivate->eBufferOwner);
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufSupplier != OMX_BufferSupplyInput) {
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent == NULL){
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "Sending buffer to app\n");
1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, "Handle error from DSP/bridge\n");
1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->nInPortOut ++;
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EmptyBufferDone(
1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pHandle,
1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pHandle->pApplicationPrivate,
1675b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                   pBuffHead);
1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                else{
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG enc:: Sending beffer to tunnel, pHandle=%p\n", pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent);
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pBuffHead->nFilledLen = 0;
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
1681b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_FillThisBuffer(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent,
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pBuffHead);
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1687b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "returned all input buffers\n");
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i = 0; i < (int)(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nBufferCountActual); i ++) {
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGENC_BUFFER_PRIVATE    *pBuffPrivate = NULL;
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr;
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate = pBuffHead->pOutputPortPrivate;
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer %p owner %d \n", pBuffHead, pBuffPrivate->eBufferOwner);
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufSupplier != OMX_BufferSupplyOutput) {
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->hTunnelComponent == NULL){
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG enc:: Sending OUTPUT buffer to app\n");
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, "Handle error from DSP/bridge\n");
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->nOutPortOut ++;
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.FillBufferDone(
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pHandle,
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pComponentPrivate->pHandle->pApplicationPrivate,
1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   pBuffHead);
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    else{
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG enc:: Sending OUTPUT buffer to Tunnel component\n");
1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
1713b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_EmptyThisBuffer(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->hTunnelComponent,
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pBuffHead);
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "returned all output buffers\n");
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         pComponentPrivate->nCurState = OMX_StateIdle;
1722644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
1723644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         /* Decrement reference count with signal enabled */
1724644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
1725644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              return OMX_ErrorUndefined;
1726644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         }
1727644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pComponentPrivate->pHandle->pApplicationPrivate,
1730b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               OMX_EventCmdComplete,
1731b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               OMX_CommandStateSet,
1732b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin               pComponentPrivate->nCurState,
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               NULL);
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             pComponentPrivate->ExeToIdleFlag = 0;
1735b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         OMX_PRSTATE4(pComponentPrivate->dbg, "Error: Invalid State Given by Application\n");
1738b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin         pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    pComponentPrivate->pHandle->pApplicationPrivate,
1740b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                            OMX_EventError,
1741b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_ErrorIncorrectStateTransition,
1742b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                    OMX_TI_ErrorMinor,
1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    "Invalid State");
1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateExecuting:
1748b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateExecuting \n");
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "In exec in %lu out %lu\n", pComponentPrivate->nInPortIn, pComponentPrivate->nOutPortOut);
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StateExecuting ) {
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1754b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
1755b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorSameState,
1756b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
1758b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if ( pComponentPrivate->nCurState == OMX_StateIdle || pComponentPrivate->nCurState == OMX_StatePause ) {
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_BoundaryStart | PERF_BoundarySteadyState);
1764b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1766b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 1
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = SendDynamicParam(pComponentPrivate);
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone ) {
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1773b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "after SendDynamicParam\n");
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStart,NULL);
1780b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Encoder_COMPONENT, OMX_StateExecuting, 3456, NULL);
1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available\n");
1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState = OMX_StateWaitForResources;
1787b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pHandle,
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pHandle->pApplicationPrivate,
1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
1790b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_CommandStateSet,
1791b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pComponentPrivate->nCurState,
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState = OMX_StateExecuting;
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "State has been set to Executing\n");
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_BoundarySteadyState| PERF_BoundaryComplete);
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1803b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1804644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         /* Decrement reference count with signal enabled */
1805644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
1806644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong               return OMX_ErrorUndefined;
1807644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         }
1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
1811b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_EventCmdComplete,
1812b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               OMX_CommandStateSet,
1813b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                               pComponentPrivate->nCurState,
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1818b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
1819b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorIncorrectStateTransition,
1820b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StatePause:
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StatePause\n");
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nToState = OMX_StatePause;
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                PERF_Boundary(pComponentPrivate->pPERFcomp,
1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_BoundaryComplete | PERF_BoundarySteadyState);
1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StatePause ) {
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,pComponentPrivate->pHandle->pApplicationPrivate,
1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorSameState, OMX_TI_ErrorMinor , NULL);
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if ( pComponentPrivate->nCurState == OMX_StateExecuting || pComponentPrivate->nCurState == OMX_StateIdle ) {
1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlPause,NULL);
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( eError != OMX_ErrorNone ) {
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "Error during EMMCodecControlPause. Error: %d.\n", eError );
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /*
1846b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pComponentPrivate->nCurState = OMX_StatePause; */
1847644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            /* Decrement reference count with signal enabled */
1848644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
1849644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                   return OMX_ErrorUndefined;
1850b65f253fdc60f6208a54911bee793d225f23cdf8James Dong           }
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,pComponentPrivate->pHandle->pApplicationPrivate,
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandStateSet, pComponentPrivate->nCurState, NULL);
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,pComponentPrivate->pHandle->pApplicationPrivate,
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorIncorrectStateTransition, OMX_TI_ErrorMinor , NULL);
1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE4(pComponentPrivate->dbg, "Error: Invalid State Given by Application\n");
1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1860b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateInvalid:
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateInvalid::\n");
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StateInvalid ) {
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, pComponentPrivate->pHandle->pApplicationPrivate,
1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError, OMX_ErrorSameState, OMX_TI_ErrorMinor , NULL);
1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState != OMX_StateLoaded ) {
1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "HandleJpegEncInternalFlush \n");
1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = HandleJpegEncInternalFlush(pComponentPrivate, nParam1);
1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateInvalid;
1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if(pComponentPrivate->nToState == OMX_StateInvalid){ /*if the IL client call directly send to invalid state*/
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       pComponentPrivate->pHandle->pApplicationPrivate,
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_EventCmdComplete,
1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_CommandStateSet,
1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       pComponentPrivate->nCurState,
1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       NULL);
1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else{ /*When the component go to invalid state by it self*/
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       pComponentPrivate->pHandle->pApplicationPrivate,
1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_EventError,
1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_ErrorInvalidState,
1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_TI_ErrorSevere,
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       NULL);
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateLoaded:
1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StateLoaded ) {
1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorSameState,
1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorMinor ,
1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if ( pComponentPrivate->nCurState == OMX_StateIdle ||
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nCurState == OMX_StateWaitForResources ) {
1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Ports have to be unpopulated before transition completes */
1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE2(pComponentPrivate->dbg, "from idle to loaded\n");
1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pComponentPrivate->pLCML != NULL && pComponentPrivate->isLCMLActive) {
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "try to close library again %p\n", pComponentPrivate->pLCML);
1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlDestroy,NULL);
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP2(pComponentPrivate->dbg, "after close library again %p\n", pComponentPrivate->pLCML);
1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->pLCML = NULL;
1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                dlclose(pComponentPrivate->pDllHandle);
1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->isLCMLActive = 0;
1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "after release LCML\n");
1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_Boundary(pComponentPrivate->pPERFcomp,
1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_BoundaryStart | PERF_BoundaryCleanup);
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            nTimeout=0x0;
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                while ( 1 )
1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if ( (pPortDefOut->bPopulated == OMX_FALSE) )
1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRDSP2(pComponentPrivate->dbg, "Thread Sending Cmd EMMCodecControlDestroy\n");
1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    } else if ( nTimeout++ > JPEGENC_TIMEOUT )
1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER4(pComponentPrivate->dbg, "Timeout ...\n");
1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       pComponentPrivate->pHandle->pApplicationPrivate,
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_EventError,
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_ErrorPortUnresponsiveDuringAllocation,
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_TI_ErrorMajor,
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       "Not response Port -Loaded");
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRBUFFER4(pComponentPrivate->dbg, "Not all ports are unpopulated!\n");
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    /* Sleep for a while, so the application thread can allocate buffers */
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sched_yield();
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            while ( pPortDefIn->bPopulated || pPortDefOut->bPopulated) {
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER0(pComponentPrivate->dbg, "%d in cond wait\n", __LINE__);
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pthread_cond_wait(&pComponentPrivate->unpopulate_cond, &pComponentPrivate->jpege_mutex_app);
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_Boundary(pComponentPrivate->pPERFcomp,
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      PERF_BoundaryComplete | PERF_BoundaryCleanup);
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->nCurState != OMX_StateWaitForResources) {
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError= RMProxy_NewSendCommand(pHandle,  RMProxy_FreeResource, OMX_JPEG_Encoder_COMPONENT, 0, 3456, NULL);
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (eError != OMX_ErrorNone) {
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRMGR4(pComponentPrivate->dbg, "Cannot Free Resources\n");
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pHandle,
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           pHandle->pApplicationPrivate,
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_EventError,
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_ErrorUndefined,
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           OMX_TI_ErrorMajor,
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                           NULL);
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    break;
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateLoaded;
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ((pComponentPrivate->nCurState == OMX_StateIdle) &&
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 (pComponentPrivate->bPreempted == 1 )){
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_ErrorResourcesLost,
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bPreempted = 0;
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1996644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                /* Decrement reference count with signal enabled */
1997644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
1998644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                  return OMX_ErrorUndefined;
1999644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                }
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pComponentPrivate->pHandle->pApplicationPrivate,
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventCmdComplete,
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_CommandStateSet,
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_StateLoaded,
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorIncorrectStateTransition,
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorMinor,
2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateWaitForResources:
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentPrivate->nCurState == OMX_StateWaitForResources ) {
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            pComponentPrivate->pHandle->pApplicationPrivate,
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_EventError,
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_ErrorSameState,
2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_TI_ErrorMinor,
2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            NULL);
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if ( pComponentPrivate->nCurState == OMX_StateLoaded ) {
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Encoder_COMPONENT, OMX_StateWaitForResources, 3456, NULL);
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRMGR4(pComponentPrivate->dbg, "RMProxy_NewSendCommand(OMX_StateWaitForResources) failed\n");
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pHandle,
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       pHandle->pApplicationPrivate,
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_EventError,
2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_ErrorUndefined,
2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       OMX_TI_ErrorSevere,
2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                       NULL);
2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateWaitForResources;
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            pComponentPrivate->pHandle->pApplicationPrivate,
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_EventCmdComplete,
2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_CommandStateSet,
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            pComponentPrivate->nCurState,
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            NULL);
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            pComponentPrivate->pHandle->pApplicationPrivate,
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_EventError,
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_ErrorIncorrectStateTransition,
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            OMX_TI_ErrorMinor,
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                            NULL);
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_StateMax:
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateMax::\n");
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } /* End of Switch */
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncFreeOutputBufferFromApp(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate )
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* IUALG_Buf *ptParam = NULL; */
2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE* pLcmlHandle = NULL;
2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret;
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside HandleFreeOutputBufferFromApp function\n");
2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pLcmlHandle = (LCML_DSP_INTERFACE *)(pComponentPrivate->pLCML);
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = read(pComponentPrivate->free_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead));
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( ret == -1 ) {
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n");
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead != NULL) {
2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pOutputPortPrivate;
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, "Error while reading pBuffHead from the pipe\n");
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nCurState != OMX_StatePause || pComponentPrivate->nToState != OMX_StatePause) {
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   if ((pComponentPrivate->nCurState != OMX_StateExecuting ) ||
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->nToState == OMX_StateIdle) ||
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pPortDefOut->bEnabled == OMX_FALSE)) {
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nOutPortOut ++;
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (return empty output buffer) %lu %lu %lu %lu\n",
2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "FillBufferDone (incorrect state %d) %p\n", pComponentPrivate->nCurState, pBuffHead);
2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle,
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->pHandle->pApplicationPrivate,
2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pBuffHead);
2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (HandleJpegEncFreeOutputBufferFromApp) %lu %lu %lu %lu\n",
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pBuffHead->pBuffer,
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      0,
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      PERF_ModuleCommonLayer);
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* ptParam =  (IUALG_Buf *)pBuffPrivate->pUALGParams; */
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_DSP;
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __JPEG_OMX_PPLIB_ENABLED__
2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pOutParams != NULL)
2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2142bca73818821dde513097a412ae6f2539d927e588Andrew Collins        pComponentPrivate->pOutParams = (OMX_U8*)pComponentPrivate->pOutParams - PADDING_128_BYTE;
2143b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	OMX_FREE(pComponentPrivate->pOutParams);
2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2145bca73818821dde513097a412ae6f2539d927e588Andrew Collins    OMX_MALLOC(pComponentPrivate->pOutParams,sizeof(PPLIB_UALGRunTimeParam_t) + PADDING_256_BYTE);
2146bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pComponentPrivate->pOutParams = (OMX_U8*)pComponentPrivate->pOutParams + PADDING_128_BYTE;
2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->pOutParams != NULL)
2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else
2152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    {
2153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        goto EXIT;
2154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = SendDynamicPPLibParam(pComponentPrivate,pComponentPrivate->pOutParams);
2157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       if (eError != OMX_ErrorNone ) {
2158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           goto EXIT;
2159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       }
2160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin       eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 EMMCodecOuputBuffer,
2164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 pBuffHead->pBuffer,
2165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 pPortDefOut->nBufferSize,
2166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 0,
2167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 (OMX_U8 *)pComponentPrivate->pOutParams,
2168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 sizeof(PPLIB_UALGRunTimeParam_t),
2169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                 (OMX_U8 *)  pBuffHead);
2170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              EMMCodecOuputBuffer,
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pBuffHead->pBuffer,
2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pPortDefOut->nBufferSize,
2176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                              0,
2177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                              NULL,
2178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                              0,
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              (OMX_U8 *)  pBuffHead);
2180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Error is %x\n",eError);
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinOMX_U32 CalculateParamsSize (JPEGENC_COMPONENT_PRIVATE *pComponentPrivate) {
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 i = 0;
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    i+= 4; /* 4 bytes for the size of the whole array */
2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set Custom Quantization Table */
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bSetLumaQuantizationTable && pComponentPrivate->bSetChromaQuantizationTable) {
2196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Quantization table TAG */
2197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=256; /* 256 bytes for the Quantization table data*/
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Set Custom Huffman Table */
2202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bSetHuffmanTable) {
2203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Huffman table TAG */
2204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) % 4) {
2206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) + (4 - (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) % 4)));
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE);
2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP0 marker (JFIF)*/
2214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->sAPP0.bMarkerEnabled) {
2215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Number of buffers TAG */
2216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the actual number of buffers (just 1 buffer) */
2218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the buffer0  TAG */
2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, or if explicity specified by application, set the marker from algo, otherwise set it from application */
2221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pComponentPrivate->sAPP0.nThumbnailWidth > 0 && pComponentPrivate->sAPP0.nThumbnailHeight > 0)
2222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        || pComponentPrivate->sAPP0.nMarkerSize <= 0) {
2223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += (pComponentPrivate->sAPP0.nMarkerSize/4)*4;  /* x bytes for the actual buffer data for this TAG */
2229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP0.nMarkerSize % 4) {
2230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                i +=4;  /* 4 extra bytes if the size is not divisible by 4*/
2231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, configure it accordingly */
2234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP0.nThumbnailWidth > 0 && pComponentPrivate->sAPP0.nThumbnailHeight > 0) {
2235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB INDEX TAG */
2236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG */
2238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB W TAG */
2240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (width value) */
2242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB H TAG */
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (height value) */
2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP1 marker (EXIF)*/
2250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sAPP1.bMarkerEnabled) {
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Number of buffers TAG */
2252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the actual number of buffers (just 1 buffer) */
2254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the buffer0  TAG */
2255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	/* if explicity specified by application, set the marker from algo, otherwise set it from application */
2257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	if (pComponentPrivate->sAPP1.nMarkerSize <= 0) {
2258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	else {
2263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	    i+=4;   /* 4 bytes for the size of this TAG */
2264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                i += (pComponentPrivate->sAPP1.nMarkerSize/4)*4;  /* x bytes for the actual buffer data for this TAG */
2265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->sAPP1.nMarkerSize % 4) {
2266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    i +=4;  /* 4 extra bytes if the size is not divisible by 4*/
2267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	/* if thumbnail is set, configure it accordingly */
2271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	if (pComponentPrivate->sAPP1.nThumbnailWidth > 0 && pComponentPrivate->sAPP1.nThumbnailHeight > 0) {
2272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB INDEX TAG */
2273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG */
2275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB W TAG */
2277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (width value) */
2279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB H TAG */
2281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (height value) */
2283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP5 marker */
2288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sAPP5.bMarkerEnabled) {
2289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Number of buffers TAG */
2290b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the actual number of buffers (just 1 buffer) */
2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the buffer0  TAG */
2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	/* if explicity specified by application, set the marker from algo, otherwise set it from application */
2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	if (pComponentPrivate->sAPP5.nMarkerSize <= 0) {
2296b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2297b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	else {
2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	    i+=4;   /* 4 bytes for the size of this TAG */
2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                i += (pComponentPrivate->sAPP5.nMarkerSize/4)*4;  /* x bytes for the actual buffer data for this TAG */
2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (pComponentPrivate->sAPP5.nMarkerSize % 4) {
2304b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    i +=4;  /* 4 extra bytes if the size is not divisible by 4*/
2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	/* if thumbnail is set, configure it accordingly */
2309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	if (pComponentPrivate->sAPP5.nThumbnailWidth > 0 && pComponentPrivate->sAPP5.nThumbnailHeight > 0) {
2310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB INDEX TAG */
2311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG */
2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB W TAG */
2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2316b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (width value) */
2317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2318b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the THUMB H TAG */
2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the size of this TAG */
2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;  /* 4 bytes for the actual data for this TAG (height value) */
2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP13 marker */
2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->sAPP13.bMarkerEnabled) {
2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Number of buffers TAG */
2326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2327b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the actual number of buffers (just 1 buffer) */
2328b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the buffer0  TAG */
2329b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2330b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	/* if explicity specified by application, set the marker from algo, otherwise set it from application */
2331b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	if (pComponentPrivate->sAPP13.nMarkerSize <= 0) {
2332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2333b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2334b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the actual data of this TAG */
2335b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2336b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	else {
2337b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=4;   /* 4 bytes for the size of this TAG */
2338b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += (pComponentPrivate->sAPP13.nMarkerSize/4)*4;  /* x bytes for the actual buffer data for this TAG */
2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP13.nMarkerSize % 4) {
2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                i +=4;  /* 4 extra bytes if the size is not divisible by 4*/
2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    	}
2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* comment flag needed */
2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    i+=4;   /* 4 bytes for the size of this TAG */
2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle CommentFlag */
2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->nCommentFlag == 1 && pComponentPrivate->pString_Comment) {
2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Comment TAG */
2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /* comment string upper limit is 256 bytes */
2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i+=256;
2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the Comment TAG */
2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        i+=4;  /* 4 bytes for the size of this TAG */
2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return i;
2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinstatic OMX_ERRORTYPE SetJpegEncInPortParams(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32* new_params)
2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i = 1;
2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set Custom Quantization Table */
2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bSetLumaQuantizationTable && pComponentPrivate->bSetChromaQuantizationTable) {
2370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = DYNPARAMS_QUANTTABLE;
2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 256; /* 2 tables * 64 entries * 2(16bit entries) */
2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_U16 *temp = (OMX_U16 *)&new_params[i];
2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int j, k;
2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (j = 0; j < 64; j++) {
2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp[j] = pComponentPrivate->pCustomLumaQuantTable->nQuantizationMatrix[j];
2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for (k = 0; k < 64; k++, j++) {
2378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            temp[j] = pComponentPrivate->pCustomChromaQuantTable->nQuantizationMatrix[k];
2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        i += 64; /* 256 / 4 */
2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set Custom Huffman Table */
2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->bSetHuffmanTable) {
2385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = DYNPARAMS_HUFFMANTABLE;
2386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE); /* 2572 % 4 = 0 */
2387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy((OMX_U8 *)(&new_params[i]), &(pComponentPrivate->pHuffmanTable->sHuffmanTable), sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE));
2389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) % 4) {
2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) + (4 - (sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE) % 4)))/4 ;
2391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
2393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           i += sizeof(JPEGENC_CUSTOM_HUFFMAN_TABLE)/4;
2394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP0 marker (JFIF)*/
2398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->sAPP0.bMarkerEnabled) {
2399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP0_NUMBUF;
2400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 4;
2401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 1;
2402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* set default APP0 BUFFER */
2404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP0_BUFFER;
2405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, or if explicity specified by application, set the marker from algo, otherwise set it from application */
2407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((pComponentPrivate->sAPP0.nThumbnailWidth > 0 && pComponentPrivate->sAPP0.nThumbnailHeight > 0)
2408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        	|| pComponentPrivate->sAPP0.nMarkerSize <= 0) {
2409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 0;
2411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP0.nMarkerSize;
2414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(new_params + i, pComponentPrivate->sAPP0.pMarkerBuffer, pComponentPrivate->sAPP0.nMarkerSize);
2415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += pComponentPrivate->sAPP0.nMarkerSize / 4;
2416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP0.nMarkerSize % 4) {
2417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            	i ++;
2418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, configure it accordingly */
2422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP0.nThumbnailWidth > 0 && pComponentPrivate->sAPP0.nThumbnailHeight > 0) {
2423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP0_THUMB_INDEX;
2424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 1;
2426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP0_THUMB_W;
2428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP0.nThumbnailWidth;
2430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP0_THUMB_H;
2432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP0.nThumbnailHeight;
2434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP1 marker (EXIF)*/
2438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->sAPP1.bMarkerEnabled) {
2439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP1_NUMBUF;
2440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 4;
2441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 1;
2442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* set default APP1 BUFFER */
2444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP1_BUFFER;
2445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if explicity specified by application, set the marker from algo, otherwise set it from application */
2447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP1.nMarkerSize <= 0) {
2448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 8;
2449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 0;
2450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 'F' | 'F' << 8 | 'F' << 16 | 'F' << 24;
2451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP1.nMarkerSize;
2454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(new_params + i, pComponentPrivate->sAPP1.pMarkerBuffer, pComponentPrivate->sAPP1.nMarkerSize);
2455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += pComponentPrivate->sAPP1.nMarkerSize / 4;
2456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP1.nMarkerSize % 4) {
2457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            	i ++;
2458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, configure it accordingly */
2462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP1.nThumbnailWidth > 0 && pComponentPrivate->sAPP1.nThumbnailHeight > 0) {
2463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP1_THUMB_INDEX;
2464b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2465b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 1;
2466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2467b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP1_THUMB_W;
2468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2469b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP1.nThumbnailWidth;
2470b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2471b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP1_THUMB_H;
2472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2473b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP1.nThumbnailHeight;
2474b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2477b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP5 marker */
2479b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->sAPP5.bMarkerEnabled) {
2480b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        new_params[i++] = APP5_NUMBUF;
2481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 4;
2482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 1;
2483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* set default APP5 BUFFER */
2485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        new_params[i++] = APP5_BUFFER;
2486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if explicity specified by application, set the marker from algo, otherwise set it from application */
2488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP5.nMarkerSize <= 0) {
2489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 8;
2490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 0;
2491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 'F' | 'F' << 8 | 'F' << 16 | 'F' << 24;
2492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP5.nMarkerSize;
2495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(new_params + i, pComponentPrivate->sAPP5.pMarkerBuffer, pComponentPrivate->sAPP5.nMarkerSize);
2496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += pComponentPrivate->sAPP5.nMarkerSize / 4;
2497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP5.nMarkerSize % 4) {
2498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            	i ++;
2499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2502b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if thumbnail is set, configure it accordingly */
2503b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP5.nThumbnailWidth > 0 && pComponentPrivate->sAPP5.nThumbnailHeight > 0) {
2504b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP5_THUMB_INDEX;
2505b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2506b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 1;
2507b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2508b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP5_THUMB_W;
2509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2510b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP5.nThumbnailWidth;
2511b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2512b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = APP5_THUMB_H;
2513b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 4;
2514b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP5.nThumbnailHeight;
2515b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2516b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2517b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2519b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle APP13 marker */
2520b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if(pComponentPrivate->sAPP13.bMarkerEnabled) {
2521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP13_NUMBUF;
2522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 4;
2523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 1;
2524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2525b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* set default APP13 BUFFER */
2526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = APP13_BUFFER;
2527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2528b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* if explicity specified by application, set the marker from algo, otherwise set it from application */
2529b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->sAPP13.nMarkerSize <= 0) {
2530b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 8;
2531b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 0;
2532b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = 'F' | 'F' << 8 | 'F' << 16 | 'F' << 24;
2533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2534b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        else {
2535b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            new_params[i++] = pComponentPrivate->sAPP13.nMarkerSize;
2536b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            memcpy(new_params + i, pComponentPrivate->sAPP13.pMarkerBuffer, pComponentPrivate->sAPP13.nMarkerSize);
2537b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            i += pComponentPrivate->sAPP13.nMarkerSize / 4;
2538b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->sAPP13.nMarkerSize % 4) {
2539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            	i ++;
2540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
2541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
2542b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2544b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    new_params[i++] = COMMENT_BUFFER;
2545b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2546b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* handle CommentFlag */
2547b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->nCommentFlag == 1 && pComponentPrivate->pString_Comment) {
2548b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        new_params[i++] = strlen((char *)pComponentPrivate->pString_Comment)  + 4 ;
2549b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        new_params[i++] = 0;
2550b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        strncpy((char *)(new_params+i), (char *)pComponentPrivate->pString_Comment, 255);
2551b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2552b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
2553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 4;
2554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        new_params[i++] = 0;
2555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2557b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* now that we know the final size of the buffer, we can set it accordingly */
2558b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    new_params[0] = i * sizeof(OMX_U32);
2559b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2560b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
2561b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("=========DUMP of new_params array=============\n");
2562b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int j;
2563b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    for (j=0; j< i*4; j++) {
2564b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("new_params[%d] = 0x%x\n", j, *(((unsigned char *)new_params)+j));
2565b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
2566b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("================================\n");
2567b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
2568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE SetJpegEncInParams(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate)
2572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *p = NULL;
2575b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 params_size;
2576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->InParams.pInParams) {
2578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        p = (OMX_U8 *)pComponentPrivate->InParams.pInParams;
2579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        p -= 128;
2580b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREE(p);
2581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->InParams.pInParams = NULL;
2582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2584b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   /*alloc enough memory for params array*/
2585b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    params_size = CalculateParamsSize(pComponentPrivate);
2586b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(p, params_size + 256);
2587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    p += 128;
2588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InParams.pInParams = (OMX_U32 *)p;
2589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    p = NULL;
2590b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    eError = SetJpegEncInPortParams(pComponentPrivate, pComponentPrivate->InParams.pInParams);
2591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncDataBuf_FromApp(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate )
2597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pBuffHead = NULL;
2600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE* pLcmlHandle = NULL;
2601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
2602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL;
2603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
2604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret;
2605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
2607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
2609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
2610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
2611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside HandleDataBuf_FromApp function\n");
2613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ret = read(pComponentPrivate->filled_inpBuf_Q[0], &(pBuffHead), sizeof(pBuffHead));
2614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( ret == -1 ) {
2615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n");
2616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead != NULL) {
2619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pInputPortPrivate;
2620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } else {
2621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin          goto EXIT;
2623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   if (pBuffPrivate->eBufferOwner == JPEGENC_BUFFER_CLIENT) {
2626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* already returned to client */
2627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, "this buffer %p already returned to client\n", pBuffHead);
2628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   if ((pComponentPrivate->nCurState != OMX_StateExecuting) ||
2632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       (pComponentPrivate->nToState == OMX_StateIdle) ||
2633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pPortDefIn->bEnabled == OMX_FALSE)) {
2634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
2635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->nInPortOut ++;
2636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
2637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (return empty input buffer) %lu %lu %lu %lu\n",
2638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->cbInfo.EmptyBufferDone(
2643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pHandle,
2644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pHandle->pApplicationPrivate,
2645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead);
2646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             }
2647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             goto EXIT;
2648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (HandleJpegEncDataBuf_FromApp) %lu %lu %lu %lu\n",
2651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pBuffHead->pBuffer,
2659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pBuffHead->nFilledLen,
2660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      PERF_ModuleCommonLayer);
2661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((pBuffHead->nFlags == OMX_BUFFERFLAG_EOS) && (pBuffHead->nAllocLen == 0)) {
2664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "BufferFlag Set!!\n");
2665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nFlags = OMX_BUFFERFLAG_EOS;
2666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHead->nFlags = 0;
2667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
2669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = SendDynamicParam(pComponentPrivate);
2670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone ) {
2671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
2672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
2673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nAllocLen = %d\n",(int)pBuffHead->nAllocLen);
2677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->pBuffer = %p\n",pBuffHead->pBuffer);
2678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen = %d\n",(int)pBuffHead->nFilledLen);
2679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead = %p\n",pBuffHead);
2680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_DSP;
2682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "Input: before queue buffer %p\n", pBuffHead);
2684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = LCML_QueueBuffer(
2685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pLcmlHandle->pCodecinterfacehandle,
2686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  EMMCodecInputBuffer,
2687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pBuffHead->pBuffer,
2688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pPortDefIn->nBufferSize,
2689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pBuffHead->nFilledLen,
2690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  (OMX_U8 *) pComponentPrivate->InParams.pInParams,
2691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  pComponentPrivate->InParams.pInParams[0],
2692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  (OMX_U8 *)pBuffHead);
2693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP2(pComponentPrivate->dbg, "Input: after queue buffer %p\n", pBuffHead);
2695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError ) {
2697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorInsufficientResources\n");
2699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Error is %x\n",eError);
2702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
2703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncDataBuf_FromDsp(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead)
2709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError                 = OMX_ErrorNone;
2712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE* pInpBuf        = NULL;
2713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
2714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
2716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pInpBuf = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[0]->pBufferHdr;
2718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pOutputPortPrivate;
2720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffPrivate->eBufferOwner == JPEGENC_BUFFER_CLIENT) {
2722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           OMX_PRBUFFER2(pComponentPrivate->dbg, "buffer %p already at the client side\n", pBuffHead);
2723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->nOutPortOut --;
2724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (FromDsp escape return output buffer) %lu %lu %lu %lu\n",
2725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nInPortIn,
2726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nInPortOut,
2727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nOutPortIn,
2728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nOutPortOut);
2729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           goto EXIT;
2731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          pBuffHead->pBuffer,
2736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          pBuffHead->nFilledLen,
2737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                          PERF_ModuleHLMM);
2738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
2740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffHead->pMarkData) {
2742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           OMX_PRBUFFER2(pComponentPrivate->dbg, "get Mark buffer %p %p %p\n", pBuffHead->pMarkData, pBuffHead->hMarkTargetComponent, pComponentPrivate->pHandle);
2743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffHead->pMarkData && pBuffHead->hMarkTargetComponent == pComponentPrivate->pHandle) {
2746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           OMX_PRBUFFER2(pComponentPrivate->dbg, "send OMX_MarkEvent\n");
2747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
2748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
2749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventMark,
2750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_OUT_PORT,
2751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                0,
2752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pBuffHead->pMarkData);
2753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (return empty output buffer) %lu %lu %lu %lu\n",
2756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "Output: before fillbufferdone %p\n", pBuffHead);
2761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle,
2762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pComponentPrivate->pHandle->pApplicationPrivate,
2763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        pBuffHead);
2764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nFlags & OMX_BUFFERFLAG_EOS )   {
2766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHead->nFlags |= OMX_BUFFERFLAG_EOS;
2768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
2769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
2770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventBufferFlag,
2771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_OUT_PORT,
2772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_BUFFERFLAG_EOS,
2773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
2774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nFlags = 0;
2776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
2779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleJpegEncFreeDataBuf( JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead )
2785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
2788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
2789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE hTunnelComponent = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent;
2790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentPrivate);
2792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside HandleFreeDataBuf function \n");
2793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
2794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* pBuffHead->nAllocLen = pPortDefIn->nBufferSize; */
2796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pInputPortPrivate;
2797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "hTunnelComponent = %p\n" ,hTunnelComponent );
2799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "pComponentPrivate->pHandle = %p\n",pComponentPrivate->pHandle);
2800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffPrivate->eBufferOwner == JPEGENC_BUFFER_CLIENT) {
2802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "buffer %p already at the client side\n", pBuffHead);
2803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nInPortOut --;
2804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (FromDsp escape return input buffer) %lu %lu %lu %lu\n",
2805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nInPortIn,
2806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nInPortOut,
2807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nOutPortIn,
2808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        pComponentPrivate->nOutPortOut);
2809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           goto EXIT;
2811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(hTunnelComponent != NULL)
2814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pBuffHead->pBuffer,
2819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              0,
2820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleLLMM);
2821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_TUNNEL_COMPONENT;
2823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_FillThisBuffer(hTunnelComponent, pBuffHead);
2824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERFcomp,
2830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pBuffHead->pBuffer,
2831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              0,
2832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleHLMM);
2833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_CLIENT;
2835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "before emptybufferdone in HandleJpegEncFreeDataBuf %p\n", pBuffHead);
2836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EmptyBufferDone(
2837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pComponentPrivate->pHandle,
2838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pComponentPrivate->pHandle->pApplicationPrivate,
2839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pBuffHead);
2840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
2843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------*/
2849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  Callback() function will be called LCML component to write the msg
2851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param msgBuffer                 This buffer will be returned by the LCML
2853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/
2857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JpegEncLCML_Callback (TUsnCodecEvent event,void * argsCb [10])
2859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE *pBuffPrivate = NULL;
2862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE *pPortType = NULL;
2863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
2864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2866b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_COMPONENTTYPE *pHandle = NULL;
2867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( ((LCML_DSP_INTERFACE*)argsCb[6] ) != NULL ) {
2869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)argsCb[6])->pComponentPrivate;
2870b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_CHECK_PARAM(pComponentPrivate);
2871b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pHandle = (OMX_COMPONENTTYPE *)pComponentPrivate->pHandle;
2873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMXDBG_PRINT(stderr, DSP, 5, 0, "wrong in LCML callback, exit\n");
2876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	 goto EXIT;
2877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRDSP0(pComponentPrivate->dbg, "Event = %d\n", event);
2879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( event == EMMCodecBufferProcessed ) {
2881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( (int)argsCb [0] == EMMCodecOuputBuffer ) {
2882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_BUFFERHEADERTYPE* pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7];
2883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pOutputPortPrivate;
2884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nOutPortOut ++;
2886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PREF(pBuffHead,pBuffer),
2889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PREF(pBuffHead,nFilledLen),
2890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleCommonLayer);
2891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP1(pComponentPrivate->dbg, "argsCb[8] is %d\n", (int)(argsCb[8]));
2893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHead->nFilledLen = (OMX_U32) argsCb[8];
2894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (LCML for output buffer %p) %lu %lu %lu %lu\n", pBuffHead,
2896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType = pComponentPrivate->pCompPort[JPEGENC_INP_PORT];
2902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i = 0; i < (int)(pPortType->pPortDef->nBufferCountActual); i ++) {
2903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->nOutPortOut > 10) {
2904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER1(pComponentPrivate->dbg, "pPortType->sBufferFlagTrack[i].buffer_id %lu\n", pPortType->sBufferFlagTrack[i].buffer_id);
2905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pPortType->sBufferFlagTrack[i].buffer_id == pComponentPrivate->nOutPortOut) {
2907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER1(pComponentPrivate->dbg, "output buffer %lu has flag %lx\n",
2908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pPortType->sBufferFlagTrack[i].buffer_id,
2909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pPortType->sBufferFlagTrack[i].flag);
2910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBuffHead->nFlags = pPortType->sBufferFlagTrack[i].flag;
2911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPortType->sBufferFlagTrack[i].flag = 0;
2912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPortType->sBufferFlagTrack[i].buffer_id = 0xFFFFFFFF;
2913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
2914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i = 0; i < (int)(pPortType->pPortDef->nBufferCountActual); i ++) {
2917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pPortType->sBufferMarkTrack[i].buffer_id == pComponentPrivate->nInPortOut) {
2918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer ID %lu has mark (output port)\n", pPortType->sBufferMarkTrack[i].buffer_id);
2919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBuffHead->pMarkData = pPortType->sBufferMarkTrack[i].pMarkData;
2920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pBuffHead->hMarkTargetComponent = pPortType->sBufferMarkTrack[i].hMarkTargetComponent;
2921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPortType->sBufferMarkTrack[i].buffer_id = 0xFFFFFFFF;
2922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
2923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodec Args -> %x, %p\n", (int)argsCb[1] , (void *)(argsCb[5]));
2927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
2928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "return output buffer %p from LCML_Callback (%d)\n",
2929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead,
2930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffPrivate->eBufferOwner);
2931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_COMPONENT_OUT;
2932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "LCML_Callback - Filled (output) Data from DSP %p\n", pBuffHead);
2933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = HandleJpegEncDataBuf_FromDsp(pComponentPrivate, pBuffHead);
2934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((int) argsCb [0] == EMMCodecInputBuffer ) {
2938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_BUFFERHEADERTYPE* pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7];
2939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pInputPortPrivate;
2940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pComponentPrivate->nInPortOut ++;
2942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "buffer summary (LCML for InputBuffer %p) %lu %lu %lu %lu\n", pBuffHead,
2943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	PERF_ReceivedFrame(pComponentPrivate->pPERFcomp,
2949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin			   PREF(pBuffHead,pBuffer),
2950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin			   0,
2951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin			   PERF_ModuleCommonLayer);
2952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodec Args -> %x, %p\n", (int)argsCb[1] , (void *)(argsCb[5]));
2954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffPrivate->eBufferOwner != JPEGENC_BUFFER_CLIENT) {
2955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "return input buffer %p from LCML_Callback (%d)\n",
2956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead,
2957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffPrivate->eBufferOwner);
2958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_COMPONENT_OUT;
2959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "LCML_Callback - Emptied (input) Data from DSP %p\n", pBuffHead);
2960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = HandleJpegEncFreeDataBuf(pComponentPrivate, pBuffHead);
2961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2963b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    goto PRINT_EXIT;
2964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    } /* end     if ( event == EMMCodecBufferProcessed ) */
2965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( event == EMMCodecProcessingStoped ) {
2967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "Entering To EMMCodecProcessingStoped \n");
2968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (Stopped) %lu %lu %lu %lu\n",
2969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
2970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
2971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
2972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
2973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bDSPStopAck = OMX_TRUE;
2974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE2(pComponentPrivate->dbg, "to state is %d\n", pComponentPrivate->nToState);
2975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* if (pComponentPrivate->nToState == OMX_StateIdle) { */
2978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->ExeToIdleFlag |= JPEGE_DSPSTOP;
2979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* } */
2980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE1(pComponentPrivate->dbg, "before stop signal\n");
2982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
2984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->stop_cond);
2985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
2986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE1(pComponentPrivate->dbg, "after stop signal\n");
2988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2989b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto PRINT_EXIT;
2990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( event == EMMCodecDspError ) {
2993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_PRDSP4(pComponentPrivate->dbg, "in EMMCodecDspError EMMCodec Args -> %x, %x\n", (int)argsCb[4] , (int)argsCb[5]);
2995b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if ((int)argsCb[4] == USN_ERR_PROCESS && (int)argsCb[5] == IUALG_ERR_INSUFF_BUFFER) {
2996b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_PRDSP4(pComponentPrivate->dbg,
2997b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                    "DSP Error. The allocated output buffer length is insufficient");
299820d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura           pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
299920d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura                                     pComponentPrivate->pHandle->pApplicationPrivate,
300020d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura                                     OMX_EventError,
300120d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura                                     OMX_ErrorInsufficientResources,
300220d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura                                     OMX_TI_ErrorCritical,
300320d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura                                     "The allocated output buffer length is insufficient");
3004b65f253fdc60f6208a54911bee793d225f23cdf8James Dong           goto PRINT_EXIT;
300520d52a65fa6514b85c6ce8e3964799bd97868f86Dan Vacura       }
3006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       if ((int)argsCb[4] != 0x1 || (int)argsCb[5] != 0x500) {
3007b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		   if ((int)argsCb[5] == JPEGENC_THUMBNAIL_ABSENT_WARNING) {
3008b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	           OMX_PRDSP4(pComponentPrivate->dbg, "Thumbnail is not generated as it \
3009b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                   exceeds 64K spec size limit for the given thumbnail resolution and yuv data\n");
3010b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	           pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3011b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                                     pComponentPrivate->pHandle->pApplicationPrivate,
3012b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                                     OMX_EventError,
3013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                                     OMX_ErrorUndefined,
3014b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                                     OMX_TI_ErrorMinor,
3015b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	                                     "Thumbnail not generated as it exceeds 64K size limit set by spec");
3016b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		       goto EXIT;
3017b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		   }
3018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     pComponentPrivate->pHandle->pApplicationPrivate,
3020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_EventError,
3021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_ErrorHardware,
3022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_TI_ErrorCritical,
3023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     NULL);
3024b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3025b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateInvalid;
3026b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
3027b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
3028b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
3029b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
3030b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorCritical,
3031b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   "DSP Hardware Error");
3032b65f253fdc60f6208a54911bee793d225f23cdf8James Dong           goto PRINT_EXIT;
3033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       }
3034b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING
3035b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* Cheking for MMU_fault */
3036b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if((argsCb[4] == (void *)NULL) && (argsCb[5] == (void*)NULL)) {
3037b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            //JPEGENC_DPRINT("DSP MMU_Fault");
3038b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StateInvalid;
3039b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pHandle,
3040b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   pHandle->pApplicationPrivate,
3041b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_EventError,
3042b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_ErrorInvalidState,
3043b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   OMX_TI_ErrorCritical,
3044b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                                   "DSP MMU FAULT");
3045b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3046b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (event == EMMCodecInternalError) {
3049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorHardware;
3050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP4(pComponentPrivate->dbg, "JPEG-E: EMMCodecInternalError\n");
3051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
3053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_EventError,
3054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_ErrorHardware,
3055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_TI_ErrorCritical,
3056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
3057b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto PRINT_EXIT;
3058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( event == EMMCodecProcessingPaused ) {
3060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "ENTERING TO EMMCodecProcessingPaused JPEG Encoder\n");
3061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate != NULL) {
3062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bDSPStopAck = OMX_TRUE;
3063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState = OMX_StatePause;
3064644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            /* Decrement reference count with signal enabled */
3065644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            if(RemoveStateTransition(pComponentPrivate, 1) != OMX_ErrorNone) {
3066644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong                  return OMX_ErrorUndefined;
3067644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            }
3068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,pComponentPrivate->pHandle->pApplicationPrivate,
3069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventCmdComplete, OMX_CommandStateSet, pComponentPrivate->nCurState, NULL);
3070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (event == EMMCodecStrmCtrlAck) {
3073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "EMMCodecStrmCtrlAck\n");
3074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((int)argsCb [0] == USN_ERR_NONE) {
3075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRDSP2(pComponentPrivate->dbg, "Callback: no error\n");
3076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bFlushComplete = OMX_TRUE;
3077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
3078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_signal(&pComponentPrivate->flush_cond);
3079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
3080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (event == EMMCodecAlgCtrlAck) {
3083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRDSP2(pComponentPrivate->dbg, "jpeg-enc: EMMCodecAlgCtrlAck\n");
3084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bAckFromSetStatus = 1;
3085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /*
3086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex);
3087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->control_cond);
3088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex);
3089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        */
3090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3091b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT:
3092eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRDSP1(pComponentPrivate->dbg, "Exiting the LCML_Callback function\n");
3093b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
3094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
3095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
3097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * IsTIOMXComponent()
3099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
3100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Check if the component is TI component.
3101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
3102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hTunneledComp Component Tunnel Pipe
3103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
3104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_TRUE   Input is a TI component.
3105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_FALSE  Input is a not a TI component.
3106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
3107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
3108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
3109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_BOOL IsTIOMXComponent(OMX_HANDLETYPE hComp)
3110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
3112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_STRING pTunnelcComponentName = NULL;
3113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VERSIONTYPE* pTunnelComponentVersion = NULL;
3114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_VERSIONTYPE* pSpecVersion = NULL;
3115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_UUIDTYPE* pComponentUUID = NULL;
3116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char *pSubstring = NULL;
3117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BOOL bResult = OMX_TRUE;
3118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pTunnelcComponentName, 128);
3120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pTunnelComponentVersion, sizeof(OMX_VERSIONTYPE));
3121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pSpecVersion, sizeof(OMX_VERSIONTYPE));
3122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentUUID, sizeof(OMX_UUIDTYPE));
3123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_GetComponentVersion (hComp, pTunnelcComponentName, pTunnelComponentVersion, pSpecVersion, pComponentUUID);
3125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Check if tunneled component is a TI component */
3127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pSubstring = strstr(pTunnelcComponentName, "OMX.TI.");
3128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pSubstring == NULL) {
3129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        bResult = OMX_FALSE;
3130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
3133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pTunnelcComponentName);
3134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pTunnelComponentVersion);
3135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pSpecVersion);
3136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pComponentUUID);
3137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return bResult;
3138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of IsTIOMXComponent */
3139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
3141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
3143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  ResourceManagerCallback() - handle callbacks from Resource Manager
3144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param cbData    Resource Manager Command Data Structure
3145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: void
3146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
3147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
3148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData)
3150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
3151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE Cmd = OMX_CommandStateSet;
3152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent;
3153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
3154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE RM_Error = *(cbData.RM_Error);
3155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
3157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "RM_Error = %x\n", RM_Error);
3158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (RM_Error == OMX_RmProxyCallback_ResourcesPreempted) {
3160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->bPreempted = 1;
3162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->nCurState == OMX_StateExecuting ||
3164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState == OMX_StatePause) {
3165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
3167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   pComponentPrivate->pHandle->pApplicationPrivate,
3168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_EventError,
3169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_ErrorResourcesPreempted,
3170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_TI_ErrorSevere,
3171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   NULL);
3172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nToState = OMX_StateIdle;
3174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE2(pComponentPrivate->dbg, "Component Preempted. Going to IDLE State.\n");
3175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pComponentPrivate->nCurState == OMX_StateIdle){
3177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nToState = OMX_StateLoaded;
3178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE2(pComponentPrivate->dbg, "Component Preempted. Going to LOADED State.\n");
3179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
3182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->nToState, PERF_ModuleComponent);
3183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
3184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        write (pComponentPrivate->nCmdPipe[1], &Cmd, sizeof(Cmd));
3186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->nToState) ,sizeof(OMX_U32));
3187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (RM_Error == OMX_RmProxyCallback_ResourcesAcquired ){
3190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->nCurState == OMX_StateWaitForResources) /* Wait for Resource Response */
3192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
3193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
3194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pHandle, pHandle->pApplicationPrivate,
3195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_EventResourcesAcquired, 0,0,
3196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            NULL);
3197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nToState = OMX_StateIdle;
3199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
3201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->nToState, PERF_ModuleComponent);
3202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
3203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            write (pComponentPrivate->nCmdPipe[1], &Cmd, sizeof(Cmd));
3205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->nToState) ,sizeof(OMX_U32));
3206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRMGR2(pComponentPrivate->dbg, "OMX_RmProxyCallback_ResourcesAcquired.\n");
3207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
3208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
3209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	else if (RM_Error == OMX_RmProxyCallback_FatalError){
3210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		/* Deinitialize the component...no error should be returned from
3212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		 * this function. It should clean the system as much as possible */
3213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		if ( pComponentPrivate->pLCML != NULL && pComponentPrivate->isLCMLActive) {
3214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                	LCML_ControlCodec(((LCML_DSP_INTERFACE*)pComponentPrivate->pLCML)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL);
3215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                     	dlclose(pComponentPrivate->pDllHandle);
3216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                	pComponentPrivate->pLCML = NULL;
3217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                	pComponentPrivate->isLCMLActive = 0;
3218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
3219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->nCurState = OMX_StateInvalid;
3221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		pComponentPrivate->cbInfo.EventHandler(pHandle,
3222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											   pHandle->pApplicationPrivate,
3223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											   OMX_EventError,
3224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											   OMX_ErrorInvalidState,
3225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											   OMX_TI_ErrorSevere,
3226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin											   NULL);
3227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	}
3228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
3230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Create(LinkedList *LinkedList) {
3232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList->pRoot = NULL;
3233bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_init(&LinkedList->lock, NULL);
3234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_AddElement(LinkedList *LinkedList, void *pValue) {
3237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* create new node and fill the value */
3238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNewNode = (Node *)malloc(sizeof(Node));
3239b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if ( pNewNode != NULL ) {
3240b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pNewNode->pValue = (void *)pValue;
3241b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /*printf("LinkedList:::: Pointer=%p has been added.\n", pNewNode->pValue); */
3242b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* add new node on the root to implement quick FIFO */
3243b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* modify new node pointers */
3244bca73818821dde513097a412ae6f2539d927e588Andrew Collins
3245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pthread_mutex_lock(&LinkedList->lock);
3246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        if(LinkedList->pRoot == NULL) {
3247b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            pNewNode->pNextNode = NULL;
3248b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
3249b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        else {
3250b65f253fdc60f6208a54911bee793d225f23cdf8James Dong             pNewNode->pNextNode = LinkedList->pRoot;
3251b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        }
3252b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /*modify root */
3253b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        LinkedList->pRoot = pNewNode;
3254b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        pthread_mutex_unlock(&LinkedList->lock);
3255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    else {
3257a0a88cf291e156344d5346c29824d996d1d81fabSteve Block         ALOGE("Linked list memory allocation failed.\n" );
3258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
3261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeElement(LinkedList *LinkedList, void *pValue) {
3262bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_lock(&LinkedList->lock);
3263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNode = LinkedList->pRoot;
3264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pPastNode = NULL;
3265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pNode != NULL) {
3266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pNode->pValue == pValue) {
3267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            Node *pTempNode = pNode->pNextNode;
3268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if(pPastNode == NULL) {
3269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                LinkedList->pRoot = pTempNode;
3270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
3271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
3272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pPastNode->pNextNode = pTempNode;
3273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
3274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*printf("LinkedList:::: Pointer=%p has been freed\n", pNode->pValue); */
3275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pNode->pValue);
3276bca73818821dde513097a412ae6f2539d927e588Andrew Collins            pNode->pValue = NULL;
3277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            free(pNode);
3278bca73818821dde513097a412ae6f2539d927e588Andrew Collins            pNode = NULL;
3279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            break;
3280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
3281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pPastNode = pNode;
3282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pNode = pNode->pNextNode;
3283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
3284bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_unlock(&LinkedList->lock);
3285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeAll(LinkedList *LinkedList) {
3288b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pTempNode;
3289b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nodes = 0;
3290bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_lock(&LinkedList->lock);
3291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (LinkedList->pRoot != NULL) {
3292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pTempNode = LinkedList->pRoot->pNextNode;
3293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*printf("LinkedList:::: Pointer=%p has been freed\n", LinkedList->pRoot->pValue); */
3294bca73818821dde513097a412ae6f2539d927e588Andrew Collins        if(LinkedList->pRoot->pValue != NULL) {
3295b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		free(LinkedList->pRoot->pValue);
3296b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		LinkedList->pRoot->pValue = NULL;
3297b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
3298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        free(LinkedList->pRoot);
3299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LinkedList->pRoot = pTempNode;
3300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nodes++;
3301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3302bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_unlock(&LinkedList->lock);
3303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /*printf("==================No. of deleted nodes: %d=======================================\n\n", nodes); */
3304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
3305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_DisplayAll(LinkedList *LinkedList) {
3307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    Node *pNode = LinkedList->pRoot;
3308b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nodes = 0;
3309b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("\n================== Displaying contents of linked list=%p=====================\n", LinkedList);
3310b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    printf("root->\n");
3311b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (pNode != NULL) {
3312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        printf("[Value=%p, NextNode=%p]->\n", pNode->pValue, pNode->pNextNode);
3313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pNode = pNode->pNextNode;
3314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        nodes++;
3315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
3316bca73818821dde513097a412ae6f2539d927e588Andrew Collins    printf("==================No. of existing nodes: %d=======================================\n\n", nodes);
3317b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
3319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Destroy(LinkedList *LinkedList) {
3320bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pthread_mutex_destroy(&LinkedList->lock);
3321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
3322644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3323644f5ad9b052d954c568285458ee5cad6aec20c1Benny WongOMX_ERRORTYPE AddStateTransition(JPEGENC_COMPONENT_PRIVATE* pComponentPrivate) {
3324644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3325644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    OMX_ERRORTYPE eError = OMX_ErrorNone;
3326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3327644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) {
3328644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
3329644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
3330644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3331644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    /* Increment state change request reference count */
3332644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    pComponentPrivate->nPendingStateChangeRequests++;
3333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3334644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
3335644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
3336644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
3337644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3338644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    return eError;
3339644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong}
3340644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3341644f5ad9b052d954c568285458ee5cad6aec20c1Benny WongOMX_ERRORTYPE RemoveStateTransition(JPEGENC_COMPONENT_PRIVATE* pComponentPrivate, OMX_BOOL bEnableSignal) {
3342644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    OMX_ERRORTYPE eError = OMX_ErrorNone;
3343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3344644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong     /* Decrement state change request reference count*/
3345644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) {
3346644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
3347644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
3348644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
3349644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    pComponentPrivate->nPendingStateChangeRequests--;
3350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3351644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    /* If there are no more pending requests, signal the thread waiting on this*/
3352644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(!pComponentPrivate->nPendingStateChangeRequests && bEnableSignal) {
3353644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       pthread_cond_signal(&(pComponentPrivate->StateChangeCondition));
3354644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
3355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3356644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
3357644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
3358644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
3359b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
3360644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    return eError;
3361644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong}
3362