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_JpegDecoder.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for JPEG decoder
32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @patth $(CSLPATH)\jpeg_dec\src\OMX_JpegDecoder.c
34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.2
36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/
37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/****************************************************************
39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  INCLUDE FILES
40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*****************************************************************/
41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -----------System and Platform Files ------------------------*/
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE
45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <windows.h>
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <oaf_osal.h>
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <omx_core.h>
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <wchar.h>
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <unistd.h>
51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <sys/time.h>
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <sys/types.h>
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <sys/ioctl.h>
54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <sys/select.h>
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <errno.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <pthread.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h>
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -----------------Program Header Files ---------------------------*/
66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegDec_Utils.h"
68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <ResourceManagerProxyAPI.h>
71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------Global-----------------------------------*/
74b65f253fdc60f6208a54911bee793d225f23cdf8James DongOMX_STRING cJPEGdecName = "OMX.TI.JPEG.decoder";
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ---------------------------- Fucntion prototypes -----------------*/
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks_JPEGDec(OMX_HANDLETYPE hComp,
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_CALLBACKTYPE* pCallBacks,
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_PTR pAppData);
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion_JPEGDec(OMX_HANDLETYPE hComp,
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_STRING pComponentName,
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_VERSIONTYPE* pComponentVersion,
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_VERSIONTYPE* pSpecVersion,
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_UUIDTYPE* pComponentUUID);
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand_JPEGDec(OMX_HANDLETYPE hComponent,
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_COMMANDTYPE Cmd,
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_U32 nParam,
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_PTR pCmdData);
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_IN OMX_INDEXTYPE nParamIndex,
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_INOUT OMX_PTR ComponentParameterStructure);
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter_JPEGDec(OMX_HANDLETYPE hComp,
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_INDEXTYPE nParamIndex,
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_PTR ComponentParameterStructure);
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig_JPEGDec(OMX_HANDLETYPE hComp,
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_INDEXTYPE nConfigIndex,
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_PTR ComponentConfigStructure);
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig_JPEGDec(OMX_HANDLETYPE hComp,
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_INDEXTYPE nConfigIndex,
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_PTR ComponentConfigStructure);
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer(OMX_HANDLETYPE hComp,
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffer);
105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer_JPEGDec(OMX_HANDLETYPE hComp,
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_BUFFERHEADERTYPE* pBuffer);
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState(OMX_HANDLETYPE hComp,
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              OMX_STATETYPE* pState);
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest_JPEGDec(OMX_IN OMX_HANDLETYPE hComp,
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_U32 nPort,
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_HANDLETYPE hTunneledComp,
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_U32 nTunneledPort,
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_INOUT  OMX_TUNNELSETUPTYPE* pTunnelSetup);
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U32 nPortIndex,
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_PTR pAppPrivate,
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U32 nSizeBytes,
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U8* pBuffer) ;
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_U32 nPortIndex,
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffer);
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE Allocate_DSPResources_JPEGDec(OMX_IN JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate,
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U32 nPortIndex);
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE VerifyTunnelConnection_JPEGDec(JPEGDEC_PORT_TYPE *pPort,
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_HANDLETYPE hTunneledComp,
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef);
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic  OMX_ERRORTYPE AllocateBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffer,
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_IN OMX_U32 nPortIndex,
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_IN OMX_PTR pAppPrivate,
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             OMX_IN OMX_U32 nSizeBytes);
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void JPEGDEC_InitBufferFlagTrack(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate,
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin										OMX_U32 nPortIndex);
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(OMX_IN OMX_HANDLETYPE hComponent,
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex);
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetExtensionIndex_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_IN OMX_STRING cParameterName,
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_OUT OMX_INDEXTYPE* pIndexType);
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------- Function Implementation ------------------ */
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn AllocateBuffer_JPEGDec - Implements allocatebuffer functionality
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - Component handle.
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead - pointer to buffer header structure
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex - Port index
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppPrivate - pointer to application private data
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nSizeBytes - size of the buffer to allocate
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE AllocateBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_INOUT OMX_BUFFERHEADERTYPE** pBuffHead,
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN OMX_U32 nPortIndex,
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN OMX_PTR pAppPrivate,
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_IN OMX_U32 nSizeBytes)
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*VALIDATE INPUT ARGUMENTS*/
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL;
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_PORT_TYPE* pCompPort;
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nBufferCount = -1;
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
180b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
181b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pCompPort = pComponentPrivate->pCompPort[nPortIndex];
185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering function AllocateBuffer_JPEGDec\n");
187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "In AllocateBuffer_JPEGDec %d %lu %lu\n",
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    nBufferCount, pPortDef->nBufferCountActual, nPortIndex);
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nBufferCount >= pPortDef->nBufferCountActual) {
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInsufficientResources;
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER4(pComponentPrivate->dbg, " try to allocate more buffers that the port supports\n");
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, OMX_BUFFERHEADERTYPE);
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr = %p\n", pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr);
201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nOutputPortIndex = OMX_NOPORT;
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nInputPortIndex = pPortDef->nPortIndex;
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE);
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nVersion = pPortDef->nVersion;
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pAppPrivate = pAppPrivate;
206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nAllocLen = nSizeBytes;
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->bAllocbyComponent = OMX_TRUE;
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pBuffHead = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr;
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == JPEGDEC_OUTPUT_PORT) {
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, OMX_BUFFERHEADERTYPE);
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER1(pComponentPrivate->dbg, "pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBuffCount]->pBufferHdr = %p\n", pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr);
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nOutputPortIndex = pPortDef->nPortIndex;
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nInputPortIndex = OMX_NOPORT;
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nSize = sizeof(OMX_BUFFERHEADERTYPE);
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nVersion = pPortDef->nVersion;
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pAppPrivate = pAppPrivate;
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->nAllocLen = nSizeBytes;
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->bAllocbyComponent = OMX_TRUE;
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pBuffHead = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr;
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorBadPortIndex;
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer, nSizeBytes + 256);
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer = (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer) + 128;
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERF,
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer,
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           nSizeBytes,
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleMemory);
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == JPEGDEC_OUTPUT_PORT) {
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer, nSizeBytes + 256);
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer + 128;
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        PERF_ReceivedFrame(pComponentPrivate->pPERF,
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr->pBuffer,
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           nSizeBytes,
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                           PERF_ModuleMemory);
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorBadPortIndex;
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = Allocate_DSPResources_JPEGDec(pComponentPrivate, nPortIndex);
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone)    {
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRDSP4(pComponentPrivate->dbg, "OMX_ErrorInsufficientResources\n");
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorInsufficientResources;
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->pInputPortPrivate =
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin   }
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->pOutputPortPrivate =
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent != NULL) {
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGDEC_BUFFER_TUNNEL_COMPONENT;
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->eBufferOwner = JPEGDEC_BUFFER_CLIENT;
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[nPortIndex]->nBuffCount++;
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[nPortIndex]->nBuffCount == pPortDef->nBufferCountActual) {
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDef->bPopulated = OMX_TRUE;
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            JPEGDEC_InitBufferFlagTrack(pComponentPrivate, nPortIndex);
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_lock(&(pComponentPrivate->mJpegDecMutex));
290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_cond_signal(&(pComponentPrivate->sPortPopulated_cond));
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pthread_mutex_unlock(&(pComponentPrivate->mJpegDecMutex));
292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRINT2(pComponentPrivate->dbg, " Port [%lu] Populated!\n", nPortIndex);
293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of AllocateBuffer_JPEGDec */
298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn FreeBuffer_JPEGDec - Implements freebuffer functionality
303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - Component handle.
304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex - Port index
305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead - pointer to buffer header structure
306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FreeBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_U32 nPortIndex,
313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_BUFFERHEADERTYPE* pBuffHead)
314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL;
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL;
320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8* pTemp;
321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nBufferCount = -1;
322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pBuffHead);
325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (nPortIndex != 1 && nPortIndex != 0) {
332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    eError = OMX_ErrorBadPortIndex;
333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	    goto PRINT_EXIT;
334b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    }
335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEG-D: Entering funtion FreeBuffer_JPEGDec %lu %p\n", nPortIndex, pBuffHead);
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pComponentPrivate->nCurState == OMX_StateLoaded){
339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	goto PRINT_EXIT;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "Trying to Free Header %p\nBuffer %p\n", pBuffHead, pBuffHead->pBuffer);
345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pInputPortPrivate;
349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffPrivate->pUALGParams) {
350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp = (OMX_U8*)(pBuffPrivate->pUALGParams);
351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp -= 128;
352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (pBuffPrivate->pUALGParams) = (JPEGDEC_UAlgInBufParamStruct *)pTemp;
353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FREE(pBuffPrivate->pUALGParams);
354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->pUALGParams = NULL;
355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == JPEGDEC_OUTPUT_PORT) {
358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate = pBuffHead->pOutputPortPrivate;
360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffPrivate->pUALGParams) {
361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp = (OMX_U8*)(pBuffPrivate->pUALGParams);
362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTemp -= 128;
363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (pBuffPrivate->pUALGParams) = (JPEGDEC_UAlgOutBufParamStruct *)pTemp;
364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FREE(pBuffPrivate->pUALGParams);
365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffPrivate->pUALGParams = NULL;
366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
370b65f253fdc60f6208a54911bee793d225f23cdf8James Dong	goto PRINT_EXIT;
371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffPrivate->bAllocbyComponent == OMX_TRUE) {
374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffHead->pBuffer) {
375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            PERF_SendingFrame(pComponentPrivate->pPERF,
378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pBuffHead->pBuffer,
379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              pBuffHead->nFilledLen,
380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              PERF_ModuleMemory);
381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "INTERNAL BUFFER USED , trying to free it.\n");
384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead->pBuffer -= 128;
385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            OMX_FREE(pBuffHead->pBuffer);
386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead->pBuffer = NULL;
387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead) {
391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREE(pBuffHead);
392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffHead = NULL;
393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRSTATE2(pComponentPrivate->dbg, "Current state is %d and To State is %d\n", pComponentPrivate->nCurState, pComponentPrivate->nToState);
397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( pPortDef->bEnabled &&
398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            ((pComponentPrivate->nCurState == OMX_StateIdle && pComponentPrivate->nToState != OMX_StateLoaded) ||
399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (pComponentPrivate->nCurState == OMX_StateExecuting  ||
400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nCurState == OMX_StatePause)) ) {
401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    pComponentPrivate->pHandle->pApplicationPrivate,
404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_EventError,
405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_ErrorPortUnpopulated,
406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_TI_ErrorMinor,
407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    "Port Unpopulated");
408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = --pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "nBufferCount %d\n", nBufferCount);
413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nBufferCount == 0) {
414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated = OMX_FALSE;
415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "port %lu is %u\n", nPortIndex, pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated);
416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&(pComponentPrivate->mJpegDecMutex));
417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&(pComponentPrivate->sPortPopulated_cond));
418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&(pComponentPrivate->mJpegDecMutex));
419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((!pPortDef->bEnabled) &&
422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (!pComponentPrivate->pCompPort[nPortIndex]->pPortDef->bPopulated)) {
423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nPortIndex == 0) && (!pComponentPrivate->bInportDisableComplete)) {
424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bInportDisableComplete = OMX_TRUE;
425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortDisable,
429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                0,
430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nPortIndex == 1) && (!pComponentPrivate->bOutportDisableComplete)) {
433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bOutportDisableComplete = OMX_TRUE;
434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                pComponentPrivate->pHandle->pApplicationPrivate,
436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_EventCmdComplete,
437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                OMX_CommandPortDisable,
438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                1,
439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                NULL);
440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
442b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT:
443eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "Exit from FreeBuffer function error = %x\n", eError);
444b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of FreeBuffer_JPEGDec */
447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn UseBuffer_JPEGDec - Implements usebuffer functionality
452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - Component handle.
453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead - pointer to buffer header structure
454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPortIndex - Port index
455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppPrivate - pointer to application private data
456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nSizeBytes - size of the buffer
457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffer - pointer to the buffer
458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE UseBuffer_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr,
465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_U32 nPortIndex,
466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_PTR pAppPrivate,
467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_U32 nSizeBytes,
468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                        OMX_IN OMX_U8* pBuffer)
469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef = NULL;
473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_HANDLETYPE hTunnelComponent;
475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nBufferCount = -1;
476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
479b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
480b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDef = pComponentPrivate->pCompPort[nPortIndex]->pPortDef;
482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    hTunnelComponent = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent;
484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
485b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion UseBuffer_JPEGDec\n");
486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffer,
490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       nSizeBytes,
491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
496b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBufferHdr = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr;
498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == JPEGDEC_OUTPUT_PORT) {
500b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr, sizeof(OMX_BUFFERHEADERTYPE));
501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *ppBufferHdr = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pBufferHdr;
502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorBadPortIndex;
505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->bAllocbyComponent = OMX_FALSE;
508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* set relevant fields */
510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nSize = sizeof(OMX_BUFFERHEADERTYPE);
511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nVersion = pPortDef->nVersion;
512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->pBuffer = pBuffer;
513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->nAllocLen = nSizeBytes;
514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    (*ppBufferHdr)->pAppPrivate = pAppPrivate;
515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (hTunnelComponent != NULL) {
517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* set direction dependent fields */
518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pPortDef->eDir == OMX_DirInput) {
519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nInputPortIndex = nPortIndex;
520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nOutputPortIndex = pComponentPrivate->pCompPort[nPortIndex]->nTunnelPort;
521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr = (*ppBufferHdr);
523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nOutputPortIndex   = nPortIndex;
526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (*ppBufferHdr)->nInputPortIndex    = pComponentPrivate->pCompPort[nPortIndex]->nTunnelPort;
527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr = (*ppBufferHdr);
529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nPortIndex == JPEGDEC_INPUT_PORT) {
533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->nInputPortIndex  = JPEGDEC_INPUT_PORT;
534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->nOutputPortIndex = OMX_NOPORT;
535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->nInputPortIndex  = OMX_NOPORT;
538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->nOutputPortIndex = JPEGDEC_OUTPUT_PORT;
539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->pInputPortPrivate =
543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                     pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount]->pBufferHdr->pOutputPortPrivate =
547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                     pComponentPrivate->pCompPort[nPortIndex]->pBufferPrivate[nBufferCount];
548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = Allocate_DSPResources_JPEGDec(pComponentPrivate, nPortIndex);
551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRDSP4(pComponentPrivate->dbg, "Error: Allocate_DSPResources_JPEGDec failed\n");
553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorInsufficientResources;
554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* increment buffer count */
557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[nPortIndex]->nBuffCount++;
559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[nPortIndex]->nBuffCount == pPortDef->nBufferCountActual) {
560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortDef->bPopulated = OMX_TRUE;
561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        JPEGDEC_InitBufferFlagTrack(pComponentPrivate, nPortIndex);
562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_lock(&(pComponentPrivate->mJpegDecMutex));
563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_cond_signal(&(pComponentPrivate->sPortPopulated_cond));
564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pthread_mutex_unlock(&(pComponentPrivate->mJpegDecMutex));
565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* end of UseBuffer_JPEGDec */
569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn OMX_ComponentInit - Updates the component function pointer to the handle.
575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  Sets default parameters.
576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - Component handle.
577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE OMX_ComponentInit(OMX_HANDLETYPE hComponent)
583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 i = 0;
589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
592b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    LinkedList_Create(&AllocList);
593b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
594b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pHandle->pComponentPrivate, sizeof(JPEGDEC_COMPONENT_PRIVATE));
595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_INIT(pComponentPrivate->dbg, "OMX_DBG_JPEGDEC");
601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion OMX_ComponentInit\n");
603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERF = PERF_Create(PERF_FOURS("JPD "), PERF_ModuleLLMM | PERF_ModuleImageDecode);
606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERFcomp = NULL;
607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    ((JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate)->pHandle = pHandle;
610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nCurState = OMX_StateLoaded;
611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMajor = 0x01;
612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nVersionMinor = 0x00;
613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nRevision = 0x00;
614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->ComponentVersion.s.nStep = 0x00;
615b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->cComponentName, COMP_MAX_NAMESIZE + 1);
616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strncpy(pComponentPrivate->cComponentName, cJPEGdecName, COMP_MAX_NAMESIZE);
617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetCallbacks = SetCallbacks_JPEGDec;
619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetComponentVersion = GetComponentVersion_JPEGDec;
620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SendCommand = SendCommand_JPEGDec;
621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetParameter = GetParameter_JPEGDec;
622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetParameter = SetParameter_JPEGDec;
623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetConfig = GetConfig_JPEGDec;
624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->SetConfig = SetConfig_JPEGDec;
625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetState = GetState;
626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->EmptyThisBuffer = EmptyThisBuffer;
627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FillThisBuffer = FillThisBuffer_JPEGDec;
628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentTunnelRequest = ComponentTunnelRequest_JPEGDec;
629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentDeInit = ComponentDeInit;
630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->UseBuffer = UseBuffer_JPEGDec;
631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->FreeBuffer =  FreeBuffer_JPEGDec;
632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->AllocateBuffer = AllocateBuffer_JPEGDec;
633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->GetExtensionIndex      = GetExtensionIndex_JPEGDec;
634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->ComponentRoleEnum = ComponentRoleEnum;
636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Allocate memory for component data structures */
639b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPortParamType, sizeof(OMX_PORT_PARAM_TYPE));
640b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
641b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT], sizeof(JPEGDEC_PORT_TYPE));
642b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT], sizeof(JPEGDEC_PORT_TYPE));
643b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pParamBufSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
644b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pParamBufSupplier, sizeof(OMX_PARAM_BUFFERSUPPLIERTYPE));
645b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
646b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
647b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
648b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
649b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pScalePrivate, sizeof(OMX_CONFIG_SCALEFACTORTYPE)); /* Scale Factor */
650b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pSectionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SECTION));
651b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pSubRegionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SUBREGION));
652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
654b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pAudioPortType, sizeof(OMX_PORT_PARAM_TYPE));
655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pAudioPortType, OMX_PORT_PARAM_TYPE);
656b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pVideoPortType, sizeof(OMX_PORT_PARAM_TYPE));
657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pVideoPortType, OMX_PORT_PARAM_TYPE);
658b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pOtherPortType, sizeof(OMX_PORT_PARAM_TYPE));
659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pOtherPortType, OMX_PORT_PARAM_TYPE);
660b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pCompRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompRole,OMX_PARAM_COMPONENTROLETYPE);
662b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pQuantTable,OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE);
664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pQuantTable->eQuantizationTable = OMX_IMAGE_QuantizationTableLuma;
665b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_MALLOC(pComponentPrivate->pHuffmanTable, sizeof(OMX_IMAGE_PARAM_HUFFMANTTABLETYPE));
666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pHuffmanTable,OMX_IMAGE_PARAM_HUFFMANTTABLETYPE);
667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHuffmanTable->eHuffmanTable = OMX_IMAGE_HuffmanTableAC;
668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pAudioPortType->nPorts = 0;
670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pAudioPortType->nStartPortNumber = -1;
671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pVideoPortType->nPorts = 0;
672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pVideoPortType->nStartPortNumber = -1;
673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pOtherPortType->nPorts = 0;
674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pOtherPortType->nStartPortNumber = -1;
675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERS;i++) {
678b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[i], sizeof(JPEGDEC_BUFFER_PRIVATE));
679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[i]->pBufferHdr = NULL;
680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    for (i = 0;i<NUM_OF_BUFFERS;i++) {
683b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[i], sizeof(JPEGDEC_BUFFER_PRIVATE));
684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[i]->pBufferHdr = NULL;
685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->hTunnelComponent = NULL;
688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent = NULL;
689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->nBuffCount = 0;
690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->nBuffCount = 0;
691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nProgressive = 0;
692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nInputFrameWidth = 1600;
693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutputColorFormat = OMX_COLOR_Format32bitARGB8888;
694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nProfileID = 0;
695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nIsLCMLActive = 0;
696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pDllHandle = NULL;
697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pLCML = NULL;
698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkData = NULL;
699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pMarkBuf = NULL;
700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->hMarkTargetComponent = NULL;
701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pHandle->pApplicationPrivate = (OMX_PTR *)200;
702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nInPortIn = 0;
703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nOutPortOut = 0;
704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->bPreempted = OMX_FALSE;
705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*Slide decoding defaults*/
707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pSectionDecode, OMX_CUSTOM_IMAGE_DECODE_SECTION);
708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSectionDecode->nMCURow = 0;
709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSectionDecode->nAU = 0;
710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSectionDecode->bSectionsInput = 0;
711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSectionDecode->bSectionsOutput = 0;
712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pSubRegionDecode, OMX_CUSTOM_IMAGE_DECODE_SUBREGION);
714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSubRegionDecode->nXOrg = 0;
715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSubRegionDecode->nYOrg = 0;
716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSubRegionDecode->nXLength = 0;
717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pSubRegionDecode->nYLength = 0;
718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pPortParamType defaults */
721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPortParamType, OMX_PORT_PARAM_TYPE);
722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamType->nPorts = NUM_OF_PORTS;
723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPortParamType->nStartPortNumber = 0x0;
724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pInPortDef defaults */
726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nPortIndex = JPEGDEC_INPUT_PORT;
728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->eDir = OMX_DirInput;
729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual = NUM_OF_BUFFERS;
730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountMin         = 1;
731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferSize             = 70532;
732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bEnabled = OMX_TRUE;
733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bPopulated = OMX_FALSE;
734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->eDomain = OMX_PortDomainImage;
735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.cMIMEType = "JPEGDEC";
736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.pNativeRender = NULL;
737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.nFrameWidth        = 640 ; /* 128*/
738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.nFrameHeight       = 480;  /*96 */
739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.nStride = -1;
740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.nSliceHeight = -1;
741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.bFlagErrorConcealment = OMX_FALSE;
742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.eCompressionFormat         =  OMX_IMAGE_CodingJPEG;
743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->format.image.eColorFormat           =  OMX_COLOR_FormatUnused;
744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutPortDef defaults */
746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef, OMX_PARAM_PORTDEFINITIONTYPE);
747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nPortIndex = JPEGDEC_OUTPUT_PORT;
748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->eDir = OMX_DirOutput;
749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountMin        =  1;
750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual         = NUM_OF_BUFFERS;
751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferSize            =  (640*480*2);
752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bEnabled = OMX_TRUE;
753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bPopulated = OMX_FALSE;
754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->eDomain = OMX_PortDomainImage;
755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.cMIMEType = "JPEGDEC";
756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.pNativeRender = NULL;
757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.nFrameWidth       =    640;
758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.nFrameHeight  = 480;
759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.nStride = -1;
760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.nSliceHeight = -1;
761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.bFlagErrorConcealment = OMX_FALSE;
762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.eCompressionFormat = OMX_IMAGE_CodingUnused;
763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.image.eColorFormat          =  OMX_COLOR_FormatYUV420PackedPlanar;
764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* added for vpp tunneling */
765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pInPortFormat defaults */
769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, OMX_IMAGE_PARAM_PORTFORMATTYPE);
770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex = JPEGDEC_INPUT_PORT;
771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nIndex = 0x0;
772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->eCompressionFormat   =OMX_IMAGE_CodingJPEG;
773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->eColorFormat         = OMX_COLOR_FormatUnused;
774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutPortFormat defaults */
776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, OMX_IMAGE_PARAM_PORTFORMATTYPE);
777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex = JPEGDEC_OUTPUT_PORT;
778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nIndex = 0x0;
779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->eCompressionFormat = OMX_IMAGE_CodingUnused;
780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->eColorFormat        = OMX_COLOR_FormatYUV420PackedPlanar;
781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pPriorityMgmt defaults */
783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pPriorityMgmt, OMX_PRIORITYMGMTTYPE);
784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupPriority = -1;
785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPriorityMgmt->nGroupID = -1;
786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pInBufSupplier defaults */
789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pParamBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pParamBufSupplier->nPortIndex = JPEGDEC_INPUT_PORT;
791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pParamBufSupplier->eBufferSupplier = OMX_BufferSupplyInput;
792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Set pOutBufSupplier defaults */
794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CONF_INIT_STRUCT(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pParamBufSupplier, OMX_PARAM_BUFFERSUPPLIERTYPE);
795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pParamBufSupplier->nPortIndex = JPEGDEC_OUTPUT_PORT;
796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pParamBufSupplier->eBufferSupplier = OMX_BufferSupplyInput;
797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	/* Set default value for Max width & Height*/
799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	pComponentPrivate->sMaxResolution.nWidth = JPGDEC_SNTEST_MAX_WIDTH;
800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	pComponentPrivate->sMaxResolution.nHeight = JPGDEC_SNTEST_MAX_HEIGHT;
801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /*Initialize Component mutex*/
803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pthread_mutex_init(&(pComponentPrivate->mJpegDecMutex), NULL) != 0)
804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_TRACE4(pComponentPrivate->dbg, "Error at Initialize fill this buffer mutex condition");
806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorHardware;
807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* initialize a condition variable to its default value */
811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pthread_cond_init(&(pComponentPrivate->sStop_cond), NULL) != 0)
812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_TRACE4(pComponentPrivate->dbg, "Error at Initialize fill this buffer mutex condition");
814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	eError = OMX_ErrorHardware;
815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strcpy((char *)pComponentPrivate->componentRole.cRole, "image_decoder.jpeg");
820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* load the ResourceManagerProxy thread */
825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_NewInitalizeEx(OMX_COMPONENTTYPE_IMAGE);
826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRMGR4(pComponentPrivate->dbg, "Error returned from loading ResourceManagerProxy thread: %x\n", eError);
828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	goto EXIT;
829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError= Start_ComponentThreadJpegDec(pHandle);
833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(eError != OMX_ErrorNone){
837b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /* LinkedList_DisplayAll (&AllocList); */
838b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_FREEALL();
839b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        LinkedList_Destroy(&AllocList);
840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of OMX_ComponentInit */
843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn SetCallbacks_JPEGDec - Sets application callbacks to the component
846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - Component handle.
847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCallBacks - application callbacks
848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pAppData - pointer to application Data
849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetCallbacks_JPEGDec(OMX_HANDLETYPE pComponent,
855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_CALLBACKTYPE* pCallBacks,
856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_PTR pAppData)
857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)pComponent;
865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion SetCallbacks_JPEGDec\n");
870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pCallBacks == NULL) {
872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_ERROR5(pComponentPrivate->dbg, "Entering funtion SetCallbacks_JPEGDec\n");
874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* Copy the callbacks of the application to the component private  */
878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_MEMCPY_CHECK(&(pComponentPrivate->cbInfo));
879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    memcpy(&(pComponentPrivate->cbInfo), pCallBacks, sizeof(OMX_CALLBACKTYPE));
880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* copy the application private data to component memory */
883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle->pApplicationPrivate = pAppData;
884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nCurState = OMX_StateLoaded;
885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of SetCallbacks_JPEGDec */
889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetComponentVersion_JPEGDec - This method will get the component Version.
895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp - handle for this instance of the component
896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentName  - component name
897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentVersion - component version
898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pSpecVersion - OMX specification version
899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentUUID - UUID of the component
900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetComponentVersion_JPEGDec(OMX_HANDLETYPE hComp,
906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_STRING szComponentName,
907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_VERSIONTYPE* pComponentVersion,
908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_VERSIONTYPE* pSpecVersion,
909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_UUIDTYPE* pComponentUUID)
910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE          eError            = OMX_ErrorNone;
912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE    * pHandle           = NULL;
913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 *pTemp = NULL;
915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!hComp || !szComponentName || !pComponentVersion || !pSpecVersion || !pComponentUUID) {
917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComp;
921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pHandle->pComponentPrivate) {
922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion GetComponentVersion_JPEGDec\n");
930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    strncpy(szComponentName, pComponentPrivate->cComponentName, COMP_MAX_NAMESIZE);
932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp = memcpy(pComponentVersion, &(pComponentPrivate->ComponentVersion.s), sizeof(pComponentPrivate->ComponentVersion.s));
933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pTemp == NULL){
934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pTemp = memcpy(pSpecVersion, &(pComponentPrivate->SpecVersion.s), sizeof(pComponentPrivate->SpecVersion.s));
938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(pTemp == NULL){
939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUndefined;
940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}/* End of GetComponentVersion_JPEGDec */
945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn SendCommand_JPEGDec - Sends command from application to component
949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param Cmd - Command to be sent
951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam - Command parameters
952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pCmdData - Additional Command data
953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SendCommand_JPEGDec(OMX_HANDLETYPE hComponent,
959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_COMMANDTYPE Cmd,
960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_U32 nParam,
961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         OMX_PTR pCmdData)
962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDefIn= NULL;
967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE *pPortDefOut = NULL;
968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_MARKTYPE* pMarkType = NULL;
969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE eCmd = OMX_CustomCommandStopThread;
970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet = 0;
971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
975b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
976b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefIn = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef;
978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPortDefOut = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef;
979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion SendCommand_JPEGDec %u %lu\n", Cmd, nParam);
981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nCurState == OMX_StateInvalid) {
983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRSTATE4(pComponentPrivate->dbg, "INVALID STATE\n");
984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorInvalidState;
985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (Cmd) {
988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandStateSet:
990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandStateSet;
991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->nToState = nParam;
992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRSTATE2(pComponentPrivate->dbg, "To state %d\n", pComponentPrivate->nToState);
993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandFlush:
996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGDEC_INPUT_PORT) &&
997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            (nParam != JPEGDEC_OUTPUT_PORT) &&
998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    ((int)nParam != -1)) {
999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandFlush;
1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "get OMX_CommandFlush\n");
1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortDisable:
1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "Get port disable command %lu\n", nParam);
1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if (nParam == JPEGDEC_INPUT_PORT  || (int)nParam == -1) {
1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPortDefIn->bEnabled = OMX_FALSE;
1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bInportDisableComplete = OMX_FALSE;
1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "pPortDefIn->bEnabled %d\n", pPortDefIn->bEnabled);
1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam == JPEGDEC_OUTPUT_PORT  || (int)nParam == -1) {
1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPortDefOut->bEnabled = OMX_FALSE;
1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pComponentPrivate->bOutportDisableComplete = OMX_FALSE;
1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "pPortDefIn->bEnabled %d\n", pPortDefIn->bEnabled);
1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGDEC_INPUT_PORT) && (nParam != JPEGDEC_OUTPUT_PORT) && ((int)nParam != -1)) {
1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n");
1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pPortDefIn->bPopulated) {
1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bInportDisableComplete = OMX_TRUE;
1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEGDEC_INPUT_PORT: OMX_CommandPortDisable\n");
1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               pComponentPrivate->pHandle->pApplicationPrivate,
1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_EventCmdComplete,
1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               OMX_CommandPortDisable,
1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               JPEGDEC_INPUT_PORT,
1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               NULL);
1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!pPortDefOut->bPopulated) {
1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->bOutportDisableComplete = OMX_TRUE;
1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_PRBUFFER1(pComponentPrivate->dbg, "JPEGDEC_OUTPUT_PORT : OMX_CommandPortDisable\n");
1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle,
1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pHandle->pApplicationPrivate,
1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_EventCmdComplete,
1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            OMX_CommandPortDisable,
1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            JPEGDEC_OUTPUT_PORT,
1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            NULL);
1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandPortDisable;
1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandPortEnable:
1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	if (nParam == JPEGDEC_INPUT_PORT  || (int)nParam == -1) {
1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPortDefIn->bEnabled = OMX_TRUE;
1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nParam == JPEGDEC_OUTPUT_PORT  || (int)nParam == -1) {
1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    pPortDefOut->bEnabled = OMX_TRUE;
1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ((nParam != JPEGDEC_INPUT_PORT) && (nParam != JPEGDEC_OUTPUT_PORT) && ((int)nParam != -1)) {
1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadParameter;
1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandPortEnable;
1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_CommandMarkBuffer:
1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "JPEGDEC: Entered switch - Command Mark Buffer\n");
1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eCmd = OMX_CommandMarkBuffer;
1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* we can only mark buffers on input port */
1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if ( nParam != JPEGDEC_INPUT_PORT && nParam != JPEGDEC_OUTPUT_PORT){
1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pMarkType =(OMX_MARKTYPE*)pCmdData;
1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->pMarkData = pMarkType->pMarkData;
1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->hMarkTargetComponent = pMarkType->hMarkTargetComponent;
1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nMarkPort = nParam;
1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "JPEGDEC: eCmd = %d\n",(int)eCmd);
1081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_SendingCommand(pComponentPrivate->pPERF,
1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eCmd, (eCmd == OMX_CommandMarkBuffer) ? (OMX_U32) pCmdData : nParam,
1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ModuleComponent);
1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write(pComponentPrivate->nCmdPipe[1], &eCmd, sizeof(eCmd));
1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRCOMM4(pComponentPrivate->dbg, "Failed to write into nCmdPipe\n");
1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* this needs to be fixed */
1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* port index is redundant for mark buffer as we have 1 input port */
1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eCmd == OMX_CommandMarkBuffer) {
1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pComponentPrivate->nCmdDataPipe[1], &pCmdData, sizeof(OMX_PTR));
1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nRet == -1) {
1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		OMX_PRCOMM4(pComponentPrivate->dbg, "Failed to write into nCmdDataPipe, eCmd = MarkBuf\n");
1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        nRet = write(pComponentPrivate->nCmdDataPipe[1], &nParam, sizeof(nParam));
1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRCOMM2(pComponentPrivate->dbg, "write param %lu to pipe\n", nParam);
1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (nRet == -1) {
1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		OMX_PRCOMM4(pComponentPrivate->dbg, "Failed to write into nCmdDataPipe\n");
1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of SendCommand_JPEGDec*/
1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetParameter_JPEGDec - Gets Parameters from the Component.
1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  This method will update parameters from the component to the app.
1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex - Component Index Port
1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentParameterStructure - Component Parameter Structure
1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetParameter_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_IN OMX_INDEXTYPE nParamIndex,
1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_INOUT OMX_PTR ComponentParameterStructure)
1130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pComp = NULL;
1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(ComponentParameterStructure);
1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComp = (OMX_COMPONENTTYPE *)hComponent;
1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pComp->pComponentPrivate;
1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion GetParameter_JPEGDec\n");
1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nCurState == OMX_StateInvalid) {
1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1146b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        goto PRINT_EXIT;
1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (nParamIndex) {
1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamAudioInit:
1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pAudioPortType, sizeof(OMX_PORT_PARAM_TYPE));
1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamVideoInit:
1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pVideoPortType, sizeof(OMX_PORT_PARAM_TYPE));
1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case OMX_IndexParamOtherInit:
1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pOtherPortType, sizeof(OMX_PORT_PARAM_TYPE));
1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImageInit:
1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentParameterStructure, pComponentPrivate->pPortParamType, sizeof(OMX_PORT_PARAM_TYPE));
1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(ComponentParameterStructure);
1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		OMX_PRINT1(pComponentPrivate->dbg, "get param %lu\n", ((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex);
1176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin		OMX_PRINT1(pComponentPrivate->dbg, " port 0 enable: %d\n", pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bEnabled);
1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRINT1(pComponentPrivate->dbg, " port 1 enable: %d\n", pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bEnabled);
1178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin       if (((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nPortIndex) {
1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (((OMX_PARAM_PORTDEFINITIONTYPE *)(ComponentParameterStructure))->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nPortIndex) {
1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImagePortFormat:
1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (((OMX_IMAGE_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex ==  pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex) {
1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (((OMX_IMAGE_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nIndex) {
1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (((OMX_IMAGE_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex) {
1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (((OMX_IMAGE_PARAM_PORTFORMATTYPE *)(ComponentParameterStructure))->nIndex > pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nIndex) {
1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorNoMore;
1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(ComponentParameterStructure, pComponentPrivate->pPriorityMgmt, sizeof(OMX_PRIORITYMGMTTYPE));
1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)ComponentParameterStructure;
1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffSupplierParam->nPortIndex == 1) {
1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffSupplierParam->eBufferSupplier = pComponentPrivate->pCompPort[pBuffSupplierParam->nPortIndex]->pParamBufSupplier->eBufferSupplier;
1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pBuffSupplierParam->nPortIndex == 0) {
1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffSupplierParam->eBufferSupplier = pComponentPrivate->pCompPort[pBuffSupplierParam->nPortIndex]->pParamBufSupplier->eBufferSupplier;
1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamQuantizationTable:
1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pQuantTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(ComponentParameterStructure);
1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamHuffmanTable:
1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(ComponentParameterStructure, pComponentPrivate->pHuffmanTable, sizeof(OMX_IMAGE_PARAM_HUFFMANTTABLETYPE));
1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(ComponentParameterStructure);
1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomSectionDecode:
1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pSectionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SECTION));
1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomSubRegionDecode:
1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, pComponentPrivate->pSubRegionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SUBREGION));
1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	case OMX_IndexCustomSetMaxResolution:
1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		{
1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(ComponentParameterStructure, &(pComponentPrivate->sMaxResolution), sizeof(OMX_CUSTOM_RESOLUTION));
1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(ComponentParameterStructure);
1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		}
1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		break;
1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1274b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT:
1275eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong    OMX_PRINT1(pComponentPrivate->dbg, "EXIT\n");
1276b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT:
1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of GetParameter_JPEGDec */
1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn SetParameter_JPEGDec - Sets the parameters sent by the Application and
1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  sets it to the component
1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParamIndex - Component Index Port
1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentParameterStructure - Component Parameter Structure to set
1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetParameter_JPEGDec(OMX_HANDLETYPE hComponent,
1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_INDEXTYPE nParamIndex,
1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                          OMX_PTR pCompParam)
1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pCompParam);
1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComponent;
1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion SetParameter_JPEGDec\n");
1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nCurState != OMX_StateLoaded) {
1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (nParamIndex) {
1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamAudioPortFormat:
1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_AUDIO_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_AUDIO_PARAM_PORTFORMATTYPE *)pCompParam;
1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex ) {
1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat);
1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_AUDIO_PARAM_PORTFORMATTYPE));
1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat);
1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamVideoPortFormat:
1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_VIDEO_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_VIDEO_PARAM_PORTFORMATTYPE *)pCompParam;
1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex ) {
1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat);
1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_VIDEO_PARAM_PORTFORMATTYPE));
1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat);
1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamOtherPortFormat:
1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_OTHER_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_OTHER_PARAM_PORTFORMATTYPE *)pCompParam;
1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex ) {
1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_OTHER_PARAM_PORTFORMATTYPE));
1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat);
1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else if ( pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex ) {
1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                memcpy(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_OTHER_PARAM_PORTFORMATTYPE));
1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat);
1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            else {
1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                eError = OMX_ErrorBadPortIndex;
1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImagePortFormat:
1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_IMAGE_PARAM_PORTFORMATTYPE* pComponentParam = (OMX_IMAGE_PARAM_PORTFORMATTYPE *)pCompParam;
1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat->nPortIndex) {
1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat);
1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat->nPortIndex) {
1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat);
1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortFormat, pComponentParam, sizeof(OMX_IMAGE_PARAM_PORTFORMATTYPE));
1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamImageInit:
1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentPrivate->pPortParamType);
1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentPrivate->pPortParamType, (OMX_PORT_PARAM_TYPE*)pCompParam, sizeof(OMX_PORT_PARAM_TYPE));
1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPortDefinition:
1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_PORTDEFINITIONTYPE* pComponentParam = (OMX_PARAM_PORTDEFINITIONTYPE *)pCompParam;
1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nPortIndex) {
1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef);
1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef, pComponentParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pComponentParam->nPortIndex == pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nPortIndex) {
1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef);
1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef, pComponentParam, sizeof(OMX_PARAM_PORTDEFINITIONTYPE));
1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamPriorityMgmt:
1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_MEMCPY_CHECK(pComponentPrivate->pPriorityMgmt);
1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pComponentPrivate->pPriorityMgmt, (OMX_PRIORITYMGMTTYPE*)pCompParam, sizeof(OMX_PRIORITYMGMTTYPE));
1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamCompBufferSupplier:
1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PARAM_BUFFERSUPPLIERTYPE *pBuffSupplierParam = (OMX_PARAM_BUFFERSUPPLIERTYPE *)pCompParam;
1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pBuffSupplierParam->nPortIndex == 1)    {
1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Copy parameters to input port buffer supplier type */
1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[pBuffSupplierParam->nPortIndex]->pParamBufSupplier->eBufferSupplier= pBuffSupplierParam->eBufferSupplier;
1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (pBuffSupplierParam->nPortIndex == 0) {
1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pCompPort[pBuffSupplierParam->nPortIndex]->pParamBufSupplier->eBufferSupplier = pBuffSupplierParam->eBufferSupplier;
1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamQuantizationTable:
1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE* pQuantizationTable = (OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE*)pCompParam;
1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pQuantizationTable);
1440eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong                OMX_MEMCPY_CHECK(pComponentPrivate->pQuantTable);
1441b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                memcpy(pComponentPrivate->pQuantTable, pQuantizationTable, sizeof(OMX_IMAGE_PARAM_QUANTIZATIONTABLETYPE));
1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamStandardComponentRole:
1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PARAM_COMPONENTROLETYPE* pRole = (OMX_PARAM_COMPONENTROLETYPE *)pCompParam;
1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pRole);
1449eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong                OMX_MEMCPY_CHECK(pComponentPrivate->pCompRole);
1450b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                memcpy(pComponentPrivate->pCompRole, pRole, sizeof(OMX_PARAM_COMPONENTROLETYPE ));
1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexParamHuffmanTable:
1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_IMAGE_PARAM_HUFFMANTTABLETYPE* pHuffmanTable = (OMX_IMAGE_PARAM_HUFFMANTTABLETYPE *)pCompParam;
1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_MEMCPY_CHECK(pHuffmanTable);
1459eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong                OMX_MEMCPY_CHECK(pComponentPrivate->pHuffmanTable);
1460b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                memcpy(pComponentPrivate->pHuffmanTable, pHuffmanTable, sizeof(OMX_IMAGE_PARAM_HUFFMANTTABLETYPE ));
1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomSectionDecode:
1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_CUSTOM_IMAGE_DECODE_SECTION* pSectionDecode = pCompParam;
1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pSectionDecode);
1470eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong            OMX_MEMCPY_CHECK(pComponentPrivate->pSectionDecode);
1471b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            memcpy(pComponentPrivate->pSectionDecode, pSectionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SECTION));
1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomSubRegionDecode:
1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_CUSTOM_IMAGE_DECODE_SUBREGION* pSubRegionDecode = pCompParam;
1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_MEMCPY_CHECK(pSubRegionDecode);
1479eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong            OMX_MEMCPY_CHECK(pComponentPrivate->pSubRegionDecode);
1480b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            memcpy(pComponentPrivate->pSubRegionDecode, pSubRegionDecode, sizeof(OMX_CUSTOM_IMAGE_DECODE_SUBREGION));
1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    break;
1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	case OMX_IndexCustomSetMaxResolution:
1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		{
1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin			OMX_MEMCPY_CHECK(pCompParam);
1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            memcpy(&(pComponentPrivate->sMaxResolution), pCompParam, sizeof(OMX_CUSTOM_RESOLUTION));
1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		}
1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		break;
1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of SetParameter_JPEGDec */
1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetConfig_JPEGDec - Gets Configuration data from the Component
1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp - handle for this instance of the component
1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex - Component Config Index Port
1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure - Component Config Structure
1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetConfig_JPEGDec(OMX_HANDLETYPE hComp,
1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_INDEXTYPE nConfigIndex,
1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_PTR ComponentConfigStructure)
1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComp);
1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(ComponentConfigStructure);
1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComp;
1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion GetConfig_JPEGDec\n");
1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (nConfigIndex) {
1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexConfigCommonScale:
1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int scale=0;
1536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONFIG_SCALEFACTORTYPE* pScaleFactor = (OMX_CONFIG_SCALEFACTORTYPE *)ComponentConfigStructure;
1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        memcpy(pScaleFactor, pComponentPrivate->pScalePrivate, sizeof(OMX_CONFIG_SCALEFACTORTYPE));
1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        scale =(int)pScaleFactor->xWidth;
1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        switch (scale)
1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (0):
1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 100;
1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (1):
1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 50;
1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (2):
1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 25;
1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (3):
1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 12;
1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (4):
1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 200;
1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (5):
1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 400;
1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (6):
1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 800;
1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 100;
1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomProgressiveFactor:
1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *pnProgressiveFlag = (int*)ComponentConfigStructure;
1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pnProgressiveFlag = (int*)pComponentPrivate->nProgressive;
1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDebug:
1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_DBG_GETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	break;
1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of GetConfig_JPEGDec */
1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn SetConfig_JPEGDec - Sends command to set new configuration
1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp - handle for this instance of the component
1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nConfigIndex - Component Config Index Port
1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param ComponentConfigStructure - Component Config Structure
1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE SetConfig_JPEGDec(OMX_HANDLETYPE hComp,
1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_INDEXTYPE nConfigIndex,
1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_PTR ComponentConfigStructure)
1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE* pHandle = NULL;
1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComp);
1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(ComponentConfigStructure);
1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE*)hComp;
1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion SetConfig_JPEGDec\n");
1629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (nConfigIndex) {
1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexConfigCommonScale:
1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int scale=0;
1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_CONFIG_SCALEFACTORTYPE* pScaleFactor = (OMX_CONFIG_SCALEFACTORTYPE *)ComponentConfigStructure;
1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        scale =(int)pScaleFactor->xWidth;
1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        switch (scale)
1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (800):
1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 6;
1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (400):
1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 5;
1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (200):
1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 4;
1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (100):
1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 0;
1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (50):
1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 1;
1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (25):
1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 2;
1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        case (12):
1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 3;
1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        default:
1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pScaleFactor->xWidth = 0;
1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1673eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong        OMX_MEMCPY_CHECK(pComponentPrivate->pScalePrivate);
1674b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        memcpy(pComponentPrivate->pScalePrivate, pScaleFactor, sizeof(OMX_CONFIG_SCALEFACTORTYPE));
1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomProgressiveFactor:
1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *pnProgressive = (int*)ComponentConfigStructure;
1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nProgressive = (int)*pnProgressive;
1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomInputFrameWidth:
1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *pnInputFrameWidth = (int*)ComponentConfigStructure;
1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nInputFrameWidth = (int)*pnInputFrameWidth;
1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomOutputColorFormat:
1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        int *pnOutputColorFormat = (int*)ComponentConfigStructure;
1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nOutputColorFormat = (int)*pnOutputColorFormat;
1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_IndexCustomDebug:
1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_DBG_SETCONFIG(pComponentPrivate->dbg, ComponentConfigStructure);
1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	break;
1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorUnsupportedIndex;
1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of SetConfig_JPEGDec */
1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetState - Gets OMX Component State
1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComp - handle for this instance of the component
1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pState - pointer to store State
1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE GetState(OMX_HANDLETYPE pComponent,
1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                              OMX_STATETYPE* pState)
1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = 80001012;
1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE * pComponentPrivate = NULL;
1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate;
1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion GetState\n");
1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pState) {
1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pHandle && pHandle->pComponentPrivate) {
1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState = ((JPEGDEC_COMPONENT_PRIVATE*)pHandle->pComponentPrivate)->nCurState;
1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        *pState = OMX_StateLoaded;
1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_ErrorNone;
1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of GetState */
1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn EmptyThisBuffer - Send Input Buffers.   * The application uses this to
1759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  send the input buffers filled with data to the input port of the component.
1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead - Pointer to data filled
1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE EmptyThisBuffer(OMX_HANDLETYPE hComponent,
1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                     OMX_BUFFERHEADERTYPE* pBuffHead)
1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_BUFFER_PRIVATE* pBuffPrivate;
1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet;
1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion EmptyThisBuffer %p\n", pBuffHead);
1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState != OMX_StateExecuting &&
1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StatePause &&
1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StateIdle) {
1788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead == NULL) {
1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nSize != sizeof(OMX_BUFFERHEADERTYPE)) {
1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bEnabled) {
1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pInputPortPrivate;
1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nAllocLen = %d\n",(int)pBuffHead->nAllocLen);
1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFilledLen = %d\n",(int)pBuffHead->nFilledLen);
1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nFlags = %d\n",(int)pBuffHead->nFlags);
1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((pBuffHead->nVersion.s.nVersionMajor != 0x1) ||
1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nVersionMinor != 0x0) ||
1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nRevision != 0x0) ||
1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nStep != 0x0)) {
1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorVersionMismatch;
1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nInputPortIndex != 0x0) {
1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorBadPortIndex;
1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->nInPortIn ++;
1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) {
1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	for (i = 0; i < (int)pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; i ++) {
1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->sBufferFlagTrack[i].buffer_id == 0xFFFFFFFF)
1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	      OMX_PRBUFFER1(pComponentPrivate->dbg, "record buffer id in array %d\n", i);
1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->sBufferFlagTrack[i].flag = pBuffHead->nFlags;
1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->sBufferFlagTrack[i].buffer_id = pComponentPrivate->nInPortIn;
1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin              break;
1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /* mark the first buffer from input port after receiving mark buffer command */
1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if (pComponentPrivate->nMarkPort == JPEGDEC_INPUT_PORT) {
1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         if (pComponentPrivate->pMarkData) {
1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER2(pComponentPrivate->dbg, "get mark buffer command, mark buffer %p\n", pBuffHead);
1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead->pMarkData = pComponentPrivate->pMarkData;
1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pBuffHead->hMarkTargetComponent = pComponentPrivate->hMarkTargetComponent;
1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->pMarkData = NULL;
1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pComponentPrivate->hMarkTargetComponent = NULL;
1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     /* if a buffer from input port is marked, record this port # in the buffer queue */
1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     if (pBuffHead->pMarkData) {
1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	 for (i = 0; i < (int)pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; i ++) {
1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             if (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->sBufferMarkTrack[i].buffer_id == 0xFFFFFFFF)
1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             {
1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                JPEGDEC_BUFFERMARK_TRACK *pMarkTrack;
1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pMarkTrack = &(pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->sBufferMarkTrack[i]);
1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pMarkTrack->buffer_id = pComponentPrivate->nInPortIn;
1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pMarkTrack->pMarkData = pBuffHead->pMarkData;
1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pMarkTrack->hMarkTargetComponent = pBuffHead->hMarkTargetComponent;
1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_PRBUFFER2(pComponentPrivate->dbg, "mark buffer at ID %lu\n", pComponentPrivate->nInPortIn);
1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                break;
1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin             }
1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         }
1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     }
1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pBuffPrivate->bReadFromPipe = OMX_FALSE;
1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffHead->pBuffer,
1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffHead->nFilledLen,
1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_COMPONENT_IN;
1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pComponentPrivate->nFilled_inpBuf_Q[1], &(pBuffHead), sizeof(pBuffHead));
1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRCOMM4(pComponentPrivate->dbg, "Error while writing to the nFilled_inpBuf_Q pipe\n");
1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of EmptyThisBuffer */
1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn FillThisBuffer_JPEGDec - Send Output Buffers. The application uses this
1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  to send the empty output buffers to the output port of the component.
1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pBuffHead - Pointer to buffer header
1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE FillThisBuffer_JPEGDec(OMX_HANDLETYPE pComponent,
1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                            OMX_BUFFERHEADERTYPE* pBuffHead)
1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL;
1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet;
1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead == NULL) {
1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pComponent);
1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)pComponent;
1916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
1917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate = pBuffHead->pOutputPortPrivate;
1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion FillThisBuffer_JPEGDec\n");
1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pBuffHead->nSize != sizeof(OMX_BUFFERHEADERTYPE) ) {
1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bEnabled == OMX_FALSE) {
1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorIncorrectStateOperation;
1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRSTATE4(pComponentPrivate->dbg, "eError = OMX_ErrorIncorrectStateOperation\n");
1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ((pBuffHead->nVersion.s.nVersionMajor != 0x1) ||
1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nVersionMinor != 0x0) ||
1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nRevision != 0x0) ||
1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pBuffHead->nVersion.s.nStep != 0x0)) {
1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorVersionMismatch;
1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRBUFFER1(pComponentPrivate->dbg, "pBuffHead->nOutputPortIndex %lu\n", pBuffHead->nOutputPortIndex);
1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pBuffHead->nOutputPortIndex != 0x1) {
1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorBadPortIndex;
1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            goto EXIT;
1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffHead->nFilledLen = 0;
1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if ( pComponentPrivate->nCurState != OMX_StateExecuting &&
1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StatePause &&
1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pComponentPrivate->nCurState != OMX_StateIdle) {
1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError= OMX_ErrorIncorrectStateOperation;
1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
1964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_ReceivedFrame(pComponentPrivate->pPERF,
1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffHead->pBuffer,
1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       pBuffHead->nFilledLen,
1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                       PERF_ModuleHLMM);
1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pBuffPrivate->bReadFromPipe = OMX_FALSE;
1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_COMPONENT_IN;
1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nRet = write (pComponentPrivate->nFree_outBuf_Q[1], &(pBuffHead), sizeof (pBuffHead));
1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nRet == -1) {
1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRCOMM4(pComponentPrivate->dbg, "Error while writing in nFree_outBuf_Q pipe\n");
1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of FillThisBuffer_JPEGDec */
1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn ComponentDeInit - Deinitialize Component. This method will clean all
1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *  resources in the component
1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE ComponentDeInit(OMX_HANDLETYPE hComponent)
1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    struct OMX_TI_Debug dbg;
1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
1999b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_DBG_INIT_BASE(dbg);
2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    dbg = pComponentPrivate->dbg;
2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(dbg, "Entering funtion ComponentDeInit\n");
2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Boundary(pComponentPrivate->pPERF,
2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    PERF_BoundaryComplete | PERF_BoundaryCleanup);
2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERF);
2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    Free_ComponentResourcesJpegDec(pHandle->pComponentPrivate);
2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError= RMProxy_NewSendCommand(pHandle,  RMProxy_FreeResource, OMX_JPEG_Decoder_COMPONENT, 0, 3456, NULL);
2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRMGR4(dbg, "Cannot Free RMProxy Resources\n");
2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = RMProxy_DeinitalizeEx(OMX_COMPONENTTYPE_IMAGE);
2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	OMX_PRMGR4(dbg, "Error returned from destroy ResourceManagerProxy thread\n");
2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(dbg, "Error from Component DeInit = %d\n",eError);
2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_DBG_CLOSE(dbg);
2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of ComponentDeInit */
2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn VerifyTunnelConnection_JPEGDec - This function verifies the tunnel connection
2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pPort - port info
2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hTunneledComp - handle of the component to tunnel
2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pPortDef - pointer to the port definition.
2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE VerifyTunnelConnection_JPEGDec(JPEGDEC_PORT_TYPE *pPort,
2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_HANDLETYPE hTunneledComp,
2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_PARAM_PORTDEFINITIONTYPE* pPortDef)
2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* 1.4 Check if input port is compatible with output port */
2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_PORTDEFINITIONTYPE sPortDef;
2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hTunneledComp;
2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion VerifyTunnelConnection_JPEGDec\n");
2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sPortDef.nSize = sizeof(OMX_PARAM_PORTDEFINITIONTYPE);
2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sPortDef.nVersion.s.nVersionMajor = 0x01;
2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sPortDef.nVersion.s.nVersionMinor = 0x00;
2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    sPortDef.nPortIndex = pPort->nTunnelPort;
2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    eError = OMX_GetParameter(hTunneledComp, OMX_IndexParamPortDefinition, &sPortDef);
2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (eError != OMX_ErrorNone) {
2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRCOMM4(pComponentPrivate->dbg, "Error \n");
2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        return eError;
2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    switch (pPortDef->eDomain) {
2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_PortDomainOther:
2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sPortDef.format.other.eFormat!= pPortDef->format.other.eFormat) {
2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->nTunnelPort = 0;
2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_PortDomainAudio:
2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sPortDef.format.audio.eEncoding != pPortDef->format.audio.eEncoding) {
2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->nTunnelPort = 0;
2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_PortDomainVideo:
2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sPortDef.format.video.eCompressionFormat != pPortDef->format.video.eCompressionFormat) {
2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->nTunnelPort = 0;
2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    case OMX_PortDomainImage:
2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (sPortDef.format.image.eCompressionFormat != pPortDef->format.image.eCompressionFormat) {
2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->hTunnelComponent = 0;
2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->nTunnelPort = 0;
2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorPortsNotCompatible;
2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        break;
2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    default:
2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->hTunnelComponent = 0;
2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->nTunnelPort = 0;
2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        return OMX_ErrorPortsNotCompatible; /* Our current port is not set up correctly */
2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of VerifyTunnelConnection_JPEGDec */
2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn ComponentTunnelRequest_JPEGDec - Set a tunnel between two OMx components
2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPort - Index Port
2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hTunneledComp - handle for the istance of the tunneled component
2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nTunneledPort - index port of the tunneled component
2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pTunnelSetup - Tunnel setup type
2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
2129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
2130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
2131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentTunnelRequest_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent,
2134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_U32 nPort,
2135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_HANDLETYPE hTunneledComp,
2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_IN OMX_U32 nTunneledPort,
2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                    OMX_INOUT OMX_TUNNELSETUPTYPE* pTunnelSetup)
2138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = NULL;
2141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL;
2142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PARAM_BUFFERSUPPLIERTYPE sBufferSupplier;
2143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_PORT_TYPE *pPort = NULL;
2144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
2146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pHandle = (OMX_COMPONENTTYPE *)hComponent;
2147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate;
2148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
2150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion ComponentTunnelRequest_JPEGDec\n");
2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "nPort = %lu\n",nPort);
2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pPort = pComponentPrivate->pCompPort[nPort];
2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pTunnelSetup == NULL || hTunneledComp == 0) {
2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* cancel previous tunnel */
2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->hTunnelComponent = 0;
2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->nTunnelPort = 0;
2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        OMX_PRBUFFER2(pComponentPrivate->dbg, "OMX_BufferSupplyUnspecified\n");
2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->pParamBufSupplier->eBufferSupplier = OMX_BufferSupplyUnspecified;
2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->eDir != OMX_DirInput && pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->eDir != OMX_DirOutput) {
2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRBUFFER4(pComponentPrivate->dbg, "OMX_ErrorBadParameter\n");
2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            return OMX_ErrorBadParameter;
2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        /* Check if the other component is developed by TI */
2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if(IsTIOMXComponent(hTunneledComp) != OMX_TRUE)
2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin	    OMX_PRCOMM4(pComponentPrivate->dbg, "OMX_ErrorTunnelingUnsupported\n");
2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorTunnelingUnsupported;
2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->hTunnelComponent = hTunneledComp;
2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPort->nTunnelPort = nTunneledPort;
2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef && pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nPortIndex == nPort) {
2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Component is the output (source of data) */
2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pTunnelSetup->eSupplier = pPort->pParamBufSupplier->eBufferSupplier;
2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else {
2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Component is the input (sink of data) */
2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = VerifyTunnelConnection_JPEGDec(pPort, hTunneledComp, pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef);
2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (OMX_ErrorNone != eError)    {
2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin		OMX_PRCOMM5(pComponentPrivate->dbg, "########### Error !! PP VerifyTunnelConnection_JPEGDec failed\n");
2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                /* Invalid connection formats. Return eError */
2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorPortsNotCompatible;
2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* If specified obey output port's preferences. Otherwise choose output */
2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            pPort->pParamBufSupplier->eBufferSupplier = pTunnelSetup->eSupplier;
2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (OMX_BufferSupplyUnspecified == pPort->pParamBufSupplier->eBufferSupplier) {
2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                pPort->pParamBufSupplier->eBufferSupplier = pTunnelSetup->eSupplier = OMX_BufferSupplyOutput;
2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            /* Tell the output port who the supplier is */
2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.nSize = sizeof(sBufferSupplier);
2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.nVersion.s.nVersionMajor = 0x01;
2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.nVersion.s.nVersionMinor = 0x00;
2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.nPortIndex = nTunneledPort;
2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sBufferSupplier.eBufferSupplier = pPort->pParamBufSupplier->eBufferSupplier;
2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_SetParameter(hTunneledComp, OMX_IndexParamCompBufferSupplier, &sBufferSupplier);
2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_GetParameter(hTunneledComp, OMX_IndexParamCompBufferSupplier, &sBufferSupplier);
2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (sBufferSupplier.eBufferSupplier != pPort->pParamBufSupplier->eBufferSupplier) {
2208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                return OMX_ErrorUndefined;
2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}   /* End of ComponentTunnelRequest_JPEGDec */
2216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn Allocate_DSPResources_JPEGDec - Allocate the Ialg structure for each port's
2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * buffer header.
2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nPort - Index Port
2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE Allocate_DSPResources_JPEGDec(OMX_IN JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate,
2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                   OMX_IN OMX_U32 nPortIndex)
2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void *pUalgOutParams;
2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    void *pUalgInpParams;
2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8* pTemp;
2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U8 nBufferCount = -1;
2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1);
2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PRINT1(pComponentPrivate->dbg, "Entering funtion Allocate_DSPResources_JPEGDec\n");
2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    nBufferCount = pComponentPrivate->pCompPort[nPortIndex]->nBuffCount;
2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (nPortIndex == JPEGDEC_INPUT_PORT) {
2244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pUalgInpParams, sizeof(JPEGDEC_UAlgInBufParamStruct) + 256);
2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp = (OMX_U8*)pUalgInpParams;
2246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp += 128;
2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pUalgInpParams = pTemp;
2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nBufferCount]->pUALGParams) = (JPEGDEC_UAlgInBufParamStruct *)(pUalgInpParams);
2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else if (nPortIndex == JPEGDEC_OUTPUT_PORT) {
2251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        OMX_MALLOC(pUalgOutParams, sizeof(JPEGDEC_UAlgOutBufParamStruct) + 256);
2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp = (OMX_U8*)pUalgOutParams;
2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pTemp += 128;
2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pUalgOutParams = pTemp;
2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nBufferCount]->pUALGParams) = (JPEGDEC_UAlgOutBufParamStruct *)(pUalgOutParams);
2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadPortIndex;
2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto EXIT;
2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of Allocate_DSPResources_JPEGDec */
2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic void JPEGDEC_InitBufferFlagTrack(
2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate,
2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nPortIndex)
2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_PORT_TYPE *pPortType = NULL;
2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int i;
2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     pPortType = pComponentPrivate->pCompPort[nPortIndex];
2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    /* assume  pPortType->pPortDef->nBufferCountActual <= NUM_OF_BUFFERSJPEG */
2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin     for (i = 0; i < (int)pPortType->pPortDef->nBufferCountActual; i ++) {
2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferFlagTrack[i].flag = 0;
2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferFlagTrack[i].buffer_id = 0xFFFFFFFF;
2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferMarkTrack[i].buffer_id = 0xFFFFFFFF;
2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        pPortType->sBufferMarkTrack[i].pMarkData = NULL;
2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef KHRONOS_1_1
2291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn ComponentRoleEnum -
2294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hComponent - handle for this instance of the component
2295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param cRole - role performed by the component
2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nIndex - Index
2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE
2298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          OMX_ErrorNone on success
2299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin *          !OMX_ErrorNone on any failure
2300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */
2301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */
2302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinstatic OMX_ERRORTYPE ComponentRoleEnum(OMX_IN OMX_HANDLETYPE hComponent,
2303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_OUT OMX_U8 *cRole,
2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                       OMX_IN OMX_U32 nIndex)
2305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate;
2307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
2308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)(((OMX_COMPONENTTYPE*)hComponent)->pComponentPrivate);
2309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if(nIndex == 0){
2311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        strncpy((char *)cRole, (char *)pComponentPrivate->componentRole.cRole, sizeof(OMX_U8) * OMX_MAX_STRINGNAME_SIZE);
2312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    else {
2314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorNoMore;
2315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
2320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
2325b65f253fdc60f6208a54911bee793d225f23cdf8James Dong  * GetExtensionIndex_JpegDec()
2326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong  * Free a video driver buffer.
2328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
2329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorNone                    Successful operation.
2330b65f253fdc60f6208a54911bee793d225f23cdf8James Dong  *         OMX_ErrorBadParameter            Invalid operation.
2331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_ErrorIncorrectStateOperation If called when port is disabled.
2332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
2333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/
2334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE GetExtensionIndex_JPEGDec(OMX_IN OMX_HANDLETYPE hComponent, OMX_IN OMX_STRING cParameterName, OMX_OUT OMX_INDEXTYPE* pIndexType)
2335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
2336b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    OMX_U16 nIndex;
2337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorUndefined;
2338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    JPEGDEC_CUSTOM_PARAM_DEFINITION sJpegDecCustomParams[] = {
2339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Config.ProgressiveFactor", OMX_IndexCustomProgressiveFactor},
2340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Config.InputFrameWidth", OMX_IndexCustomInputFrameWidth},
2341b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Config.OutputColorFormat", OMX_IndexCustomOutputColorFormat},
2342b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Param.SectionDecode", OMX_IndexCustomSectionDecode},
2343b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Param.SubRegionDecode", OMX_IndexCustomSubRegionDecode},
2344b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Param.SetMaxResolution", OMX_IndexCustomSetMaxResolution},
2345b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"OMX.TI.JPEG.decoder.Debug", OMX_IndexCustomDebug},
2346b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    {"",0x0}
2347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    };
2348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2349b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /* Check parameter validity */
2350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(hComponent);
2351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_CHECK_PARAM(pIndexType);
2352b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    *pIndexType = OMX_IndexMax;
2353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2354b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    for (nIndex = 0; strlen((const char*)sJpegDecCustomParams[nIndex].cCustomParamName); nIndex++){
2355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (!strcmp((const char*)cParameterName, (const char*)(&(sJpegDecCustomParams[nIndex].cCustomParamName)))){
2356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            *pIndexType = sJpegDecCustomParams[nIndex].nCustomParamIndex;
2357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            eError = OMX_ErrorNone;
2358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            break;
2359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
2360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2362b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if(*pIndexType == OMX_IndexMax){
2363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin         eError = OMX_ErrorUnsupportedIndex;
2364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
2365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
2366b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
2367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT:
2368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    return eError;
2369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
2370