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