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_JpegEncoder.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#ifdef UNDER_CE
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h>
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h>
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <pthread.h>
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*------- Program Header Files ----------------------------------------*/
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegEnc_Utils.h"
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegEnc_CustomCmd.h"
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <ResourceManagerProxyAPI.h>
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------Global-----------------------------------*/
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_STRING cJPEGencName = "OMX.TI.JPEG.encoder";
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ---------------------------------*/
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetCallbacks (OMX_HANDLETYPE hComp,
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pAppData);
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetComponentVersion (OMX_HANDLETYPE hComp,
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING pComponentName,
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID);
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SendCommand (OMX_HANDLETYPE hComponent,
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_COMMANDTYPE Cmd,
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_U32 nParam,
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                  OMX_PTR pCmdData);
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetParameter (OMX_IN OMX_HANDLETYPE hComponent,
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_IN OMX_INDEXTYPE nParamIndex,
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INOUT OMX_PTR ComponentParameterStructure);
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetParameter (OMX_HANDLETYPE hComp,
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INDEXTYPE nParamIndex,
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR ComponentParameterStructure);
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetConfig (OMX_HANDLETYPE hComp,
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure);
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetConfig (OMX_HANDLETYPE hComp,
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_INDEXTYPE nConfigIndex,
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_PTR ComponentConfigStructure);
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_EmptyThisBuffer (OMX_HANDLETYPE hComp,
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_BUFFERHEADERTYPE* pBuffer);
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_FillThisBuffer (OMX_HANDLETYPE hComp,
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer);
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetState (OMX_HANDLETYPE hComp,
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_STATETYPE* pState);
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_ComponentTunnelRequest(OMX_IN  OMX_HANDLETYPE hComp,
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN  OMX_U32 nPort,
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN  OMX_HANDLETYPE hTunneledComp,
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN  OMX_U32 nTunneledPort,
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_VerifyTunnelConnection(JPEG_PORT_TYPE*pPort,
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_HANDLETYPE hTunneledComp,
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin					    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef,
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin					    struct OMX_TI_Debug *dbg);
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_IN OMX_U32 nPortIndex,
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_IN OMX_PTR pAppPrivate,
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_IN OMX_U32 nSizeBytes,
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                               OMX_IN OMX_U8* pBuffer);
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_U32 nPortIndex,
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer);
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_ComponentDeInit(OMX_HANDLETYPE pHandle);
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent,
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_U32 nPortIndex,
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_PTR pAppPrivate,
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_U32 nSizeBytes);
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void JPEGENC_InitBufferFlagTrack(JPEGENC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nPortIndex);
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_IN OMX_HANDLETYPE hComponent,
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_OUT OMX_U8 *cRole,
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_IN OMX_U32 nIndex);
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent,
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_IN OMX_STRING cParameterName,
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_OUT OMX_INDEXTYPE* pIndexType);
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------- Function Implementations ---------------------------------*/
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_FreeBuffer(OMX_IN  OMX_HANDLETYPE hComponent,
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN  OMX_U32 nPortIndex,
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN  OMX_BUFFERHEADERTYPE* pBuffer)
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle                   = NULL;
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef       = NULL;
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate         = NULL;
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE* pCompPort                    = NULL;
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError                         = OMX_ErrorNone;
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    char* pTemp                                  = NULL;
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pBuffer);
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *) hComponent;
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *) pHandle->pComponentPrivate;
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pCompPort = pComponentPrivate->pCompPort[nPortIndex];
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "JPEGENC_FreeBuffer %p at port %d\n", pBuffer, (int)nPortIndex);
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* never frees buffer */
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingFrame(pComponentPrivate->pPERF,
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pBuffer->pBuffer,
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      pBuffer->nFilledLen,
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                      PERF_ModuleMax);
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( nPortIndex == pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->nPortIndex ) {
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffer->pInputPortPrivate;
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if ( nPortIndex == pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->nPortIndex  ) {
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffer->pOutputPortPrivate;
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            goto PRINT_EXIT;
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffPrivate->bAllocByComponent == OMX_TRUE) {
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffer->pBuffer) {
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pTemp = (char*)pBuffer->pBuffer;
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pTemp -= 128;
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin           OMX_FREE(pTemp);
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           pBuffer->pBuffer = NULL;
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_FREE(pBuffer);
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pPortDef->bEnabled &&
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((pComponentPrivate->nCurState == OMX_StateIdle && pComponentPrivate->nToState != OMX_StateLoaded) ||
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         pComponentPrivate->nCurState == OMX_StateExecuting ||
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         pComponentPrivate->nCurState == OMX_StatePause) ) {
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      pComponentPrivate->pHandle->pApplicationPrivate,
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_EventError,
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_ErrorPortUnpopulated,
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      OMX_TI_ErrorMinor,
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                      "Port Unpopulated");
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        pCompPort->nBuffCount--;
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEGE: bPopulated %d\n", pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated);
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCompPort->nBuffCount == 0) {
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated = OMX_FALSE;
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&pComponentPrivate->unpopulate_cond);
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        JPEGENC_InitBufferFlagTrack(pComponentPrivate, nPortIndex);
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((!pPortDef->bEnabled) &&
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (!pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated)) {
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nPortIndex == 0) && (!pComponentPrivate->bInportDisableIncomplete)) {
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bInportDisableIncomplete = OMX_TRUE;
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortDisable,
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_INP_PORT,
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nPortIndex == 1) && (!pComponentPrivate->bOutportDisableIncomplete)) {
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bOutportDisableIncomplete = OMX_TRUE;
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortDisable,
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                JPEGENC_OUT_PORT,
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
272b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT:
273eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "Exit from FreeBuffer\n");
274b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGENC_UseBuffer(OMX_IN OMX_HANDLETYPE hComponent,
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nPortIndex,
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_PTR pAppPrivate,
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U32 nSizeBytes,
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_IN OMX_U8* pBuffer)
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle                      = NULL;
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate    = NULL;
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef          = NULL;
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError                            = OMX_ErrorNone;
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE hTunnelComponent                 = NULL;
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBufferCount                            = -1;
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE *pBuffHeader               = NULL;
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nInpIndex;
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nOutIndex;
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(ppBufferHdr);
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pBuffer);
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
30143a7253b0439ca1a6f69496e23343164735a6b12James Dong    if (nPortIndex != 0 && nPortIndex != 1) {
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    hTunnelComponent = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent;
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer,
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       nSizeBytes,
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleLLMM);
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nInpIndex = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->nPortIndex;
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nOutIndex = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->nPortIndex;
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( (int)nPortIndex == nInpIndex ) {
326b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pBuffHeader, sizeof(OMX_BUFFERHEADERTYPE));
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pBuffHeader, OMX_BUFFERHEADERTYPE);
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr = pBuffHeader;
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBufferHdr = pBuffHeader;
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if ( (int)nPortIndex == nOutIndex ) {
332b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pBuffHeader, sizeof(OMX_BUFFERHEADERTYPE));
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pBuffHeader, OMX_BUFFERHEADERTYPE);
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr = pBuffHeader;
335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBufferHdr = pBuffHeader;
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* set relevant fields */
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nSize       = sizeof(OMX_BUFFERHEADERTYPE);
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nVersion    = pPortDef->nVersion;
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->pBuffer     = pBuffer;
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nAllocLen   = nSizeBytes;
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->pAppPrivate = pAppPrivate;
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->bAllocByComponent = OMX_FALSE;
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* set direction dependent fields */
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (hTunnelComponent != NULL) {
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pPortDef->eDir == OMX_DirInput ) {
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nInputPortIndex   = nPortIndex;
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nOutputPortIndex  = pComponentPrivate->pCompPort[nPortIndex]->nTunnelPort;
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr = (*ppBufferHdr); */
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nOutputPortIndex   = nPortIndex;
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nInputPortIndex    = pComponentPrivate->pCompPort[nPortIndex]->nTunnelPort;
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr = (*ppBufferHdr); */
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nPortIndex == JPEGENC_INP_PORT) {
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHeader->nInputPortIndex  = JPEGENC_INP_PORT;
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHeader->nOutputPortIndex = OMX_NOPORT;
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHeader->nInputPortIndex  = OMX_NOPORT;
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHeader->nOutputPortIndex = JPEGENC_OUT_PORT;
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGENC_INP_PORT) {
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHeader->pInputPortPrivate = pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHeader->pOutputPortPrivate = pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent != NULL) {
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGENC_BUFFER_TUNNEL_COMPONENT;
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGENC_BUFFER_CLIENT;
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( nPortIndex == pComponentPrivate->pCompPort[nPortIndex]->pPortFormat->nPortIndex ) {
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->nBuffCount++;
391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pCompPort[nPortIndex]->nBuffCount == pPortDef->nBufferCountActual) {
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_signal(&pComponentPrivate->populate_cond);
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGENC_InitBufferFlagTrack(pComponentPrivate, nPortIndex);
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * OMX_ComponentInit() Set the all the function pointers of component
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update the component function pointer to the handle
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_ErrorInsufficientResources If the malloc fails
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit (OMX_HANDLETYPE hComponent)
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle  = NULL;
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError            = OMX_ErrorNone;
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 i = 0;
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /* Allocate memory for component's private data area */
426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList_Create(&AllocList);
430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pHandle->pComponentPrivate, sizeof(JPEGENC_COMPONENT_PRIVATE));
433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* get default settings for debug */
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_JPGENC");
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Allocate memory for component's private data area */
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "in jpeg-enc OMX_ComponentInit\n");
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pPERF = PERF_Create(PERF_FOURCC('J','P','E',' '),
443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               PERF_ModuleLLMM | PERF_ModuleImageEncode);
444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pPERFcomp = NULL;
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /**Assigning address of Component Structure point to place holder inside comp
448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    nentprivate structure
449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    */
450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    ((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nCurState = OMX_StateLoaded;
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetCallbacks               = JPEGENC_SetCallbacks;
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetComponentVersion        = JPEGENC_GetComponentVersion;
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SendCommand                = JPEGENC_SendCommand;
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetParameter               = JPEGENC_GetParameter;
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetParameter               = JPEGENC_SetParameter;
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetConfig                  = JPEGENC_GetConfig;
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetConfig                  = JPEGENC_SetConfig;
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetState                   = JPEGENC_GetState;
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->EmptyThisBuffer            = JPEGENC_EmptyThisBuffer;
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FillThisBuffer             = JPEGENC_FillThisBuffer;
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentTunnelRequest     = JPEGENC_ComponentTunnelRequest;
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentDeInit            = JPEGENC_ComponentDeInit;
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->UseBuffer                  = JPEGENC_UseBuffer    ;
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FreeBuffer                 = JPEGENC_FreeBuffer;
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->AllocateBuffer             = JPEGENC_AllocateBuffer;
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetExtensionIndex = JPEGENC_GetExtensionIndex;
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentRoleEnum          = ComponentRoleEnum;
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(pComponentPrivate->dbg, "Inside Component Init JPEG encoder\n");
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMajor = 0x01;
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMinor = 0x00;
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nRevision = 0x00;
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nStep = 0x00;
478b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->cComponentName, COMP_MAX_NAMESIZE+1);
479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strncpy(pComponentPrivate->cComponentName, cJPEGencName, COMP_MAX_NAMESIZE);
480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Allocate memory for component data structures */
482b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamType, sizeof(OMX_PORT_PARAM_TYPE));
483b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeAudio, sizeof(OMX_PORT_PARAM_TYPE));
484b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeVideo, sizeof(OMX_PORT_PARAM_TYPE));
485b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamTypeOthers, sizeof(OMX_PORT_PARAM_TYPE));
486b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_INP_PORT], sizeof(JPEG_PORT_TYPE));
487b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT], sizeof(JPEG_PORT_TYPE));
488b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
489b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
490b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
491b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
492b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pParamBufSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
493b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pParamBufSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
494b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
495b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pQualityfactor, sizeof(OMX_IMAGE_PARAM_QFACTORTYPE));
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCrop, sizeof(OMX_CONFIG_RECTTYPE));
497b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCustomLumaQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
498b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCustomChromaQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
499b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pHuffmanTable, sizeof(JPEGENC_CUSTOM_HUFFMANTTABLETYPE));
500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERSJPEG;i++) {
501b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[i], sizeof(JPEGENC_BUFFER_PRIVATE));
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERSJPEG;i++) {
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[i]->pBufferHdr = NULL;
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERSJPEG;i++) {
509b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i], sizeof(JPEGENC_BUFFER_PRIVATE));
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERSJPEG;i++) {
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[i]->pBufferHdr = NULL;
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nFlags               = 0;
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->isLCMLActive         = 0;
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nCommentFlag         = 0;
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* pComponentPrivate->nThumbnailFlag   = 0; */
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData            = NULL;
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = NULL;
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pString_Comment      = NULL;
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nDRI_Interval        = 0;
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bSetHuffmanTable = OMX_FALSE;
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bSetLumaQuantizationTable = OMX_FALSE;
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bSetChromaQuantizationTable = OMX_FALSE;
527b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate->bConvert420pTo422i = OMX_FALSE;
528b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __JPEG_OMX_PPLIB_ENABLED__
529b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate->bPPLibEnable = OMX_TRUE;
530b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#else
531b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    pComponentPrivate->bPPLibEnable = OMX_FALSE;
532b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
533b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InParams.pInParams = NULL;
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->InParams.size = 0;
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
537b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
538bca73818821dde513097a412ae6f2539d927e588Andrew Collins#ifdef __JPEG_OMX_PPLIB_ENABLED__
539bca73818821dde513097a412ae6f2539d927e588Andrew Collins    pComponentPrivate->pOutParams = NULL;
540bca73818821dde513097a412ae6f2539d927e588Andrew Collins#endif
541b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
543b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pDynParams, sizeof(IDMJPGE_TIGEM_DynamicParams)+256);
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pComponentPrivate->pDynParams) {
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = SetJpegEncInParams(pComponentPrivate);
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char *)pComponentPrivate->componentRole.cRole, "image_encoder.jpeg");
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pPortParamType defaults */
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamType, OMX_PORT_PARAM_TYPE);
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamType->nPorts = NUM_OF_PORTS;
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamType->nStartPortNumber = 0;
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeAudio, OMX_PORT_PARAM_TYPE);
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeAudio->nPorts = 0;
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeAudio->nStartPortNumber = -1;
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeVideo, OMX_PORT_PARAM_TYPE);
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeVideo->nPorts = 0;
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeVideo->nStartPortNumber = -1;
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamTypeOthers, OMX_PORT_PARAM_TYPE);
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeOthers->nPorts = 0;
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamTypeOthers->nStartPortNumber = -1;
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Set Quality factor structure */
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*    OMX_CONF_INIT_STRUCT(pComponentPrivate->pQualityfactor, OMX_IMAGE_PARAM_QFACTORTYPE);*/
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pInPortDef defaults */
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nPortIndex            = JPEGENC_INP_PORT;
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->eDir                  = OMX_DirInput;
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual    = NUM_OF_BUFFERSJPEG;
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountMin       = 1;
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferSize           = 460800; /* 50688; */
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bEnabled              = OMX_TRUE;
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bPopulated            = OMX_FALSE;
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->eDomain               = OMX_PortDomainImage;
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->isLCMLActive = 0;
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.cMIMEType             = "JPEGENC";
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.pNativeRender         = NULL;
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.nFrameWidth           = 640;  /* 176; */
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.nFrameHeight          = 480; /* 144; */
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.nStride               = -1;
592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.nSliceHeight          = -1;
593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.bFlagErrorConcealment = OMX_FALSE;
594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.eCompressionFormat    =  OMX_IMAGE_CodingUnused; /* OMX_IMAGE_CodingJPEG; */
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->format.image.eColorFormat          =  OMX_COLOR_FormatYUV420PackedPlanar; /* OMX_COLOR_FormatCbYCrY; */
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutPortDef defaults */
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nPortIndex         = JPEGENC_OUT_PORT;
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->eDir               = OMX_DirOutput;
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nBufferCountMin    = 1;
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nBufferCountActual = NUM_OF_BUFFERSJPEG;
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->nBufferSize        = 460800; /* 50688; */
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bEnabled           = OMX_TRUE;
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bPopulated         = OMX_FALSE;
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->eDomain            = OMX_PortDomainImage;
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.cMIMEType        = "JPEGENC";
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.pNativeRender    = NULL;
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.nFrameWidth      = 640; /* 176; */
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.nFrameHeight     = 480; /* 144; */
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.nStride          = -1;
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.nSliceHeight     = -1;
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.bFlagErrorConcealment    = OMX_FALSE;
615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.eCompressionFormat       = OMX_IMAGE_CodingJPEG; /* OMX_IMAGE_CodingUnused; */
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->format.image.eColorFormat             =  OMX_COLOR_FormatUnused; /* OMX_COLOR_FormatCbYCrY; */
617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_CONF_INIT_STRUCT(pComponentPrivate->pCustomLumaQuantTable, OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE);
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCustomLumaQuantTable->nPortIndex = JPEGENC_OUT_PORT;
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCustomLumaQuantTable->eQuantizationTable = OMX_IMAGE_QuantizationTableLuma;
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_CONF_INIT_STRUCT(pComponentPrivate->pCustomChromaQuantTable, OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE);
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCustomChromaQuantTable->nPortIndex = JPEGENC_OUT_PORT;
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCustomChromaQuantTable->eQuantizationTable = OMX_IMAGE_QuantizationTableChroma;
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_CONF_INIT_STRUCT(pComponentPrivate->pHuffmanTable, JPEGENC_CUSTOM_HUFFMANTTABLETYPE);
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHuffmanTable->nPortIndex = JPEGENC_OUT_PORT;
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pInPortFormat defaults */
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat, OMX_IMAGE_PARAM_PORTFORMATTYPE);
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->nPortIndex         = JPEGENC_INP_PORT;
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->nIndex             = 0x0;
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->eCompressionFormat = OMX_IMAGE_CodingUnused; /* OMX_IMAGE_CodingJPEG; */
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortFormat->eColorFormat       = OMX_COLOR_FormatYUV420PackedPlanar; /* OMX_COLOR_FormatCbYCrY; */
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutPortFormat defaults */
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat, OMX_IMAGE_PARAM_PORTFORMATTYPE);
639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->nPortIndex         = JPEGENC_OUT_PORT;
640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->nIndex             = 0x0;
641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->eCompressionFormat = OMX_IMAGE_CodingJPEG; /* OMX_IMAGE_CodingUnused; */
642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortFormat->eColorFormat       = OMX_COLOR_FormatUnused; /* OMX_COLOR_FormatCbYCrY; */
643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pPriorityMgmt defaults */
645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE);
646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupPriority = -1;
647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupID       = -1;
648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCrop, OMX_CONFIG_RECTTYPE);
650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pQualityfactor, OMX_IMAGE_PARAM_QFACTORTYPE);
651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pQualityfactor->nPortIndex = 1;
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pQualityfactor->nQFactor   = 100;
653b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP0.bMarkerEnabled = OMX_FALSE;
655b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP1.bMarkerEnabled = OMX_FALSE;
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP5.bMarkerEnabled = OMX_FALSE;
657b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP13.bMarkerEnabled = OMX_FALSE;
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
659b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP0.pMarkerBuffer = NULL;
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP1.pMarkerBuffer = NULL;
661b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP5.pMarkerBuffer = NULL;
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin   pComponentPrivate->sAPP13.pMarkerBuffer = NULL;
663b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pParamBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pParamBufSupplier->nPortIndex      = JPEGENC_INP_PORT;
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pParamBufSupplier->eBufferSupplier = 0x0;
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutBufSupplier defaults */
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pParamBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pParamBufSupplier->nPortIndex      = JPEGENC_OUT_PORT;
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pParamBufSupplier->eBufferSupplier = 0x0;
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufSupplier= OMX_BufferSupplyOutput;
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent = NULL;
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->nBuffCount       = 0;
678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->hTunnelComponent = NULL;
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->nBuffCount       = 0;
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->jpege_mutex, NULL);
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init(&pComponentPrivate->stop_cond, NULL);
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init(&pComponentPrivate->flush_cond, NULL);
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* pthread_cond_init(&pComponentPrivate->control_cond, NULL); */
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_mutex_init(&pComponentPrivate->jpege_mutex_app, NULL);
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init(&pComponentPrivate->populate_cond, NULL);
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pthread_cond_init(&pComponentPrivate->unpopulate_cond, NULL);
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
692644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_mutex_init(&pComponentPrivate->mutexStateChangeRequest, NULL)) {
693644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
694644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
695644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
696644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(pthread_cond_init (&pComponentPrivate->StateChangeCondition, NULL)) {
697644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return OMX_ErrorUndefined;
698644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    }
699644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    pComponentPrivate->nPendingStateChangeRequests = 0;
700644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* load the ResourceManagerProxy thread */
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_NewInitalizeEx(OMX_COMPONENTTYPE_IMAGE);
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( eError != OMX_ErrorNone ) {
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from loading ResourceManagerProxy thread\n");
706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = JPEGEnc_Start_ComponentThread(pHandle);
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError) {
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT4(pComponentPrivate->dbg, "Error while initializing thread\n");
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG-ENC: actual buffer %d\n", (int)(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual));
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError != OMX_ErrorNone){
719b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* LinkedList_DisplayAll (&AllocList); */
720b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREEALL();
721b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LinkedList_Destroy(&AllocList);
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_SetCallbacks() Sets application callbacks to the component
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * the application.
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pAppData      pointer to application Data
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetCallbacks (OMX_HANDLETYPE pComponent,
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_CALLBACKTYPE* pCallBacks,
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_PTR pAppData)
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError        = OMX_ErrorNone;
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle  = NULL;
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pCallBacks);
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)pComponent;
754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Copy the callbacks of the application to the component private  */
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memcpy (&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_MEMCPY_CHECK(&(pComponentPrivate->cbInfo));
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Copy the application private data to component memory  */
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nCurState = OMX_StateLoaded;
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_GetComponentVersion() Sets application callbacks to the component
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will get the component Version.
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponentName    application callbacks
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponentVersion
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pSpecVersion
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponentUUID
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetComponentVersion (OMX_HANDLETYPE hComp,
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_STRING szComponentName,
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pComponentVersion,
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_VERSIONTYPE* pSpecVersion,
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_UUIDTYPE* pComponentUUID)
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE          eError            = OMX_ErrorNone;
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE    * pHandle           = NULL;
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!hComp || !szComponentName || !pComponentVersion || !pSpecVersion || !pComponentUUID) {
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComp;
800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pHandle->pComponentPrivate) {
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strncpy(szComponentName, pComponentPrivate->cComponentName, COMP_MAX_NAMESIZE);
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp = memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pTemp == NULL){
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp = memcpy(pSpecVersion, &(pComponentPrivate->SpecVersion.s), sizeof(pComponentPrivate->SpecVersion.s));
813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pTemp == NULL){
814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_SendCommand() Send commands to the
824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * the application.
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param phandle       handle for this instance of the component
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param Cmd           OMX Command usually OMX_CommandStateSet
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParam
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SendCommand (
837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_HANDLETYPE hComponent,
838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_COMMANDTYPE Cmd,
839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_U32 nParam,
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             OMX_PTR pCmdData
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             )
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE                eError         = OMX_ErrorNone;
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE            *pHandle       = NULL;
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE    *pCompPrivate  = NULL;
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDefIn    = NULL;
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDefOut   = NULL;
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_MARKTYPE *pMarkType = NULL;
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE eCmd         = -1;
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet                = 0;
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle      = (OMX_COMPONENTTYPE *)hComponent;
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pCompPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn   = pCompPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef;
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut  = pCompPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef;
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT2(pCompPrivate->dbg, "Print nParam = %d\n", (int)nParam);
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pCompPrivate->nCurState == OMX_StateInvalid ) {
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( Cmd ) {
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandStateSet:
868644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         /* Add a pending transition */
869644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         if(AddStateTransition(pCompPrivate) != OMX_ErrorNone) {
870644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong             return OMX_ErrorUndefined;
871644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong         }
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = SetState;
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->nToState = nParam;
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandFlush:
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if ((nParam != 0) && (nParam != 1) && ((int)nParam != -1)) {
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = Flush;
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortDisable:
883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if (nParam == JPEGENC_INP_PORT  || (int)nParam == -1) {
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDefIn->bEnabled = OMX_FALSE;
885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->bInportDisableIncomplete = OMX_FALSE;
886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam == JPEGENC_OUT_PORT  || (int)nParam == -1) {
888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDefOut->bEnabled = OMX_FALSE;
889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->bOutportDisableIncomplete = OMX_FALSE;
890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGENC_INP_PORT) && (nParam != JPEGENC_OUT_PORT) && ((int)nParam != -1))
892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pPortDefIn->bPopulated) {
898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->bInportDisableIncomplete = OMX_TRUE;
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->cbInfo.EventHandler (pCompPrivate->pHandle,
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->pHandle->pApplicationPrivate,
901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_EventCmdComplete,
902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_CommandPortDisable,
903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGENC_INP_PORT,
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            NULL);
905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pPortDefOut->bPopulated) {
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->bOutportDisableIncomplete = OMX_TRUE;
909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pCompPrivate->cbInfo.EventHandler (pCompPrivate->pHandle,
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pCompPrivate->pHandle->pApplicationPrivate,
911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_EventCmdComplete,
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_CommandPortDisable,
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            JPEGENC_OUT_PORT,
914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            NULL);
915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandPortDisable;
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortEnable:
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if (nParam == JPEGENC_INP_PORT  || (int)nParam == -1) {
921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDefIn->bEnabled = OMX_TRUE;
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam == JPEGENC_OUT_PORT  || (int)nParam == -1) {
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDefOut->bEnabled = OMX_TRUE;
925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGENC_INP_PORT) && (nParam != JPEGENC_OUT_PORT) && ((int)nParam != -1)) {
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandPortEnable;
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandMarkBuffer:
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGENC_OUT_PORT) && (nParam != JPEGENC_INP_PORT)) {
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pMarkType = (OMX_MARKTYPE *)pCmdData;
939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->pMarkData = pMarkType->pMarkData;
940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->hMarkTargetComponent = pMarkType->hMarkTargetComponent;
941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pCompPrivate->nMarkPort = nParam;
942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pCompPrivate->dbg, "IN SendCommand, port %d mark %p\n", pCompPrivate->nMarkPort, pCompPrivate->pMarkData);
943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write(pCompPrivate->nCmdPipe[1], &eCmd, sizeof(eCmd));
951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
952644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       if(RemoveStateTransition(pCompPrivate, OMX_FALSE) != OMX_ErrorNone) {
953644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           return OMX_ErrorUndefined;
954644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       }
955644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return  OMX_ErrorUndefined;
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_SendingCommand(pCompPrivate->pPERF,
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            Cmd,
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            (Cmd == OMX_CommandMarkBuffer) ? (OMX_U32) pCmdData : nParam,
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            PERF_ModuleComponent);
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write(pCompPrivate->nCmdDataPipe[1], &nParam, sizeof(nParam));
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
968644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       if(RemoveStateTransition(pCompPrivate, OMX_FALSE) != OMX_ErrorNone) {
969644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           return OMX_ErrorUndefined;
970644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       }
971644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong       return  OMX_ErrorUndefined;
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
974644f5ad9b052d954c568285458ee5cad6aec20c1Benny WongEXIT:
975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_GetParameter() Gets Parameters from the Component
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update parameters from the component to the app.
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParamIndex   Component Index Port
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentParameterStructure Component Parameter Structure
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetParameter (OMX_IN OMX_HANDLETYPE hComponent,
995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_IN OMX_INDEXTYPE nParamIndex,
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                   OMX_INOUT OMX_PTR pComponentParameterStructure)
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE         *pComp             = NULL;
999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE             eError             = OMX_ErrorNone;
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE            *pInpPortType      = NULL;
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE            *pOutPortType      = NULL;
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponentParameterStructure);
1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComp = (OMX_COMPONENTTYPE *)hComponent;
1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE*)pComp->pComponentPrivate;
1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering function\n");
1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState == OMX_StateInvalid ) {
1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
1013b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto PRINT_EXIT;
1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pInpPortType = pComponentPrivate->pCompPort[JPEGENC_INP_PORT];
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pOutPortType = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT];
1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( nParamIndex ) {
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImageInit:
1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentParameterStructure, pComponentPrivate->pPortParamType, sizeof(OMX_PORT_PARAM_TYPE));
1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentParameterStructure);
1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioInit:
1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentParameterStructure, pComponentPrivate->pPortParamTypeAudio, sizeof(OMX_PORT_PARAM_TYPE));
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentParameterStructure);
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamVideoInit:
1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentParameterStructure, pComponentPrivate->pPortParamTypeVideo, sizeof(OMX_PORT_PARAM_TYPE));
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentParameterStructure);
1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamOtherInit:
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentParameterStructure, pComponentPrivate->pPortParamTypeOthers, sizeof(OMX_PORT_PARAM_TYPE));
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentParameterStructure);
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_PARAM_PORTDEFINITIONTYPE *pParamPortDef  = NULL;
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pParamPortDef = (OMX_PARAM_PORTDEFINITIONTYPE *)pComponentParameterStructure;
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_PRINT2(pComponentPrivate->dbg, "index is %d (%d) (%d)\n",
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		  (int)(pParamPortDef->nPortIndex),
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		  (int)(pInpPortType->pPortDef->nPortIndex),
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		  (int)(pOutPortType->pPortDef->nPortIndex));
1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pParamPortDef->nPortIndex == pInpPortType->pPortDef->nPortIndex)
1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "nBufferCountActual %d (0) \n", (int)(pInpPortType->pPortDef->nBufferCountActual));
1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bPopulated = OMX_FALSE; */
1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentParameterStructure, pInpPortType->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentParameterStructure);
1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if (pParamPortDef->nPortIndex == pOutPortType->pPortDef->nPortIndex)
1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "nBufferCountActual %d (1)\n", (int)(pOutPortType->pPortDef->nBufferCountActual));
1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bPopulated = OMX_FALSE; */
1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentParameterStructure, pOutPortType->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentParameterStructure);
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImagePortFormat:
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IMAGE_PARAM_PORTFORMATTYPE *pParamImagePortFormat = NULL;
1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pParamImagePortFormat = (OMX_IMAGE_PARAM_PORTFORMATTYPE *)pComponentParameterStructure;
1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pParamImagePortFormat->nPortIndex == pInpPortType->pPortFormat->nPortIndex )
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pParamImagePortFormat->nIndex > pInpPortType->pPortFormat->nIndex ) {
1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else {
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentParameterStructure, pInpPortType->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentParameterStructure);
1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if (pParamImagePortFormat->nPortIndex == pOutPortType->pPortFormat->nPortIndex )
1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pParamImagePortFormat->nIndex > pOutPortType->pPortFormat->nIndex ) {
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            } else {
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentParameterStructure, pOutPortType->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentParameterStructure);
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentParameterStructure, pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentParameterStructure);
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)pComponentParameterStructure;
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pBuffSupplierParam->nPortIndex == pOutPortType->pPortDef->nPortIndex)
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffSupplierParam->eBufferSupplier = pOutPortType->pParamBufSupplier->eBufferSupplier;
1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else if ( pBuffSupplierParam->nPortIndex == pInpPortType->pPortDef->nPortIndex )
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffSupplierParam->eBufferSupplier = pInpPortType->pParamBufSupplier->eBufferSupplier;
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamQuantizationTable:
1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *pQuantTable = (OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *)pComponentParameterStructure;
1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pQuantTable->eQuantizationTable == OMX_IMAGE_QuantizationTableLuma) {
1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pQuantTable, pComponentPrivate->pCustomLumaQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pQuantTable->eQuantizationTable == OMX_IMAGE_QuantizationTableChroma) {
1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pQuantTable, pComponentPrivate->pCustomChromaQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else { /* wrong eQuantizationTable, return error */
1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           eError = OMX_ErrorBadParameter;
1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomHuffmanTable:
1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        JPEGENC_CUSTOM_HUFFMANTTABLETYPE *pHuffmanTable = (JPEGENC_CUSTOM_HUFFMANTTABLETYPE *)pComponentParameterStructure;
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pHuffmanTable, pComponentPrivate->pHuffmanTable, sizeof(JPEGENC_CUSTOM_HUFFMANTTABLETYPE));
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1135b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT:
1136eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "Exit function eError = %x\n", eError);
1137b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_SetParameter() Gets the parameters sent by the Application and sets it to the component.
1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update component parameters .
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nParamIndex    Component Params Index Port
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentParameterStructure Component Parameter Structure
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetParameter (OMX_HANDLETYPE hComponent,
1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_INDEXTYPE nParamIndex,
1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                           OMX_PTR pCompParam)
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE         * pHandle           = NULL;
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE               eError            = OMX_ErrorNone;
1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE            *pInpPortType       = NULL;
1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE            *pOutPortType       = NULL;
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_COMPONENTROLETYPE  *pRole;
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pCompParam);
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle= (OMX_COMPONENTTYPE*)hComponent;
1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = pHandle->pComponentPrivate;
1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState != OMX_StateLoaded ) {
1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pInpPortType = pComponentPrivate->pCompPort[JPEGENC_INP_PORT];
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pOutPortType = pComponentPrivate->pCompPort[JPEGENC_OUT_PORT];
1184b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_CHECK_PARAM(pInpPortType);
1185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_CHECK_PARAM(pOutPortType);
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( nParamIndex ) {
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImagePortFormat:
1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IMAGE_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_IMAGE_PARAM_PORTFORMATTYPE *)pCompParam;
1191b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMCPY_CHECK(pInpPortType->pPortFormat);
1192b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMCPY_CHECK(pOutPortType->pPortFormat);
1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentParam->nPortIndex == pInpPortType->pPortFormat->nPortIndex )
1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pInpPortType->pPortFormat, pComponentParam, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if ( pComponentParam->nPortIndex == pOutPortType->pPortFormat->nPortIndex ) {
1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pOutPortType->pPortFormat, pComponentParam, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             eError = OMX_ErrorBadPortIndex;
1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImageInit:
1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1207eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        OMX_MEMCPY_CHECK(pComponentPrivate->pPortParamType);
1208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pComponentPrivate->pPortParamType, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE));
1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_PORTDEFINITIONTYPE* pComponentParam = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
1214b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMCPY_CHECK(pInpPortType->pPortDef);
1215b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_MEMCPY_CHECK(pOutPortType->pPortDef);
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pComponentParam->nPortIndex == pInpPortType->pPortDef->nPortIndex ) {
1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pInpPortType->pPortDef, pComponentParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if ( pComponentParam->nPortIndex == pOutPortType->pPortDef->nPortIndex ) {
1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pOutPortType->pPortDef, pComponentParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1229eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        OMX_MEMCPY_CHECK(pComponentPrivate->pPriorityMgmt);
1230b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pComponentPrivate->pPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamQFactor:
1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1235eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        OMX_MEMCPY_CHECK(pComponentPrivate->pQualityfactor);
1236b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pComponentPrivate->pQualityfactor, (OMX_IMAGE_PARAM_QFACTORTYPE*)pCompParam, sizeof(OMX_IMAGE_PARAM_QFACTORTYPE));
1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)pCompParam;
1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pBuffSupplierParam->nPortIndex == 1 /*pOutPortType->pBuffSupplierParam->nPortIndex */) {
1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Copy parameters to input port buffer supplier type */
1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pOutPortType->pBufSupplier = pBuffSupplierParam->eBufferSupplier;
1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if ( pBuffSupplierParam->nPortIndex == 0 /* pInpPortType->pBuffSupplierParam->nPortIndex */ ) {
1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pInpPortType->pBufSupplier = pBuffSupplierParam->eBufferSupplier;
1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pCompParam) {
1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&(pComponentPrivate->componentRole), (void *)pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else {
1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   case OMX_IndexParamQuantizationTable:
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *pQuantTable = (OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE *)pCompParam;
1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pQuantTable->eQuantizationTable == OMX_IMAGE_QuantizationTableLuma) {
1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCustomLumaQuantTable, pQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bSetLumaQuantizationTable = OMX_TRUE;
1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = SetJpegEncInParams(pComponentPrivate);
1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pQuantTable->eQuantizationTable == OMX_IMAGE_QuantizationTableChroma) {
1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCustomChromaQuantTable, pQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bSetChromaQuantizationTable = OMX_TRUE;
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = SetJpegEncInParams(pComponentPrivate);
1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else { /* wrong eQuantizationTable, return error */
1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           eError = OMX_ErrorBadParameter;
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   case OMX_IndexCustomHuffmanTable:
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        JPEGENC_CUSTOM_HUFFMANTTABLETYPE *pHuffmanTable = (JPEGENC_CUSTOM_HUFFMANTTABLETYPE *)pCompParam;
1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pHuffmanTable->nPortIndex == pOutPortType->pPortDef->nPortIndex) {
1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pHuffmanTable, pHuffmanTable, sizeof(JPEGENC_CUSTOM_HUFFMANTTABLETYPE));
1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bSetHuffmanTable = OMX_TRUE;
1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = SetJpegEncInParams(pComponentPrivate);
1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        } else { /* wrong nPortIndex, return error */
1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           eError = OMX_ErrorBadPortIndex;
1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;  default:
1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    EXIT:
1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_GetConfig() Gets Configuration from the Component
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update component config structure .(NOT IMPLEMENTED)
1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nConfigIndex   Component Config Index Port
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ComponentConfigStructure Component Config Structure
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_GetConfig (OMX_HANDLETYPE hComp,
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_INDEXTYPE nConfigIndex,
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_PTR ComponentConfigStructure)
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE*)hComp;
1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComp);
1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = pHandle->pComponentPrivate;
1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside JPEGENC_GetConfig function\n");
1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( nConfigIndex ) {
1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDebug:
1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	break;
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_SetConfig() Gets Configuration structure to the component.
1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * the application.
1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComp         handle for this instance of the component
1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_SetConfig (OMX_HANDLETYPE hComp,
1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_INDEXTYPE nConfigIndex,
1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_PTR ComponentConfigStructure)
1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE      eError   = OMX_ErrorNone;
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle  = NULL;
1366b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComp);
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComp;
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch ( nConfigIndex ) {
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomCommentFlag :
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *nComment = (int*)ComponentConfigStructure;
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( nComment == NULL ) {
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        ((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->nCommentFlag = *nComment;
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	case OMX_IndexCustomAPP0:
1388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
1389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			JPEG_APPTHUMB_MARKER *pMarkerInfo = (JPEG_APPTHUMB_MARKER *) ComponentConfigStructure;
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->sAPP0.pMarkerBuffer != NULL) {
1392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin					OMX_FREE(pComponentPrivate->sAPP0.pMarkerBuffer);
1393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy (&pComponentPrivate->sAPP0, pMarkerInfo, sizeof(JPEG_APPTHUMB_MARKER));
1396b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_MEMCPY_CHECK(&pComponentPrivate->sAPP0);
1397b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pMarkerInfo->pMarkerBuffer != NULL) {
1398b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MALLOC(pComponentPrivate->sAPP0.pMarkerBuffer, pMarkerInfo->nMarkerSize);
1399b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				memcpy (pComponentPrivate->sAPP0.pMarkerBuffer, pMarkerInfo->pMarkerBuffer, pMarkerInfo->nMarkerSize);
1400b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MEMCPY_CHECK(pComponentPrivate->sAPP0.pMarkerBuffer);
1401b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1403b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = SetJpegEncInParams(pComponentPrivate);
1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1405b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1406b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1407b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	case OMX_IndexCustomAPP1:
1408b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
1409b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			JPEG_APPTHUMB_MARKER *pMarkerInfo = (JPEG_APPTHUMB_MARKER *) ComponentConfigStructure;
1410b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1411b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->sAPP1.pMarkerBuffer != NULL) {
1412b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_FREE(pComponentPrivate->sAPP1.pMarkerBuffer);
1413b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1414b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1415b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy (&pComponentPrivate->sAPP1, pMarkerInfo, sizeof(JPEG_APPTHUMB_MARKER));
1416b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_MEMCPY_CHECK(&pComponentPrivate->sAPP1);
1417b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pMarkerInfo->pMarkerBuffer != NULL) {
1418b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MALLOC(pComponentPrivate->sAPP1.pMarkerBuffer, pMarkerInfo->nMarkerSize);
1419b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				memcpy (pComponentPrivate->sAPP1.pMarkerBuffer, pMarkerInfo->pMarkerBuffer, pMarkerInfo->nMarkerSize);
1420b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MEMCPY_CHECK(pComponentPrivate->sAPP1.pMarkerBuffer);
1421b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1422b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1423b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = SetJpegEncInParams(pComponentPrivate);
1424b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1425b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1426b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1427b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	case OMX_IndexCustomAPP5:
1428b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
1429b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			JPEG_APPTHUMB_MARKER *pMarkerInfo = (JPEG_APPTHUMB_MARKER *) ComponentConfigStructure;
1430b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1431b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->sAPP5.pMarkerBuffer != NULL) {
1432b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_FREE(pComponentPrivate->sAPP5.pMarkerBuffer);
1433b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1434b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1435b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy (&pComponentPrivate->sAPP5, pMarkerInfo, sizeof(JPEG_APPTHUMB_MARKER));
1436b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_MEMCPY_CHECK(&pComponentPrivate->sAPP5);
1437b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pMarkerInfo->pMarkerBuffer != NULL) {
1438b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MALLOC(pComponentPrivate->sAPP5.pMarkerBuffer, pMarkerInfo->nMarkerSize);
1439b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				memcpy (pComponentPrivate->sAPP5.pMarkerBuffer, pMarkerInfo->pMarkerBuffer, pMarkerInfo->nMarkerSize);
1440b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MEMCPY_CHECK(pComponentPrivate->sAPP5.pMarkerBuffer);
1441b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1442b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = SetJpegEncInParams(pComponentPrivate);
1443b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1444b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1445b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1446b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	case OMX_IndexCustomAPP13:
1447b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		{
1448b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			JPEG_APP13_MARKER *pMarkerInfo = (JPEG_APP13_MARKER *) ComponentConfigStructure;
1449b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pComponentPrivate->sAPP13.pMarkerBuffer != NULL) {
1450b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_FREE(pComponentPrivate->sAPP13.pMarkerBuffer);
1451b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1452b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1453b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			memcpy (&pComponentPrivate->sAPP13, pMarkerInfo, sizeof(JPEG_APP13_MARKER));
1454b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			OMX_MEMCPY_CHECK(&pComponentPrivate->sAPP13);
1455b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			if (pMarkerInfo->pMarkerBuffer != NULL) {
1456b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MALLOC(pComponentPrivate->sAPP13.pMarkerBuffer, pMarkerInfo->nMarkerSize);
1457b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				memcpy (pComponentPrivate->sAPP13.pMarkerBuffer, pMarkerInfo->pMarkerBuffer, pMarkerInfo->nMarkerSize);
1458b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin				OMX_MEMCPY_CHECK(pComponentPrivate->sAPP13.pMarkerBuffer);
1459b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			}
1460b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1461b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			eError = SetJpegEncInParams(pComponentPrivate);
1462b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin			break;
1463b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		}
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDRI:
1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nDRI_Interval = *(OMX_U8 *)ComponentConfigStructure;
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1468b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomCommentString :
1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pString_Comment == NULL){
1472b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_MALLOC(((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pString_Comment , 256);
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strncpy((char *)((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pString_Comment, (char *)ComponentConfigStructure, 255);
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = SetJpegEncInParams(pComponentPrivate);
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomInputFrameWidth:
1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *nWidth= (int*)ComponentConfigStructure;
1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDefIn = ((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pCompPort[JPEGENC_INP_PORT]->pPortDef;
1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "INIT nFrameHeight = %d\n", (int)(pPortDefIn->format.image.nFrameHeight));
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "INIT nFrameWidth = %d\n", (int)(pPortDefIn->format.image.nFrameWidth));
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDefIn->format.image.nFrameWidth = *nWidth;
1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "nFrameWidth = %d\n", (int)(pPortDefIn->format.image.nFrameWidth));
1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = SendDynamicParam(pComponentPrivate);
1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone ) {
1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomInputFrameHeight:
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL;
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *nHeight = (int*)ComponentConfigStructure;
1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDefIn = ((JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pCompPort[JPEGENC_INP_PORT]->pPortDef;
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDefIn->format.image.nFrameHeight = *nHeight;
1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, "nFrameHeight = %d\n", (int)(pPortDefIn->format.image.nFrameHeight));
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = SendDynamicParam(pComponentPrivate);
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone ) {
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomQFactor:
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1516eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        OMX_MEMCPY_CHECK(pComponentPrivate->pQualityfactor);
1517b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pComponentPrivate->pQualityfactor, (OMX_IMAGE_PARAM_QFACTORTYPE*)ComponentConfigStructure, sizeof(OMX_IMAGE_PARAM_QFACTORTYPE));
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexConfigCommonInputCrop :
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONFIG_RECTTYPE *crop = (OMX_CONFIG_RECTTYPE*)ComponentConfigStructure;
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((crop->nTop != 0) || (crop->nLeft != 0))
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else{
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCrop->nWidth = crop->nWidth;
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCrop->nHeight = crop->nHeight;
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDebug:
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	break;
1536b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1537b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	case OMX_IndexCustomColorFormatConvertion_420pTo422i :
1538b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	{
1539b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		pComponentPrivate->bConvert420pTo422i = *((OMX_BOOL*)ComponentConfigStructure);
1540b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		break;
1541b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
1542b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1543b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	 case OMX_IndexCustomPPLibEnable :
1544b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	{
1545b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef __JPEG_OMX_PPLIB_ENABLED__
1546b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		pComponentPrivate->bPPLibEnable = *((OMX_BOOL*)ComponentConfigStructure);
1547b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#endif
1548b65f253fdc60f6208a54911bee793d225f23cdf8James Dong		break;
1549b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	}
1550b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nCurState == OMX_StateExecuting || pComponentPrivate->nCurState == OMX_StatePause) {
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = SendDynamicParam(pComponentPrivate);
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (eError != OMX_ErrorNone ) {
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                goto EXIT;
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1564eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "Inside JPEGENC_SetConfig function\n");
1565b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_GetState() Gets OMX Component State
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will return OMX Component State
1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent   handle for this instance of the component
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pState       State type
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1584644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wongstatic OMX_ERRORTYPE JPEGENC_GetState (OMX_HANDLETYPE hComponent, OMX_STATETYPE* pState)
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1586644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    OMX_ERRORTYPE eError                        = OMX_ErrorNone;
1587644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    OMX_COMPONENTTYPE* pHandle = NULL;
1588644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    JPEGENC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
1589644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    struct timespec abs_time = {0,0};
1590644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    int nPendingStateChangeRequests = 0;
1591644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    int ret = 0;
1592644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    /* Set to sufficiently high value */
1593b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    int mutex_timeout = 3;
1594644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong
1595644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if(hComponent == NULL || pState == NULL) {
1596644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        return OMX_ErrorBadParameter;
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1599b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1600644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    pHandle = (OMX_COMPONENTTYPE*)hComponent;
1601644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1602b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1603644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    /* Retrieve current state */
1604644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    if (pHandle && pHandle->pComponentPrivate) {
1605b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        /* Check for any pending state transition requests */
1606644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        if(pthread_mutex_lock(&pComponentPrivate->mutexStateChangeRequest)) {
1607644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            return OMX_ErrorUndefined;
1608644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        }
1609644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        nPendingStateChangeRequests = pComponentPrivate->nPendingStateChangeRequests;
1610644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        if(!nPendingStateChangeRequests) {
1611644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
1612b65f253fdc60f6208a54911bee793d225f23cdf8James Dong               return OMX_ErrorUndefined;
1613644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           }
1614b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
1615644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           /* No pending state transitions */
1616644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong	   *pState = ((JPEGENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->nCurState;
1617644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong            eError = OMX_ErrorNone;
1618644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        }
1619644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        else {
1620b65f253fdc60f6208a54911bee793d225f23cdf8James Dong       	   /* Wait for component to complete state transition */
1621644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           clock_gettime(CLOCK_REALTIME, &abs_time);
1622b65f253fdc60f6208a54911bee793d225f23cdf8James Dong           abs_time.tv_sec += mutex_timeout;
1623644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           abs_time.tv_nsec = 0;
1624b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	   ret = pthread_cond_timedwait(&(pComponentPrivate->StateChangeCondition), &(pComponentPrivate->mutexStateChangeRequest), &abs_time);
1625644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           if (!ret) {
1626644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              /* Component has completed state transitions*/
1627644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              *pState = ((JPEGENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->nCurState;
1628644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              if(pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest)) {
1629b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                 return OMX_ErrorUndefined;
1630644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              }
1631644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              eError = OMX_ErrorNone;
1632644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           }
1633644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           else if(ret == ETIMEDOUT) {
1634644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              /* Unlock mutex in case of timeout */
1635644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong              pthread_mutex_unlock(&pComponentPrivate->mutexStateChangeRequest);
1636b65f253fdc60f6208a54911bee793d225f23cdf8James Dong              return OMX_ErrorTimeout;
1637644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong           }
1638644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        }
1639644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong     }
1640644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong     else {
1641644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        eError = OMX_ErrorInvalidComponent;
1642644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        *pState = OMX_StateInvalid;
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1644644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong    return eError;
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_EmptyThisBuffer() Send Input Buffers
1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * The application uses this macro to send the input buffers filled with data to the input port of the component
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent    handle for this instance of the component
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nPortIndex    PortIndex
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pBuffHead     Pointer to data filled
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *     OMX_ErrorInvalidState    Called in a invalid state
1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *     OMX_ErrorHardware        Error in Writing to the Data pipe
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_EmptyThisBuffer (OMX_HANDLETYPE pComponent,
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_BUFFERHEADERTYPE* pBuffHead)
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE              eError            = OMX_ErrorNone;
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE         *pHandle           = NULL;
1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1670b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    JPEGENC_BUFFER_PRIVATE    *pBuffPrivate = NULL;
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE             hTunnelComponent;
1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int ret;
1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
1676b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_CHECK_PARAM(pBuffHead);
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "inside JPEGENC_EmptyThisBuffer\n");
1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    hTunnelComponent = pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent;
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pInputPortPrivate;
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState != OMX_StateExecuting &&
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StatePause &&
1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StateIdle) {
1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pBuffHead == NULL ) {
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pBuffHead->nSize != sizeof(OMX_BUFFERHEADERTYPE) ) {
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, "JPEG-ENC: buffer header size is not correct\n");
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->bEnabled) {
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( (pBuffHead->nVersion.s.nVersionMajor != 0x1) ||
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nVersionMinor != 0x0) ||
1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nRevision != 0x0) ||
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nStep != 0x0) ) {
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorVersionMismatch;
1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nInputPortIndex != 0x0) {
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERF,
1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead->pBuffer,
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead->nFilledLen,
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleHLMM);
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nAllocLen = %lu\n", pBuffHead->nAllocLen);
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen = %lu\n", pBuffHead->nFilledLen);
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nInPortIn ++;
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "EmptyThisBuffer nInPortIn %lu\n", pComponentPrivate->nInPortIn);
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nFlags == OMX_BUFFERFLAG_EOS) {
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "END OF STREAM DETECTED\n");
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nFlags = OMX_BUFFERFLAG_EOS;
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         /* pBuffHead->nFlags = 0; */
1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "record EOS flag on buffer ID %lu\n", pComponentPrivate->nInPortIn);
1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for (i = 0; i < (int)(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual); i ++) {
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->sBufferFlagTrack[i].buffer_id == 0xFFFFFFFF)
1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 OMX_PRBUFFER2(pComponentPrivate->dbg, "record buffer id in array %d\n", i);
1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->sBufferFlagTrack[i].flag = pBuffHead->nFlags;
1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->sBufferFlagTrack[i].buffer_id =
1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pComponentPrivate->nInPortIn;
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 break;
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             }
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /* mark the first buffer from input port after receiving mark buffer command */
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if (pComponentPrivate->nMarkPort == JPEGENC_INP_PORT) {
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         if (pComponentPrivate->pMarkData) {
1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               OMX_PRBUFFER2(pComponentPrivate->dbg, "get mark buffer command, mark buffer %p\n", pBuffHead);
1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pBuffHead->pMarkData = pComponentPrivate->pMarkData;
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pBuffHead->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pComponentPrivate->pMarkData = NULL;
1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin               pComponentPrivate->hMarkTargetComponent = NULL;
1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /* if a buffer from input port is marked, record this port # in the buffer queue */
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if (pBuffHead->pMarkData) {
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	     for (i = 0; i < (int)(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->nBufferCountActual); i ++) {
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->sBufferMarkTrack[i].buffer_id == 0xFFFFFFFF)
1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             {
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 JPEGENC_BUFFERMARK_TRACK *pMarkTrack;
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pMarkTrack = &(pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->sBufferMarkTrack[i]);
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pMarkTrack->buffer_id = pComponentPrivate->nInPortIn;
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pMarkTrack->pMarkData = pBuffHead->pMarkData;
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 pMarkTrack->hMarkTargetComponent = pBuffHead->hMarkTargetComponent;
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 OMX_PRBUFFER2(pComponentPrivate->dbg, "mark buffer at ID %lu\n", pComponentPrivate->nInPortIn);
1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                 break;
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             }
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = SendDynamicParam(pComponentPrivate);
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone ) {
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JOMX_PRDSP4(pComponentPrivate->dbg, "SETSTATUS failed...  %x\n", eError);
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_COMPONENT_IN;
1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pBuffPrivate->bReadFromPipe = OMX_FALSE;
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (get filled input buffer) %lu %lu %lu %lu (%p)\n",
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut, pBuffHead);
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /*Writing the component buffer corresponding to input buffer to infill_q  */
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     OMX_PRCOMM2(pComponentPrivate->dbg, "EmptyThisBuffer: write to the queue %p \n", pBuffHead);
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     ret = write (pComponentPrivate->filled_inpBuf_Q[1], &(pBuffHead),sizeof(pBuffHead));
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if ( ret == -1 ) {
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         OMX_PRCOMM4(pComponentPrivate->dbg, "Error in Writing to the Data pipe\n");
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         eError = OMX_ErrorHardware;
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         goto EXIT;
1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_FillThisBuffer() Empty an output Buffer
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * The component uses this to request the application to
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * empty an output buffer which contains the decoded data..
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pComponent         handle for this instance of the component
1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallBacks    application callbacks
1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param ptr
1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_FillThisBuffer (OMX_HANDLETYPE pComponent,
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffHead)
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError        = OMX_ErrorNone;
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int err = 0;
1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_BUFFER_PRIVATE* pBuffPrivate = NULL;
1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pBuffHead);
1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pOutputPortPrivate;
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Inside JPEGENC_FillThisBuffer function (%p) (state %d -> %d)\n", pBuffHead, pComponentPrivate->nCurState, pComponentPrivate->nToState);
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState != OMX_StateExecuting &&
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StatePause &&
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StateIdle) {
1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pBuffHead->nSize != sizeof(OMX_BUFFERHEADERTYPE) ) {
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, "JPEG-ENC: buffer header size is not correct\n");
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pPortDef->bEnabled) {
1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorIncorrectStateOperation;
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( (pBuffHead->nVersion.s.nVersionMajor != 0x1) ||
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nVersionMinor != 0x0) ||
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nRevision != 0x0) ||
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         (pBuffHead->nVersion.s.nStep != 0x0) ) {
1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorVersionMismatch;
1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nOutputPortIndex != 0x1) {
1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffHead->nFilledLen = 0;
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERF,
1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBuffHead->pBuffer,
1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           0,
1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleHLMM);
1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGENC_BUFFER_COMPONENT_IN;
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->bReadFromPipe = OMX_FALSE;
1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutPortIn ++;
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "FillThisBuffer nOutPortIn %lu\n", pComponentPrivate->nOutPortIn);
1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (get empty output buffer) %lu %lu %lu %lu\n",
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortIn,
1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nInPortOut,
1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortIn,
1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pComponentPrivate->nOutPortOut);
1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*  writing the component structure corresponding to output buffer    */
1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "FillThisBuffer: write to the queue %p \n", pBuffHead);
1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    err = write (pComponentPrivate->free_outBuf_Q[1], &(pBuffHead), sizeof (pBuffHead));
1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (err == -1) {
1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Error is %x\n",eError);
1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EXIT:
1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * OMX_ComponentDeinit() Deinitialize Component
1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will clean all resources in the component (NOT IMPLEMENTED)
1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pHandle        handle for this instance of the component
1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_ComponentDeInit(OMX_HANDLETYPE hComponent)
1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_ERRORTYPE eError        = OMX_ErrorNone;
1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_COMPONENTTYPE *pHandle  = NULL;
1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	struct OMX_TI_Debug dbg;
1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_INIT_BASE(dbg);
1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_CHECK_PARAM(hComponent);
1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	pHandle = (OMX_COMPONENTTYPE *)hComponent;
1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	memcpy(&dbg, &(pComponentPrivate->dbg), sizeof(dbg));
1934644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        pthread_mutex_destroy(&pComponentPrivate->mutexStateChangeRequest);
1935644f5ad9b052d954c568285458ee5cad6aec20c1Benny Wong        pthread_cond_destroy(&pComponentPrivate->StateChangeCondition);
1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	JPEGEnc_Free_ComponentResources(pComponentPrivate);
1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = RMProxy_NewSendCommand(pHandle,  RMProxy_FreeResource, OMX_JPEG_Encoder_COMPONENT, 0, 3456, NULL);
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if (eError != OMX_ErrorNone) {
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		OMX_PRMGR4(dbg, "Cannot Free RMProxy Resources\n");
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	}
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = RMProxy_DeinitalizeEx(OMX_COMPONENTTYPE_IMAGE);
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if ( eError != OMX_ErrorNone )  {
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		OMX_PRMGR4(dbg, "Error returned from destroy ResourceManagerProxy thread\n");
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	}
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1952b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#if 0
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	PERF_Boundary(pComponentPrivate->pPERF,
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		      PERF_BoundaryComplete | PERF_BoundaryCleanup);
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	PERF_Done(pComponentPrivate->pPERF);
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1958b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_DBG_CLOSE(dbg);
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	return eError;
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_VerifyTunnelConnection()
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* TODO: Component Name */
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGENC_VerifyTunnelConnection (JPEG_PORT_TYPE *pPort,
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_HANDLETYPE hTunneledComp,
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_PARAM_PORTDEFINITIONTYPE* pPortDef,
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              struct OMX_TI_Debug *dbg)
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_PARAM_PORTDEFINITIONTYPE sPortDef;
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_ERRORTYPE eError = OMX_ErrorNone;
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   /*sPortDef.format.image.eCompressionFormat = OMX_IMAGE_CodingJPEG;*/
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_PRINT1(*dbg, "Inside JPEG JPEGENC_VerifyTunnelConnection..\n");
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   sPortDef.nVersion.s.nVersionMajor = 0x1;
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   sPortDef.nVersion.s.nVersionMinor = 0x0;
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   sPortDef.nPortIndex = pPort->nTunnelPort;
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   eError = OMX_GetParameter(hTunneledComp, OMX_IndexParamPortDefinition, &sPortDef);
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   if (eError != OMX_ErrorNone) {
1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_ERROR4(*dbg, "error 1\n");
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       return eError;
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   }
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   switch(pPort->pPortDef->eDomain) {
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       case OMX_PortDomainOther:
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin           if (sPortDef.format.other.eFormat!= pPortDef->format.other.eFormat) {
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->hTunnelComponent = 0;
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->nTunnelPort      = 0;
2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorPortsNotCompatible;
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_PortDomainAudio:
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (sPortDef.format.audio.eEncoding != pPortDef->format.audio.eEncoding) {
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->hTunnelComponent = 0;
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->nTunnelPort      = 0;
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorPortsNotCompatible;
2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_PortDomainVideo:
2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (sPortDef.format.video.eCompressionFormat != pPortDef->format.video.eCompressionFormat) {
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->hTunnelComponent = 0;
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->nTunnelPort      = 0;
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorPortsNotCompatible;
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_PortDomainImage:
2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (sPortDef.format.image.eCompressionFormat != pPortDef->format.image.eCompressionFormat) {
2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->hTunnelComponent = 0;
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->nTunnelPort      = 0;
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorPortsNotCompatible;
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->nTunnelPort      = 0;
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible; /* Our current port is not set up correctly */
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   }
2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_ComponentTunnelRequest() Sets application callbacks to the component
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * This method will update application callbacks
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * the application.
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hComp         handle for this instance of the component
2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nPortInput
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param hTunneledComp
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param nTunneledPort
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param eDir
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param pCallbacks
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE JPEGENC_ComponentTunnelRequest (OMX_HANDLETYPE hComp,
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nPortInput,
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_HANDLETYPE hTunneledComp,
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_U32 nTunneledPort,
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_DIRTYPE eDir,
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_CALLBACKTYPE* pCallbacks)
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin-------------------------------------------------------------------*/
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGENC_ComponentTunnelRequest(OMX_IN  OMX_HANDLETYPE hComponent,
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN  OMX_U32 nPort,
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN  OMX_HANDLETYPE hTunneledComp,
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_IN  OMX_U32 nTunneledPort,
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup)
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError            = OMX_ErrorNone;
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle  = NULL;
2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE *pPortType           = NULL;
2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortType = pComponentPrivate->pCompPort[nPort];
2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "nPort = %d nTunneledPort = %d\n",(int)nPort, (int)nTunneledPort);
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pTunnelSetup == NULL || hTunneledComp == 0)
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* cancel previous tunnel */
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->hTunnelComponent = 0;
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->nTunnelPort = 0;
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->pBufSupplier = OMX_BufferSupplyUnspecified;
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->eDir != OMX_DirInput &&
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef->eDir != OMX_DirOutput) {
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        return OMX_ErrorBadParameter;
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /* Check if the other component is developed by TI */
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if(IsTIOMXComponent(hTunneledComp) != OMX_TRUE)
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       eError = OMX_ErrorTunnelingUnsupported;
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       goto EXIT;
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortType->hTunnelComponent = hTunneledComp;
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortType->nTunnelPort = nTunneledPort;
2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRCOMM2(pComponentPrivate->dbg, "PP comp = %x, tunneled comp = %x\n",(int)hComponent, (int)pPortType->hTunnelComponent);
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pPortType->pPortDef->eDir == OMX_DirOutput) {
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* Component is the output (source of data) */
2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTunnelSetup->eSupplier = pPortType->pBufSupplier;
2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*      Component is the input (sink of data) */
2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = JPEGENC_VerifyTunnelConnection(pPortType,
2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               hTunneledComp,
2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin						pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pPortDef, &(pComponentPrivate->dbg));
2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (OMX_ErrorNone != eError) {
2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM4(pComponentPrivate->dbg, "PP JPEGENC_VerifyTunnelConnection inside JPEGfailed\n");
2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Invalid connection formats. Return eError */
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* If specified obey output port's preferences. Otherwise choose output */
2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->pBufSupplier = pTunnelSetup->eSupplier;
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (OMX_BufferSupplyUnspecified == pPortType->pBufSupplier) {
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortType->pBufSupplier = pTunnelSetup->eSupplier = OMX_BufferSupplyOutput;
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* Tell the output port who the supplier is */
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sBufferSupplier.nSize = sizeof(sBufferSupplier);
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sBufferSupplier.nVersion.s.nVersionMajor = 0x1;
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sBufferSupplier.nVersion.s.nVersionMinor = 0x0;
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sBufferSupplier.nPortIndex = nTunneledPort;
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        sBufferSupplier.eBufferSupplier = pPortType->pBufSupplier;
2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_SetParameter(hTunneledComp, OMX_IndexParamCompBufferSupplier, &sBufferSupplier);
2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_GetParameter(hTunneledComp, OMX_IndexParamCompBufferSupplier, &sBufferSupplier);
2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sBufferSupplier.eBufferSupplier != pPortType->pBufSupplier) {
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRCOMM4(pComponentPrivate->dbg, "- JPEGENC_SetParameter: OMX_IndexParamCompBufferSupplier failed to change setting\n" );
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorUndefined;
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *  JPEGENC_AllocateBuffer()
2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @param
2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGENC_AllocateBuffer(OMX_IN OMX_HANDLETYPE hComponent,
2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffHead,
2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_U32 nPortIndex,
2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_PTR pAppPrivate,
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                             OMX_IN OMX_U32 nSizeBytes)
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE            *pHandle           = NULL;
2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE    *pComponentPrivate = NULL;
2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDef          = NULL;
2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_BUFFERHEADERTYPE         *pBufferHdr        = NULL;
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nBufferCount = -1;
2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8* pTemp = NULL;
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle           = (OMX_COMPONENTTYPE *) hComponent;
2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef          = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount      = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nBufferCount >= pPortDef->nBufferCountActual) {
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, " try to allocate more buffers that the port supports\n");
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nPortIndex == JPEGENC_INP_PORT) {
2195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "Allocate Buffer Input pBufferPrivate = %p\n",pBufferHdr);
2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pBufferHdr, OMX_BUFFERHEADERTYPE);
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nOutputPortIndex = OMX_NOPORT;
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nInputPortIndex = nPortIndex;
2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nVersion = pPortDef->nVersion;
2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->pAppPrivate = pAppPrivate;
2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nAllocLen = nSizeBytes;
2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[nBufferCount]->bAllocByComponent = OMX_TRUE;
2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr = pBufferHdr;
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBuffHead = pBufferHdr;
2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if(nPortIndex == JPEGENC_OUT_PORT) {
2210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "Allocate Buffer Output pBufferPrivate[0] = %p\n", pBufferHdr);
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pBufferHdr, OMX_BUFFERHEADERTYPE);
2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nInputPortIndex = OMX_NOPORT;
2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nOutputPortIndex = nPortIndex;
2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE);
2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nVersion = pPortDef->nVersion;
2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->pAppPrivate = pAppPrivate;
2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->nAllocLen = nSizeBytes;
2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[nBufferCount]->bAllocByComponent = OMX_TRUE;
2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGENC_OUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr = pBufferHdr;
2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBuffHead = pBufferHdr;
2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pBufferHdr->pBuffer, nSizeBytes+256);
2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERF,
2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBufferHdr->pBuffer,
2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pBufferHdr->nFilledLen,
2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleMemory);
2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pBufferHdr->pBuffer) {
2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_TRACE4(pComponentPrivate->dbg, "Error: Malloc failed\n");
2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp = (OMX_U8 *)(pBufferHdr->pBuffer);
2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp += 128;
2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBufferHdr->pBuffer = pTemp;
2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "Allocate Buffer Input pBufferPrivate[0]-pBuffer = %p\n",pBufferHdr->pBuffer);
2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGENC_INP_PORT) {
2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->pInputPortPrivate  = pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBufferHdr->pOutputPortPrivate = pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /** The following 6 lines need to be changed **/
2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[JPEGENC_INP_PORT]->hTunnelComponent != NULL) {
2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGENC_BUFFER_TUNNEL_COMPONENT;
2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGENC_BUFFER_CLIENT;
2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   pComponentPrivate->pCompPort[nPortIndex]->nBuffCount++;
2267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG-ENC: actual %d ask %lu\n",
2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->nBuffCount,
2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDef->nBufferCountActual);
2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   if (pComponentPrivate->pCompPort[nPortIndex]->nBuffCount == pPortDef->nBufferCountActual) {
2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pPortDef->bPopulated = OMX_TRUE;
2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pthread_mutex_lock(&pComponentPrivate->jpege_mutex_app);
2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pthread_cond_signal(&pComponentPrivate->populate_cond);
2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       pthread_mutex_unlock(&pComponentPrivate->jpege_mutex_app);
2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       JPEGENC_InitBufferFlagTrack(pComponentPrivate, nPortIndex);
2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       OMX_PRBUFFER2(pComponentPrivate->dbg, " Port [%d] Populated!\n", (int)(nPortIndex));
2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   }
2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Exiting pHandle = %d\n", (int)pHandle);
2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void JPEGENC_InitBufferFlagTrack(
2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate,
2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nPortIndex)
2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEG_PORT_TYPE *pPortType = NULL;
2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortType = pComponentPrivate->pCompPort[nPortIndex];
2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* assume  pPortType->pPortDef->nBufferCountActual <= NUM_OF_BUFFERSJPEG */
2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0; i < (int)(pPortType->pPortDef->nBufferCountActual); i ++) {
2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferFlagTrack[i].flag = 0;
2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferFlagTrack[i].buffer_id = 0xFFFFFFFF;
2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferMarkTrack[i].buffer_id = 0xFFFFFFFF;
2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferMarkTrack[i].pMarkData = NULL;
2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
2308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(
2310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IN OMX_HANDLETYPE hComponent,
2311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_OUT OMX_U8 *cRole,
2312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_IN OMX_U32 nIndex)
2313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_COMPONENT_PRIVATE *pComponentPrivate;
2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nIndex == 0){
2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      /* memcpy(cRole, &(pComponentPrivate->componentRole.cRole), sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE - 1); */
2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      strncpy((char *)cRole, (char *)pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE - 1);
2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin      eError = OMX_ErrorNoMore;
2325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin};
2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2334b65f253fdc60f6208a54911bee793d225f23cdf8James Dong  * JPEGENC_GetExtensionIndex()
2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Return the index corresponding to the string.
2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorNone                    Successful operation.
2339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *             OMX_ErrorUnsupportedIndex  If no index corresponding to the string is found
2340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
2341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE JPEGENC_GetExtensionIndex(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE* pIndexType)
2343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2344b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U16 nIndex;
2345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
2346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGENC_CUSTOM_PARAM_DEFINITION sJpegEncCustomParams[] = {
2347b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.HuffmanTable", OMX_IndexCustomHuffmanTable},
2348b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.CommentFlag", OMX_IndexCustomCommentFlag},
2349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.CommentString", OMX_IndexCustomCommentString},
2350b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.InputFrameWidth", OMX_IndexCustomInputFrameWidth},
2351b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.InputFrameHeight", OMX_IndexCustomInputFrameHeight},
2352b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.APP0", OMX_IndexCustomAPP0},
2353b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.APP1", OMX_IndexCustomAPP1},
2354b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.APP5", OMX_IndexCustomAPP5},
2355b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.APP13", OMX_IndexCustomAPP13},
2356b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.QFactor", OMX_IndexCustomQFactor},
2357b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.DRI", OMX_IndexCustomDRI},
2358b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.Debug", OMX_IndexCustomDebug},
2359b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.ColorFormatConvertion_420pTo422i", OMX_IndexCustomColorFormatConvertion_420pTo422i},
2360b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.encoder.Config.PPLibEnable", OMX_IndexCustomPPLibEnable},
2361b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"",0x0}
2362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    };
2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2364b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* Check parameter validity */
2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
2366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pIndexType);
2367b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    *pIndexType = OMX_IndexMax;
2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2369604fb0622f3fcce0c8bfe6cb180c189b6f11ec14James Dong    const OMX_U32 nExtensions = sizeof(sJpegEncCustomParams)/sizeof(JPEGENC_CUSTOM_PARAM_DEFINITION);
2370604fb0622f3fcce0c8bfe6cb180c189b6f11ec14James Dong    for (nIndex = 0; nIndex < nExtensions; ++nIndex) {
2371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!strcmp((const char*)cParameterName, (const char*)(&(sJpegEncCustomParams[nIndex].cCustomParamName)))){
2372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            *pIndexType = sJpegEncCustomParams[nIndex].nCustomParamIndex;
2373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorNone;
2374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2378b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if(*pIndexType == OMX_IndexMax){
2379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         eError = OMX_ErrorUnsupportedIndex;
2380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2387b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2388