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/** 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_JpegDec_Utils.c 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for JPEG decoder 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @patth $(CSLPATH)\jpeg_dec\src\OMX_JpegDec_Utils.c 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.2 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * INCLUDE FILES 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*****************************************************************/ 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -----------System and Platform Files ------------------------*/ 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <windows.h> 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <oaf_osal.h> 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <omx_core.h> 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <stdlib.h> 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <unistd.h> 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sys/types.h> 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sys/types.h> 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sys/stat.h> 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <dlfcn.h> 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <malloc.h> 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <memory.h> 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <fcntl.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <sched.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <dbapi.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <string.h> 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <stdio.h> 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <stdlib.h> 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <pthread.h> 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------------------- Program Header Files ----------------------------*/ 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Types.h> 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Component.h> 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Core.h> 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Index.h> 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Image.h> 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Audio.h> 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Video.h> 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_IVCommon.h> 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <OMX_Other.h> 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegDec_Utils.h" 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <usn.h> 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin #include <ResourceManagerProxyAPI.h> 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define JPEGDEC_TIMEOUT 10 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin HINSTANCE g_hLcmlDllHandle = NULL; 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE LCML_CallbackJpegDec(TUsnCodecEvent event, 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * args [10]); 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*------------------------- Function Implementation ------------------*/ 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn GetLCMLHandleJpegDec - Implements the functionality to get LCML handle 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent - components private structure 104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE GetLCMLHandleJpegDec(OMX_HANDLETYPE pComponent) 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifndef UNDER_CE 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE LCML_pHandle; 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin jpegdec_fpo fpGetHandle; 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void *handle = NULL; 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin char *error = NULL; 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin handle = dlopen("libLCML.so", RTLD_LAZY); 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!handle) { 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((error = (char *)dlerror()) != NULL) { 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(error, stderr); 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorComponentNotFound; 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle = dlsym(handle, "GetHandle"); 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((error = (char *)dlerror()) != NULL) { 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fputs(error, stderr); 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidComponent; 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*calling gethandle and passing phandle to be filled */ 140b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ( fpGetHandle != NULL ) { 141b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = (*fpGetHandle)(&LCML_pHandle); 142b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 143b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 144b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInvalidComponent; 145b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto EXIT; 146b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP5(pComponentPrivate->dbg, "eError != OMX_ErrorNone... in (*fpGetHandle)(&LCML_pHandle);\n"); 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDllHandle = handle; 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = (void *)LCML_pHandle; 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML->pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pComponentPrivate; 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin typedef OMX_ERRORTYPE (*LPFNDLLFUNC1)(OMX_HANDLETYPE); 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LPFNDLLFUNC1 fpGetHandle1; 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE LCML_pHandle = NULL; 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pComponent; 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin g_hLcmlDllHandle = LoadLibraryEx(TEXT("OAF_BML.dll"), NULL, 0); 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (g_hLcmlDllHandle == NULL) 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorComponentNotFound; 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fpGetHandle1 = (LPFNDLLFUNC1)GetProcAddress(g_hLcmlDllHandle,TEXT("GetHandle")); 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!fpGetHandle1) { 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(g_hLcmlDllHandle); 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin g_hLcmlDllHandle = NULL; 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorComponentNotFound; 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = fpGetHandle1(&LCML_pHandle); 182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(g_hLcmlDllHandle); 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin g_hLcmlDllHandle = NULL; 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorUndefined; 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_pHandle = NULL; 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML = (LCML_DSP_INTERFACE *)LCML_pHandle; 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML->pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pComponentPrivate; 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of GetLCMLHandle */ 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn DisablePortJpegDec - Implements the functionality to disable the ports 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - paramerer specifying the port type (Index port) 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE DisablePortJpegDec(JPEGDEC_COMPONENT_PRIVATE* pComponentPrivate, 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam1) 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "In DisablePortJpegDec %lu\n", nParam1); 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateExecuting || pComponentPrivate->nCurState == OMX_StatePause) { 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((nParam1 == 0) || (nParam1 == 1) || ((int)nParam1 == -1)) { 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleInternalFlush(pComponentPrivate, nParam1); 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of DisablePort */ 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn EnablePortJpegDec - Implements the functionality to enable the ports 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - paramerer specifying the port type (Index port) 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE EnablePortJpegDec(JPEGDEC_COMPONENT_PRIVATE* pComponentPrivate, 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam1) 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) { 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((nParam1 == 0x0) && 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->nCurState == OMX_StateLoaded) || 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bPopulated))) { 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_INPUT_PORT, 259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((nParam1 == 0x1) && 263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->nCurState == OMX_StateLoaded) || 264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bPopulated))) { 265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OUTPUT_PORT, 271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (((int)nParam1 == -1) && 275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->nCurState == OMX_StateLoaded) || 276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ((pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bPopulated) && 277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bPopulated)))) { 278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_INPUT_PORT, 284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandPortEnable, 290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OUTPUT_PORT, 291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_PORT_POPULATION(pComponentPrivate); 297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Exiting EnablePortJpegDec(), Ports are enabled if no error\n"); 300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of EnablePort */ 303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn Start_ComponentThreadJpegDec - Implements the functionality to start 308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the component thread. Creates data pipes, commmand pipes and initializes 309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Component thread. 310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - paramerer specifying the port type (Index port) 312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE Start_ComponentThreadJpegDec(OMX_HANDLETYPE pComponent) 318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_attr_t attr; 324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin memset(&attr, 0, sizeof(attr)); 325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__inheritsched = PTHREAD_EXPLICIT_SCHED; 326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin attr.__schedparam.__sched_priority = OMX_IMAGE_DECODER_THREAD_PRIORITY; 327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponent); 330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *)pComponent; 331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain free output buffers*/ 336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->nFree_outBuf_Q); 337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to maintain filled input buffers*/ 343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->nFilled_inpBuf_Q); 344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->nCmdPipe); 351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* create the pipe used to send commands to the thread */ 357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pipe (pComponentPrivate->nCmdDataPipe); 358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError) { 359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "JPEG Start_ComponentThread\n"); 364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Create the Component Thread */ 365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->pComponentThread), &attr, OMX_JpegDec_Thread, pComponent); 367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = pthread_create (&(pComponentPrivate->pComponentThread), NULL, OMX_JpegDec_Thread, pComponent); 369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError || !pComponentPrivate->pComponentThread) { 372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ThreadCreated(pComponentPrivate->pPERF, 378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pComponentThread, 379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_FOURS("JPDT")); 380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of Start_ComponentThreadJpegDec */ 385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn Free_ComponentResourcesJpegDec - Implements the functionality to de-init 391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * the component thread. close component thread, Command pipe, data pipe & 392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * LCML pipe. 393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - paramerer specifying the port type (Index port) 395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE Free_ComponentResourcesJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate) 401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE threadError = OMX_ErrorNone; 404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eErr = OMX_ErrorNone; 405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int pthreadError = 0, nRet = 0; 406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE eCmd = OMX_CustomCommandStopThread; 407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct OMX_TI_Debug dbg; 408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 409b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_DBG_INIT_BASE(dbg); 410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (!pComponentPrivate) { 411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 5, 0, "pComponentPrivate is NULL.\n"); 412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dbg = pComponentPrivate->dbg; 418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Inside Free_ComponentResourcesJpegDec \n"); 425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* should clean up in case of crash - implement*/ 426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nIsLCMLActive ==1) { 430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "EMMCodecControlDestroy inside Free_ComponentResourcesJpegDec\n"); 431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_ControlCodec(((LCML_DSP_INTERFACE*)pComponentPrivate->pLCML)->pCodecinterfacehandle,EMMCodecControlDestroy,NULL); 432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nIsLCMLActive = 0; 433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(g_hLcmlDllHandle); 435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin g_hLcmlDllHandle = NULL; 436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pDllHandle); 438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDllHandle = NULL; 439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pComponentPrivate->pPERF, 444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eCmd, 0, PERF_ModuleComponent); 445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Freeing resources\n"); 448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pComponentPrivate->nCmdPipe[1], &eCmd, sizeof(eCmd)); 450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while writing into nCmdPipe\n"); 452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = write(pComponentPrivate->nCmdDataPipe[1], &eCmd, sizeof(eCmd)); 456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while writing into nCmdDataPipe\n"); 458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthreadError = pthread_join(pComponentPrivate->pComponentThread, (void*)&threadError); 462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != pthreadError) { 463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error while closing Component Thread\n"); 465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (OMX_ErrorNone != threadError && OMX_ErrorNone != eError) { 468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE5(pComponentPrivate->dbg, "OMX_ErrorInsufficientResources\n"); 469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error while closing Component Thread\n"); 471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* close the data pipe handles*/ 474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nFree_outBuf_Q[0]); 475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing data pipe\n"); 478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nFilled_inpBuf_Q[0]); 481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing data pipe\n"); 484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nFree_outBuf_Q[1]); 487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing data pipe\n"); 490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nFilled_inpBuf_Q[1]); 493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing data pipe\n"); 496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Close the command pipe handles*/ 499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nCmdPipe[0]); 500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing cmd pipe\n"); 503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nCmdPipe[1]); 506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing cmd pipe\n"); 509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Close the command data pipe handles*/ 512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nCmdDataPipe[0]); 513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing cmd pipe\n"); 516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eErr = close(pComponentPrivate->nCmdDataPipe[1]); 519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (0 != eErr && OMX_ErrorNone == eError) { 520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while closing cmd pipe\n"); 522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pthread_mutex_destroy(&(pComponentPrivate->mJpegDecMutex)) != 0){ 525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error with pthread_mutex_destroy"); 526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pthread_cond_destroy(&(pComponentPrivate->sStop_cond)) != 0){ 529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error with pthread_cond_desroy"); 530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERF, 535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundaryCleanup); 536fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(pComponentPrivate->pPERF); 537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 539b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*LinkedList_DisplayAll (&AllocList); */ 540b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_FREEALL(); 541b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LinkedList_Destroy(&AllocList); 542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(dbg, "Exiting Successfully After Freeing All Resources Errror %x, \n", eError); 545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of Free_ComponentResourcesJpegDec */ 547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn Fill_LCMLInitParamsJpegDec - This function fills the create phase 553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * parameters used by DSP 554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param lcml_dsp handle for this instance of the LCML 555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param arr[] array with the parameters 556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponent handle for this instance of component 557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE Fill_LCMLInitParamsJpegDec(LCML_DSP *lcml_dsp, 563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 arr[], 564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pComponent) 565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL; 571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL; 572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 nScaleFactor; 573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 nFrameWidth; 574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 nFrameHeight; 575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponent); 577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *)pComponent; 578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 579b65f253fdc60f6208a54911bee793d225f23cdf8James Dong JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 580b65f253fdc60f6208a54911bee793d225f23cdf8James Dong 581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef; 582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefOut = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef; 583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->In_BufInfo.DataTrMethod = DMM_METHOD; 585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Out_BufInfo.DataTrMethod = DMM_METHOD; 586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.nNumOfDLLs = OMX_JPEGDEC_NUM_DLLS; 588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].uuid = (struct DSP_UUID *)&JPEGDSOCKET_TI_UUID; 589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[0].DllName,JPEG_DEC_NODE_DLL); 590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[0].eDllType = DLL_NODEOBJECT; 591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].uuid = (struct DSP_UUID *)&JPEGDSOCKET_TI_UUID; 593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[1].DllName,JPEG_DEC_NODE_DLL); 594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[1].eDllType = DLL_DEPENDENT; 595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].uuid =(struct DSP_UUID *) &USN_UUID; 597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin strcpy ((char *)lcml_dsp->NodeInfo.AllUUIDs[2].DllName,USN_DLL); 598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->NodeInfo.AllUUIDs[2].eDllType = DLL_DEPENDENT; 599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->DeviceInfo.TypeofDevice = 0; 601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->SegID = 0; 602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Timeout = -1; 603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Alignment = 0; 604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->Priority = 5; 605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch(pComponentPrivate->pScalePrivate->xWidth){ 608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (0): 609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 100; 610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (1): 612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 50; 613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (2): 615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 25; 616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (3): 618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 13; /*12.5*/ 619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (4): 621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 200; 622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (5): 624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 400; 625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case (6): 627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 800; 628fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 629fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin default: 630fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nScaleFactor = 100; 631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth = pPortDefIn->format.image.nFrameWidth * nScaleFactor / 100; 635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameHeight = pPortDefIn->format.image.nFrameHeight * nScaleFactor / 100; 636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nProgressive == 1) { 638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nFrameHeight <= 144 && 639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 176) { 640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 0; 641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight <= 288 && 643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 352) { 644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 1; 645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight <= 480 && 647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth <= 640) { 648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 2; 649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight<= 1024 && 651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth <= 1280) { 652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 4; 653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight <= 1200 && 655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 1920) { 656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 5; 657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight<= 1536 && 659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 2048) { 660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 6; 661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight<= 1600 && 663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 2560) { 664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 7; 665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight <= 2048 && 667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 2560) { 668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 8; 669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (nFrameHeight <= 2048 && 671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nFrameWidth<= 3200) { 672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 9; 673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = 3; 676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nProgressive == 0) { 679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->ProfileID = -1; 680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nProfileID = lcml_dsp->ProfileID; 682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*filling create phase params*/ 684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[0] = JPGDEC_SNTEST_STRMCNT; 685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[1] = JPGDEC_SNTEST_INSTRMID; 686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[2] = 0; 687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[3] = JPGDEC_SNTEST_INBUFCNT; 688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[4] = JPGDEC_SNTEST_OUTSTRMID; 689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[5] = 0; 690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[6] = JPGDEC_SNTEST_OUTBUFCNT; 691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nProgressive == 1) { 693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "JPEGdec:: nProgressive IMAGE"); 694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[7] = nFrameHeight; 695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((arr[7]%2) != 0) arr[7]++; 696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[8] = nFrameWidth; 697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((arr[8]%2) != 0) arr[8]++; 698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[9] = JPGDEC_SNTEST_PROG_FLAG; 700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "****** Max Width %d Max Height %d\n",(int)pComponentPrivate->sMaxResolution.nWidth,(int)pComponentPrivate->sMaxResolution.nHeight); 703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[7] = pComponentPrivate->sMaxResolution.nHeight; 705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[8] = pComponentPrivate->sMaxResolution.nWidth; 706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[9] = 0; 707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_FormatCbYCrY) { 710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 4; 711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_Format16bitRGB565) { 713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 9; 714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_Format24bitRGB888) { 716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 10; 717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_Format32bitARGB8888) { 719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 11; 720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_Format32bitBGRA8888) { 722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 11; 723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { /*Set DEFAULT (Original) color format*/ 725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[10] = 1; 726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*arr[11] doesn't need to be filled*/ 728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pSectionDecode->bSectionsInput){ /*Slide decoding enable*/ 730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[12] = 1; 731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[12] = 0; 734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->pSectionDecode->bSectionsOutput){ /*Slide decoding enable*/ 737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[13] = 1; 738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[13] = 0; 741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* RGB or ARGB output format for RGB32 images */ 744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[14] = 0; 745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortDefOut->format.image.eColorFormat == OMX_COLOR_Format32bitARGB8888) 746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[14] = 1; /* RGB32 output mode */ 748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin arr[15] = END_OF_CR_PHASE_ARGS; 751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp->pCrPhArgs = arr; 753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Image Width\t= %d\n", arr[8]); 755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Image Height\t= %d\n", arr[7]); 756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Progressive\t= %d\n", arr[9]); 757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Color Format\t= %d\n", arr[10]); 758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Section Decode(Input)\t= %d\n", arr[12]); 759fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "Section Decode(Output)\t= %d\n", arr[13]); 760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of Fill_LCMLInitParamsJpegDec */ 765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * HandleInternalFlush() This function return request to USN to return all buffers 771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * via USN 772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * * 773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate 775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_NoError Success, ready to roll 778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleInternalFlush(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_U32 nParam1) 783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 aParam[4]; 786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE *pLCML = NULL; 787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nCount = 0; 788fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 789fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTimeout = 0; 790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == 0x0 || (int)nParam1 == -1 ) { 796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0; 799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLCML = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLCML)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTimeout = 0; 809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (pComponentPrivate->bFlushComplete == OMX_FALSE) { 811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nTimeout++ > 200000) { 814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Flush input Timeout Error\n"); 815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_FLUSH(pComponentPrivate); 819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nCount]; 823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from InDir\n", pBuffPrivate->pBufferHdr); 836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_inpBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return input buffer %p in idle\n", pBuffPrivate->pBufferHdr); 840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == 0x1 || (int)nParam1 == -1 ) { 849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 1; 852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLCML = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLCML)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTimeout = 0; 862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (pComponentPrivate->bFlushComplete == OMX_FALSE) { 864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nTimeout++ > 200000) { 867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Flush output Timeout Error\n"); 868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_FLUSH(pComponentPrivate); 872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nCount]; 877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "discard %p from InDir\n", pBuffPrivate->pBufferHdr); 890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut ++; 891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFree_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 /* since we don't have this queue anymore, there is nothing to flush. Buffers are handled immediately */ 894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_OUT) { 895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from OutDir\n", pBuffPrivate->pBufferHdr); 896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return output buffer %p in idle (%d)\n", pBuffPrivate->pBufferHdr, pBuffPrivate->eBufferOwner); 900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 916fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 917fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleCommandFlush - Implements the functionality to send flush command. 920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - paramerer specifying the port type (Index port) 922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 HandleCommandFlush(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate, 928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam1) 929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nCount = 0; 932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE* pHandle = NULL; 933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle = NULL; 934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 aParam[3]; 935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nBuffersIn = 0; 936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nBuffersOut = 0; 937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nTimeOut = 0; 939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = pComponentPrivate->pHandle; 944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuffersIn = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; 946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBuffersOut = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual; 947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == JPEGDEC_INPUT_PORT || (int)nParam1 == -1 ) { 949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 0; 952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)(pComponentPrivate->pLCML); 954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "pLcmlHandle %p\n", pLcmlHandle); 956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "eError %x\n", eError); 958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 959b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTimeOut = 0; 963fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 964fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while(pComponentPrivate->bFlushComplete == OMX_FALSE){ 965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nTimeOut++ > 200000){ 968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Flushing Input port timeout Error\n"); 969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_FLUSH(pComponentPrivate); 973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nCount]; 979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from InDir\n", pBuffPrivate->pBufferHdr); 992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_inpBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return input buffer %p in idle\n", pBuffPrivate->pBufferHdr); 996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 1006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_INPUT_PORT, 1007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( nParam1 == JPEGDEC_OUTPUT_PORT|| (int)nParam1 == -1 ){ 1012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* return all output buffers */ 1013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[0] = USN_STRMCMD_FLUSH; 1014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[1] = 1; 1015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin aParam[2] = 0; 1016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 1018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "pLcmlHandle %p\n", pLcmlHandle); 1019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle,EMMCodecControlStrmCtrl, (void*)aParam); 1020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "eError %x\n", eError); 1021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1022b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nTimeOut = 0; 1026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (pComponentPrivate->bFlushComplete == OMX_FALSE) { 1028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sched_yield(); 1030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nTimeOut++ > 200000) { 1031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Flushing Input port timeout Error\n"); 1032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_FLUSH(pComponentPrivate); 1036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_FALSE; 1040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 1042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nCount]; 1043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 1050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 1051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 1055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from InDir\n", pBuffPrivate->pBufferHdr); 1056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut ++; 1057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFree_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 /* since we don't have this queue anymore, there is nothing to flush. Buffers are handled immediately */ 1061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_OUT) { 1062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from OutDir\n", pBuffPrivate->pBufferHdr); 1063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return output buffer %p in idle (%d)\n", pBuffPrivate->pBufferHdr, pBuffPrivate->eBufferOwner); 1067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 1069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 1071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandFlush, 1078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OUTPUT_PORT, 1079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1081b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT: 1082eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong OMX_PRINT1(pComponentPrivate->dbg, "Exiting HandleCommand nFlush Function\n"); 1083b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT: 1084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of HandleCommandFlush */ 1087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleCommandJpegDec - andle State type commands. Depending on the 1093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * State Command received it executes the corresponding code. 1094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 1095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - state to change. 1096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_U32 HandleCommandJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate, 1102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam1) 1103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = NULL; 1106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefIn = NULL; 1107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PARAM_PORTDEFINITIONTYPE* pPortDefOut = NULL; 1108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_HANDLETYPE pLcmlHandle = NULL; 1109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP *lcml_dsp; 1110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 arr[100]; 1111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_CALLBACKTYPE cb; 1112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8 nCount = 0; 1113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nBufToReturn; 1114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U16 nMHzRM = 0; 1116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 lImageResolution = 0; 1117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 1120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 1122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle = (OMX_COMPONENTTYPE *) pComponentPrivate->pHandle; 1123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefIn = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef; 1124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortDefOut= pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef; 1125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin switch ((OMX_STATETYPE)(nParam1)) 1128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 1129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateIdle: 1130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "JPEG HandleCommand: Cmd Idle \n"); 1131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "CURRENT STATE IS %d\n",pComponentPrivate->nCurState); 1132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateIdle) { 1133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((pComponentPrivate->nCurState == OMX_StateLoaded) || 1137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->nCurState == OMX_StateWaitForResources)) { 1138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1140fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySetup); 1142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "Transition state from loaded to idle\n"); 1145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED /* Resource Manager Proxy Calls */ 1147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->rmproxyCallback.RMPROXY_Callback = (void *)ResourceManagerCallback; 1148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lImageResolution = pPortDefIn->format.image.nFrameWidth * pPortDefIn->format.image.nFrameHeight; 1149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_GET_RM_VALUE(lImageResolution, nMHzRM); 1150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "Value sent to RM = %d\n", nMHzRM); 1151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState != OMX_StateWaitForResources) { 1152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = RMProxy_NewSendCommand(pHandle, RMProxy_RequestResource, OMX_JPEG_Decoder_COMPONENT, nMHzRM, 3456, &(pComponentPrivate->rmproxyCallback)); 1154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* resource is not available, need set state to OMX_StateWaitForResources*/ 1157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Resource is not available\n"); 1158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInsufficientResources; 1159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pPortDefIn->bEnabled == OMX_TRUE) && 1165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pPortDefOut->bEnabled == OMX_TRUE)) { 1166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) { 1168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pPortDefIn->bPopulated) && (pPortDefOut->bPopulated)) { 1169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_PORT_POPULATION(pComponentPrivate); 1173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 1177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "Port population time out\n"); 1178b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = GetLCMLHandleJpegDec(pHandle); 1183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP5(pComponentPrivate->dbg, "GetLCMLHandle failed...\n"); 1185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin lcml_dsp = (((LCML_DSP_INTERFACE*)pLcmlHandle)->dspCodec); 1190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Fill_LCMLInitParams in JPEG\n"); 1192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin Fill_LCMLInitParamsJpegDec(lcml_dsp,arr, pHandle); 1193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin cb.LCML_Callback = (void *) LCML_CallbackJpegDec; 1195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nIsLCMLActive == 1) { 1197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "nIsLCMLActive is active\n"); 1198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*calling initMMCodec to init codec with details filled earlier */ 1200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_InitMMCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, NULL, &pLcmlHandle, NULL, &cb); 1201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "InitMMCodec failed...\n"); 1203b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nIsLCMLActive = 1; 1207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle %p\n" , ((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle); 1209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlUsnEos, NULL); 1210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Enable EOS at LCML failed...\n"); 1212b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* need check the resource with RM */ 1215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySetup); 1219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Decoder_COMPONENT, OMX_StateIdle, 3456, NULL); 1223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available Loaded ->Idle\n"); 1225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateIdle; 1229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "JPEGDEC: State has been Set to Idle\n"); 1238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((pComponentPrivate->nCurState == OMX_StateExecuting) || 1240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->nCurState == OMX_StatePause)) { 1241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* if (pComponentPrivate->bPreempted == 1){ 1242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorResourcesPreempted; 1243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 1245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nCount = 0; 1246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ExeToIdleFlag = 0; 1247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "OMX_StateIdle->OMX_StateExecuting-THE CODEC IS STOPPING!!!\n"); 1248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, MMCodecControlStop, NULL); 1250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySteadyState); 1253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE2(pComponentPrivate->dbg, "before stop lock\n"); 1256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->mJpegDecMutex); 1257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while ((pComponentPrivate->ExeToIdleFlag & JPEGD_DSPSTOP) == 0) { 1258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_wait(&pComponentPrivate->sStop_cond, &pComponentPrivate->mJpegDecMutex); 1259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->mJpegDecMutex); 1261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBufToReturn = 0; 1264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent != NULL) && 1265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pParamBufSupplier->eBufferSupplier == OMX_BufferSupplyInput)) { 1266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual ; nCount++) { 1267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nCount]; 1268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Jpeg Returning buffers to Display\n"); 1269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 1277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 1278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 1282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from InDir\n", pBuffPrivate->pBufferHdr); 1283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFree_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 /* since we don't have this queue anymore, there is nothing to discard. Buffers are handled immediately */ 1287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_OUT) { 1288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "discard %p from OutDir\n", pBuffPrivate->pBufferHdr); 1289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1292fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return output buffer %p in idle (%d)\n", pBuffPrivate->pBufferHdr, pBuffPrivate->eBufferOwner); 1293fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1294fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1295fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_EmptyThisBuffer(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent, 1296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nCount]->pBufferHdr); 1297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1298fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1299fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { /* output port is not tunneled */ 1301fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 1302fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[nCount]; 1303fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1305fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1306fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 1310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[1]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 1311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1312fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1313fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1314fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 1315fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "discard %p from InDir\n", pBuffPrivate->pBufferHdr); 1316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut ++; 1317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFree_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#if 0 /* since we don't have this queue anymore, there is nothing to discard. Buffers are handled immediately */ 1320fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_OUT) { 1321fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "discard %p from OutDir\n", pBuffPrivate->pBufferHdr); 1322fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1323fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1324fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1325fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return output buffer %p in idle (%d)\n", pBuffPrivate->pBufferHdr, pBuffPrivate->eBufferOwner); 1326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1327fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 1328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 1330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "all buffers are returned\n"); 1335fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1336fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBufToReturn = 0; 1337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (nCount = 0; nCount < pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->nBufferCountActual; nCount++) { 1338fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pBufferPrivate[nCount]; 1339fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1340fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1342fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1343fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1344fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1345fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), pBuffer), 1346fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(((OMX_BUFFERHEADERTYPE*) pComponentPrivate->pCompPort[0]->pBufferPrivate[nCount]->pBufferHdr), nFilledLen), 1347fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1348fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1349fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1350fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nBufToReturn ++; 1351fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_COMPONENT_IN) { 1352fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "disgard %p from InDir\n", pBuffPrivate->pBufferHdr); 1353fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_inpBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1354fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1355fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1356fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "return input buffer %p in idle\n", pBuffPrivate->pBufferHdr); 1357fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 1358fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1359fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->pBufferHdr); 1360fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1361fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1362fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1363fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1364fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Decoder_COMPONENT, OMX_StateIdle, 3456, NULL); 1365fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1366fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available Executing ->Idle\n"); 1367fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateWaitForResources; 1368fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1369fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1370fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1371fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1372fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1373fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1374fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 1375fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1376fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1377fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1378fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateIdle; 1379fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "current state is %d\n", pComponentPrivate->nCurState); 1380fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1381fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1382fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1383fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1384fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateIdle, 1385fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1386fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ExeToIdleFlag = 0; 1387fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "JPEG-DEC in idle\n"); 1388fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1389fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { /* This means, it is invalid state from application */ 1390fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Error: Invalid State Given by Application\n"); 1391fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1392fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1393fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1394fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1395fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateExecuting: 1396fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "HandleCommand: Cmd Executing \n"); 1397fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateExecuting) { 1398fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1399fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1400fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nCurState == OMX_StateIdle || 1401fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState == OMX_StatePause) { 1402fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1403fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1404fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1405fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundarySteadyState); 1406fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1407fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1408fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1409fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlStart, NULL); 1410fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1411fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "eError is %x\n", eError); 1412fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1413fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Decoder_COMPONENT, OMX_StateExecuting, 3456, NULL); 1414fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1415fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Resources not available\n"); 1416fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateWaitForResources; 1417fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pHandle, 1418fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle->pApplicationPrivate, 1419fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1420fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1421fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1422fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1423fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; 1424fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1425fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1426fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1427fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1428fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateExecuting; 1429fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1430fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1431fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1432fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1433fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1434fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1435fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "JPEG-DEC in OMX_StateExecuting\n"); 1436fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1437fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1438fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 1439fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1440fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1441fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1442fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1443fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StatePause: 1444fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "HandleCommand: Cmd Pause\n"); 1445fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StatePause) { 1446fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1447fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1448fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((pComponentPrivate->nCurState == OMX_StateIdle) || 1449fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->nCurState == OMX_StateExecuting)) { 1450fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1451fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlPause, NULL); 1452fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1453fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "Error during EMMCodecControlPause.. error is %d.\n", eError); 1454fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1455fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1456fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1457fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1458fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1459fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundarySteadyState); 1460fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1461fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1462fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StatePause; 1463fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1464fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1465fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE4(pComponentPrivate->dbg, "Error: Invalid State Given by Application\n"); 1466fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 1467fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1468fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1469fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1470fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateInvalid: 1471fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateInvalid::\n"); 1472fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateInvalid) { 1473fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1474fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1475fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1476fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateExecuting 1477fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin || pComponentPrivate->nCurState == OMX_StatePause){ 1478fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "HandleInternalFlush\n\n"); 1479fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleInternalFlush(pComponentPrivate, OMX_ALL); /*OMX_ALL = -1 OpenMax 1.1*/ 1480fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(eError != OMX_ErrorNone){ 1481fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "eError from HandleInternalFlush = %x\n", eError); 1482fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorNone; /* Clean error, already sending the component to Invalid state*/ 1483fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1484fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1485fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "OMX_StateInvalid\n\n"); 1486fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateInvalid; 1487fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1488fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pComponentPrivate->nToState == OMX_StateInvalid){ /*if the IL client call directly send to invalid state*/ 1489fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1490fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1491fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1492fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1493fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1494fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1495fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1496fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ /*When the component go to invalid state by it self*/ 1497fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorInvalidState; 1498fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1499fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1500fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1501fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateLoaded: 1502fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRSTATE2(pComponentPrivate->dbg, "go to loaded state\n"); 1503fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateLoaded) { 1504fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1505fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1506fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ((pComponentPrivate->nCurState == OMX_StateIdle) || 1507fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->nCurState == OMX_StateWaitForResources)) { 1508fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1509fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1510fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1511fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryStart | PERF_BoundaryCleanup); 1512fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1513fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1514fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1515fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateWaitForResources) { 1516fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_CancelWaitForResource, OMX_JPEG_Decoder_COMPONENT, 0, 3456, NULL); 1517fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1518fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "CancelWaitForResource Failed\n"); 1519fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1520fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1521fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1522fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1523fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1524fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1525fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Ports have to be unpopulated before transition completes */ 1526fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while (1) { 1527fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((!pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]->pPortDef->bPopulated) && 1528fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (!pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pPortDef->bPopulated)) { 1529fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1530fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1531fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1532fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_WAIT_PORT_UNPOPULATION(pComponentPrivate); 1533fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1534fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1535fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone){ /*Verify if UnPopulation compleate*/ 1536b65f253fdc60f6208a54911bee793d225f23cdf8James Dong goto PRINT_EXIT; 1537fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1538fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1539fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1540fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState != OMX_StateWaitForResources) { 1541fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_FreeResource, OMX_JPEG_Decoder_COMPONENT, 0, 3456, NULL); 1542fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1543fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "Cannot Free Resources\n"); 1544fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1545fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1546fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1547fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1548fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1549fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->pLCML != NULL) && 1550fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->nIsLCMLActive == 1)) { 1551fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle =(LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1552fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_ControlCodec(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, EMMCodecControlDestroy, NULL); 1553fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pLCML = NULL; 1554fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nIsLCMLActive = 0; 1555fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 1556fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FreeLibrary(g_hLcmlDllHandle); 1557fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin g_hLcmlDllHandle = NULL; 1558fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 1559fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin dlclose(pComponentPrivate->pDllHandle); 1560fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pDllHandle = NULL; 1561fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1562fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1563fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1564fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1565fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1566fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Boundary(pComponentPrivate->pPERFcomp, 1567fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_BoundaryComplete | PERF_BoundaryCleanup); 1568fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1569fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1570fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Restart Buffer counting*/ 1571fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInPortIn = 0; 1572fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut = 0; 1573fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1574fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateLoaded; 1575fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1576fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->nCurState == OMX_StateIdle) && 1577fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (pComponentPrivate->bPreempted == 1 )){ 1578fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPreempted = 0; 1579fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorResourcesLost; 1580fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1581fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1582fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1583fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1584fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1585fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1586fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_StateLoaded, 1587fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1588fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1589fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1590fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1591fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 1592fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1593fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1594fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1595fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateWaitForResources: 1596fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1597fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateWaitForResources) { 1598fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorSameState; 1599fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1600fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nCurState == OMX_StateLoaded) { 1601fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1602fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 1603fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError= RMProxy_NewSendCommand(pHandle, RMProxy_StateSet, OMX_JPEG_Decoder_COMPONENT, OMX_StateWaitForResources, 3456, NULL); 1604fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1605fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR4(pComponentPrivate->dbg, "RMProxy_NewSendCommand(OMX_StateWaitForResources) failed\n"); 1606fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1607fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1608fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1609fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1610fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateWaitForResources; 1611fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1612fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1613fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 1614fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 1615fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 1616fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1617fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1618fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1619fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorIncorrectStateTransition; 1620fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1621fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1622fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1623fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin case OMX_StateMax: 1624fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "HandleCommand: Cmd OMX_StateMax::\n"); 1625fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 1626fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } /* End of Switch */ 1627fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1628b65f253fdc60f6208a54911bee793d225f23cdf8James DongPRINT_EXIT: 1629eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong OMX_PRINT1(pComponentPrivate->dbg, "Exiting HandleCommand Function %x\n", eError); 1630b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT: 1631fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1632fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 1633fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* End of HandleCommandJpegDec */ 1634fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1635fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1636fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1637fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleFreeOutputBufferFromAppJpegDec - Handle free output buffer from 1638fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * application reading in the nFree_outBuf_Q pipe, and queue to the LCML. 1639fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 1640fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - state to change. 1641fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1642fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1643fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1644fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1645fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1646fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleFreeOutputBufferFromAppJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate) 1647fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1648fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1649fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1650fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_UAlgOutBufParamStruct *ptJPGDecUALGOutBufParam = NULL; 1651fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle = NULL; 1652fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL; 1653fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1654fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1655fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 1656fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 1657fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1658fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1659fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%s: read outport (in) buff header %p\n", __FUNCTION__, pBuffHead); 1660fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1661fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFree_outBuf_Q[0], &pBuffHead, sizeof(pBuffHead)); 1662fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1663fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 1664fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n"); 1665fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1666fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1667fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1668fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1669fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1670fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pOutputPortPrivate; 1671fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1672fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->nCurState == OMX_StateIdle) || (pComponentPrivate->nToState == OMX_StateIdle)) { 1673fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1674fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Going to state %d, return buffer %p to client\n", pComponentPrivate->nToState, pBuffHead); 1675fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1676fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut ++; 1677fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 1678fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1679fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead); 1680fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1681fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1682fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1683fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1684fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1685fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGOutBufParam = (JPEGDEC_UAlgOutBufParamStruct *)pBuffPrivate->pUALGParams; 1686fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGOutBufParam->lOutBufCount = 0; 1687fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGOutBufParam->ulOutNumFrame = 1; 1688fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGOutBufParam->ulOutFrameAlign = 4; 1689fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGOutBufParam->ulOutFrameSize = pBuffHead->nAllocLen; 1690fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1691fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_DSP; 1692fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1693fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1694fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1695fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 1696fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 1697fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 1698fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1699fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1700fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(((LCML_DSP_INTERFACE*)pLcmlHandle)->pCodecinterfacehandle, 1701fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecOuputBuffer, 1702fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 1703fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nAllocLen, 1704fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 1705fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)ptJPGDecUALGOutBufParam, 1706fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(JPEGDEC_UAlgOutBufParamStruct), 1707fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8*)pBuffHead); 1708fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1709fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1710fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1711fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1712fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1713fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* end of HandleFreeOutputBufferFromAppJpegDec */ 1714fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1715fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1716fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1717fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1718fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleDataBuf_FromAppJpegDec - Handle data to be encoded form 1719fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * application and queue to the LCML. 1720fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 1721fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - state to change. 1722fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1723fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1724fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1725fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1726fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1727fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleDataBuf_FromAppJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate) 1728fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1729fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1730fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1731fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin LCML_DSP_INTERFACE* pLcmlHandle = NULL; 1732fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_UAlgInBufParamStruct *ptJPGDecUALGInBufParam = NULL; 1733fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL; 1734fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int nRet; 1735fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1736fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 1737fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 1738fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML; 1739fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1740fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin nRet = read(pComponentPrivate->nFilled_inpBuf_Q[0], &(pBuffHead), sizeof(pBuffHead)); 1741fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (nRet == -1) { 1742fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from the pipe\n"); 1743fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1744fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1745fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "HandleDataBuf_FromAppJpegDec: read inport (in) buff header %p\n", pBuffHead); 1746fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1747fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pInputPortPrivate; 1748fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((pComponentPrivate->nCurState == OMX_StateIdle) || (pComponentPrivate->nToState == OMX_StateIdle)) { 1749fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1750fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Going to state %d, return buffer %p to client\n", pComponentPrivate->nToState, pBuffHead); 1751fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1752fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 1753fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1754fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead); 1755fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1756fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1757fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1758fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam = (JPEGDEC_UAlgInBufParamStruct *)pBuffPrivate->pUALGParams; 1759b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin ptJPGDecUALGInBufParam->ulAlphaRGB = 0xFF; 1760fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->lInBufCount = 0; 1761fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulInNumFrame = 1; 1762fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulInFrameAlign = 4; 1763fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulInFrameSize = pBuffHead->nFilledLen; 1764fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulInDisplayWidth = (int)pComponentPrivate->nInputFrameWidth; 1765fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulInResizeOption = (int)pComponentPrivate->pScalePrivate->xWidth; 1766fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Slide decode*/ 1767fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulNumMCURow = (int)pComponentPrivate->pSectionDecode->nMCURow; 1768fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulnumAU = (int)pComponentPrivate->pSectionDecode->nAU; 1769fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*Section decode*/ 1770fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulXOrg = (int)pComponentPrivate->pSubRegionDecode->nXOrg; 1771fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulYOrg = (int)pComponentPrivate->pSubRegionDecode->nYOrg; 1772fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulXLength = (int)pComponentPrivate->pSubRegionDecode->nXLength; 1773fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->ulYLength = (int)pComponentPrivate->pSubRegionDecode->nYLength; 1774fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1775fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1776fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nOutputColorFormat == OMX_COLOR_FormatCbYCrY) { 1777fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->forceChromaFormat= 4; 1778fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->RGB_Format = 9; /*RGB_Format should be set even if it's not use*/ 1779fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1780fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nOutputColorFormat == OMX_COLOR_Format16bitRGB565) { 1781fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->forceChromaFormat = 9; 1782fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->RGB_Format = 9; 1783fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1784fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nOutputColorFormat == OMX_COLOR_Format24bitRGB888) { 1785fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->forceChromaFormat = 10; 1786fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->RGB_Format = 10; 1787fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1788b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else if (pComponentPrivate->nOutputColorFormat == OMX_COLOR_Format32bitARGB8888 || 1789b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nOutputColorFormat == OMX_COLOR_Format32bitBGRA8888 ) { 1790fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->forceChromaFormat = 11; 1791fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->RGB_Format = 11; 1792fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1793fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { /*Set DEFAULT (Original) color format*/ 1794fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->forceChromaFormat = 1; 1795fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam->RGB_Format = 9; /*RGB_Format should be set even if it's not use*/ 1796fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1797fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ptJPGDecUALGInBufParam->forceChromaFormat = %lu\n", ptJPGDecUALGInBufParam->forceChromaFormat ); 1798fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_DSP; 1799fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1800fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1801fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1802fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 1803fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 1804fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 1805fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1806fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1807fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "forceChromaFormat\t= %lu\n", ptJPGDecUALGInBufParam->forceChromaFormat); 1808fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "RGB_Format\t= %lu\n", ptJPGDecUALGInBufParam->RGB_Format); 1809fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulInFrameSize\t= %lu\n", ptJPGDecUALGInBufParam->ulInFrameSize); 1810fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulInDisplayWidth\t= %lu\n", ptJPGDecUALGInBufParam->ulInDisplayWidth); 1811fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulInResizeOption\t= %lu\n", ptJPGDecUALGInBufParam->ulInResizeOption); 1812fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulNumMCURow\t= %lu\n", ptJPGDecUALGInBufParam->ulNumMCURow); 1813fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulnumAU\t= %lu\n", ptJPGDecUALGInBufParam->ulnumAU); 1814fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulXOrg\t= %lu ", ptJPGDecUALGInBufParam->ulXOrg); 1815fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulYOrg\t= %lu\n", ptJPGDecUALGInBufParam->ulYOrg); 1816fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulXLength\t= %lu ", ptJPGDecUALGInBufParam->ulXLength); 1817fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP0(pComponentPrivate->dbg, "ulXLenght\t= %lu\n", ptJPGDecUALGInBufParam->ulYLength); 1818fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER0(pComponentPrivate->dbg, "pBuffHead->nFlags\t= %lu\n", pBuffHead->nFlags); 1819fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER0(pComponentPrivate->dbg, "Queue INPUT bufheader %p\n", pBuffHead); 1820fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = LCML_QueueBuffer(pLcmlHandle->pCodecinterfacehandle, 1821fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin EMMCodecInputBuffer, 1822fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 1823fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nAllocLen, 1824fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 1825fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *) ptJPGDecUALGInBufParam, 1826fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sizeof(JPEGDEC_UAlgInBufParamStruct), 1827fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U8 *)pBuffHead); 1828fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1829fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 1830fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1831fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1832fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1833fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 1834fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1835fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of HandleDataBuf_FromAppJpegDec */ 1836fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1837fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1838fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1839fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1840fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleDataBuf_FromDspJpegDec - Handle encoded data form DSP and 1841fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * render to application or another component. 1842fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 1843fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - state to change. 1844fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1845fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1846fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1847fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1848fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1849fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleDataBuf_FromDspJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead) 1850fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1851fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1852fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL; 1853fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1854fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 1855fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 1856fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1857fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Buffer Came From DSP (output port)\n"); 1858fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1859fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pOutputPortPrivate; 1860fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1861fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->pMarkData && pBuffHead->hMarkTargetComponent == pComponentPrivate->pHandle) { 1862fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "send OMX_MarkEvent\n"); 1863fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 1864fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1865fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventMark, 1866fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OUTPUT_PORT, 1867fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1868fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pMarkData); 1869fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1870fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1871fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*TUNNEL HERE*/ 1872fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent != NULL) { 1873fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Jpeg Sending Output buffer to TUNNEL component\n"); 1874fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1875fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1876fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1877fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[0]->pBufferHdr->pBuffer, 1878fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->pBufferPrivate[0]->pBufferHdr->nFilledLen, 1879fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 1880fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1881fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1882fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_TUNNEL_COMPONENT; 1883fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_EmptyThisBuffer(pComponentPrivate->pCompPort[JPEGDEC_OUTPUT_PORT]->hTunnelComponent, pBuffHead); 1884fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1885fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1886fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1887fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1888fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1889fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pBuffer, 1890fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen, 1891fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1892fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1893fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1894fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1895fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffHead->nFlags & OMX_BUFFERFLAG_EOS) { 1896fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "%s::%d:Received OMX_BUFFERFLAG_EOS, nFalgs= %lx\n", __FUNCTION__, __LINE__, pBuffHead->nFlags); 1897fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, 1898fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1899fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventBufferFlag, 1900fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OUTPUT_PORT, 1901fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags, 1902fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 1903fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1904fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1905fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "HandleDataBuf_FromDspJpegDec: buf %p pBuffPrivate->eBufferOwner %d\n", pBuffHead, pBuffPrivate->eBufferOwner); 1906fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1907fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1908fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1909fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.FillBufferDone(pComponentPrivate->pHandle, 1910fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1911fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead); 1912fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1913fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1914fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1915fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1916eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong OMX_PRINT1(pComponentPrivate->dbg, "Exit\n"); 1917b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT: 1918fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1919fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of HandleDataBuf_FromDspJpegDec */ 1920fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1921fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1922fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1923fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1924fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1925fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @fn HandleFreeDataBufJpegDec - Handle emptied input data from DSP and 1926fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * return to application or another component. 1927fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate - components private structure 1928fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param nParam1 - state to change. 1929fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1930fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1931fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1932fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 1933fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1934fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE HandleFreeDataBufJpegDec(JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate, OMX_BUFFERHEADERTYPE* pBuffHead ) 1935fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1936fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1937fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL; 1938fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1939fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CHECK_PARAM(pComponentPrivate); 1940fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 1941fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1942fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "JPEG Entering HandleFreeBuf Function\n"); 1943fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1944fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pInputPortPrivate; 1945fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1946fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner != JPEGDEC_BUFFER_CLIENT) { 1947fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_CLIENT; 1948fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1949fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 1950fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingFrame(pComponentPrivate->pPERFcomp, 1951fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PREF(pBuffHead,pBuffer), 1952fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 0, 1953fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleHLMM); 1954fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 1955fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1956fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "emptydone buf %p\n", pBuffHead); 1957fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1958fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EmptyBufferDone(pComponentPrivate->pHandle, 1959fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 1960fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead); 1961fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1962fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1963eaaadaf5ebb5e352e2ed4a12714f5d2363da0dcdJames Dong OMX_PRINT1(pComponentPrivate->dbg, "JPEGexiting\n"); 1964b65f253fdc60f6208a54911bee793d225f23cdf8James DongEXIT: 1965fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 1966fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of HandleFreeDataBufJpegDec */ 1967fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1968fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1969fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1970fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1971fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 1972fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * LCML_CallbackJpegDec() - handle callbacks from LCML 1973fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pComponentPrivate handle for this instance of the component 1974fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param argsCb = argument list 1975fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: OMX_ERRORTYPE 1976fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorNone on success 1977fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * !OMX_ErrorNone on failure 1978fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 1979fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 1980fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_ERRORTYPE LCML_CallbackJpegDec (TUsnCodecEvent event, 1981fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin void * argsCb [10]) 1982fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 1983fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 1984fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 1985fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BUFFERHEADERTYPE* pBuffHead = NULL; 1986fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_UAlgInBufParamStruct * ptJPGDecUALGInBufParam = NULL; 1987fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_PORT_TYPE *pPortType = NULL; 1988fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U8* pBuffer = NULL; 1989fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_BUFFER_PRIVATE* pBuffPrivate = NULL; 1990fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int i = 0; 1991fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 1992fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( ((LCML_DSP_INTERFACE*)argsCb[6] ) != NULL ) { 1993fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE*)((LCML_DSP_INTERFACE*)argsCb[6])->pComponentPrivate; 1994fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1995fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else { 1996fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMXDBG_PRINT(stderr, ERROR, 5, 0, "wrong in LCML callback, exit\n"); 1997fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 1998fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 1999fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2000fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 2001fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2002fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecBufferProcessed) { 2003fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [0] == EMMCodecOuputBuffer) { 2004fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 2005fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 2006fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pOutputPortPrivate; 2007fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFilledLen = (int)argsCb[8]; 2008fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "nFilled Len from DSP = %d\n",(int)argsCb[8]); 2009fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2010fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2011fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 2012fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, 2013fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) argsCb[2], 2014fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2015fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2016fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2017fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_DSP) { 2018fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut ++; 2019fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2020fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2021fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "Filled Data from DSP \n"); 2022fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "buffer summary (LCML for output buffer %p) %lu %lu\n", pBuffHead, 2023fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nInPortIn, 2024fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nOutPortOut); 2025fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2026fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType = pComponentPrivate->pCompPort[JPEGDEC_INPUT_PORT]; 2027fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if((pBuffHead->nFlags == OMX_FALSE) && (pComponentPrivate->pSectionDecode->nMCURow == OMX_FALSE)){ 2028fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < (int)(pPortType->pPortDef->nBufferCountActual); i ++) { 2029fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortType->sBufferFlagTrack[i].buffer_id == pComponentPrivate->nOutPortOut) { 2030fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "JPEGdec:: %d: output buffer %lu has flag %lx\n", __LINE__, 2031fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].buffer_id, 2032fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].flag); 2033fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags = pPortType->sBufferFlagTrack[i].flag; 2034fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].flag = 0; 2035fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].buffer_id = 0xFFFFFFFF; 2036fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2037fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2038fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2039fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin }else{ 2040fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < (int)pPortType->pPortDef->nBufferCountActual; i ++) { 2041fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortType->sBufferFlagTrack[i].buffer_id == pComponentPrivate->nOutPortOut) { 2042fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER1(pComponentPrivate->dbg, "JPEGdec:: %d: OUTPUT buffer %lu has flag %lx\n", __LINE__, 2043fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].buffer_id, 2044fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].flag); 2045fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(pPortType->sBufferFlagTrack[i].flag & OMX_BUFFERFLAG_EOS){ 2046fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].flag = pPortType->sBufferFlagTrack[i].flag & (!(OMX_BUFFERFLAG_EOS)); 2047fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->nFlags |= pPortType->sBufferFlagTrack[i].flag; 2048fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2049fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].flag = 0; 2050fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferFlagTrack[i].buffer_id = 0xFFFFFFFF; 2051fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2052fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2053fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2054fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2055fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin for (i = 0; i < (int)pPortType->pPortDef->nBufferCountActual; i ++) { 2056fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pPortType->sBufferMarkTrack[i].buffer_id == pComponentPrivate->nOutPortOut) { 2057fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "buffer ID %lu has mark (output port)\n", pPortType->sBufferMarkTrack[i].buffer_id); 2058fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->pMarkData = pPortType->sBufferMarkTrack[i].pMarkData; 2059fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead->hMarkTargetComponent = pPortType->sBufferMarkTrack[i].hMarkTargetComponent; 2060fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pPortType->sBufferMarkTrack[i].buffer_id = 0xFFFFFFFF; 2061fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 2062fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2063fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2064fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_DSP) { 2065fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_COMPONENT_OUT; 2066fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleDataBuf_FromDspJpegDec(pComponentPrivate, pBuffHead); 2067fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2068fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "Error while reading dsp out q\n"); 2069fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2070fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2071fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2072fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUndefined, 2073fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2074fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from Component Thread while processing dsp Responses"); 2075fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2076fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2077fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2078fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int) argsCb [0] == EMMCodecInputBuffer) { 2079fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffHead = (OMX_BUFFERHEADERTYPE*)argsCb[7]; 2080fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin ptJPGDecUALGInBufParam = (JPEGDEC_UAlgInBufParamStruct *)argsCb[3]; 2081fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer = (OMX_U8*)argsCb[1]; 2082fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate = pBuffHead->pInputPortPrivate; 2083fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2084fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2085fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedFrame(pComponentPrivate->pPERFcomp, 2086fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffer, 2087fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin (OMX_U32) argsCb[8], 2088fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleCommonLayer); 2089fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2090fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pBuffPrivate->eBufferOwner == JPEGDEC_BUFFER_DSP) { 2091fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pBuffPrivate->eBufferOwner = JPEGDEC_BUFFER_COMPONENT_OUT; 2092fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleFreeDataBufJpegDec(pComponentPrivate, pBuffHead); 2093fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 2094fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "Error while processing free input Buffers\n"); 2095fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2096fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2097fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2098fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorUndefined, 2099fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error while processing free input buffers"); 2101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecProcessingStoped) { 2107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "ENTERING TO EMMCodecProcessingStoped \n\n"); 2108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nToState == OMX_StateIdle) { 2109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->ExeToIdleFlag |= JPEGD_DSPSTOP; 2110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&pComponentPrivate->mJpegDecMutex); 2113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&pComponentPrivate->sStop_cond); 2114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&pComponentPrivate->mJpegDecMutex); 2115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecDspError) { 2119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "LCML_Callback : DSP [0]->%x, [4]->%x, [5]->%x\n", (int)argsCb[0] ,(int)argsCb[4], (int)argsCb[5]); 2120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Play compleated if: 0x500 = %x\n", (int)argsCb[5]); 2121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(!((int)argsCb[5] == 0x500)){ 2122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 2127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 2128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateInvalid; 2130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 2134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorCritical, 2135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "DSP Hardware Error"); 2136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef DSP_MMU_FAULT_HANDLING 2140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Cheking for MMU_fault */ 2141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if((argsCb[4] == (void *)NULL) && (argsCb[5] == (void*)NULL)) { 2142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StateInvalid; 2143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_EventError, 2146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_ErrorInvalidState, 2147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_TI_ErrorCritical, 2148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin "DSP MMU FAULT"); 2149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif 2151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecInternalError) { 2154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = OMX_ErrorHardware; 2155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP4(pComponentPrivate->dbg, "JPEG-D: EMMCodecInternalError\n"); 2156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorHardware, 2160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorCritical, 2161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 2163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecProcessingPaused) { 2165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState = OMX_StatePause; 2166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Send StateChangeNotification to application */ 2167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP2(pComponentPrivate->dbg, "ENTERING TO EMMCodecProcessingPaused \n"); 2168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventCmdComplete, 2171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_CommandStateSet, 2172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState, 2173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (event == EMMCodecStrmCtrlAck) { 2176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "event = EMMCodecStrmCtrlAck\n"); 2177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ((int)argsCb [0] == USN_ERR_NONE) { 2178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Callback: no error\n"); 2179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bFlushComplete = OMX_TRUE; 2180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_lock(&(pComponentPrivate->mJpegDecFlushMutex)); 2181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_cond_signal(&(pComponentPrivate->sFlush_cond)); 2182fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pthread_mutex_unlock(&(pComponentPrivate->mJpegDecFlushMutex)); 2183fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRDSP1(pComponentPrivate->dbg, "Exiting the LCML_Callback function\n"); 2188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return eError; 2190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of LCML_CallbackJpegDec */ 2191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED 2195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * ResourceManagerCallback() - handle callbacks from Resource Manager 2198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param cbData Resource Manager Command Data Structure 2199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @return: void 2200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ========================================================================== */ 2202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid ResourceManagerCallback(RMPROXY_COMMANDDATATYPE cbData) 2204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE Cmd = OMX_CommandStateSet; 2206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)cbData.hComponent; 2207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_COMPONENT_PRIVATE *pComponentPrivate = NULL; 2208b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_ERRORTYPE eError = *(cbData.RM_Error); 2209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate = (JPEGDEC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 2211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGDEC_OMX_CONF_CHECK_CMD(pComponentPrivate, 1, 1); 2213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2214b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRINT1(pComponentPrivate->dbg, "RM_Error = %x\n", eError); 2215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2216b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if (eError == OMX_RmProxyCallback_ResourcesPreempted) { 2217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->bPreempted = 1; 2219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateExecuting || 2221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nCurState == OMX_StatePause) { 2222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle, 2224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pHandle->pApplicationPrivate, 2225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, 2226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ErrorResourcesPreempted, 2227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TI_ErrorSevere, 2228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nToState = OMX_StateIdle; 2231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "Component Preempted. Going to IDLE State.\n"); 2232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if (pComponentPrivate->nCurState == OMX_StateIdle){ 2234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nToState = OMX_StateLoaded; 2235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "Component Preempted. Going to LOADED State.\n"); 2236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->nToState, PERF_ModuleComponent); 2240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->nCmdPipe[1], &Cmd, sizeof(Cmd)); 2243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->nToState) ,sizeof(OMX_U32)); 2244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else if (eError == OMX_RmProxyCallback_ResourcesAcquired ){ 2247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StateWaitForResources) /* Wait for Resource Response */ 2249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin { 2250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler ( 2251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pHandle, pHandle->pApplicationPrivate, 2252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventResourcesAcquired, 0,0, 2253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin NULL); 2254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nToState = OMX_StateIdle; 2256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2257fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 2258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_SendingCommand(pComponentPrivate->pPERF, Cmd, pComponentPrivate->nToState, PERF_ModuleComponent); 2259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->nCmdPipe[1], &Cmd, sizeof(Cmd)); 2262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin write (pComponentPrivate->nCmdDataPipe[1], &(pComponentPrivate->nToState) ,sizeof(OMX_U32)); 2263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRMGR2(pComponentPrivate->dbg, "OMX_RmProxyCallback_ResourcesAcquired.\n"); 2264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2267b65f253fdc60f6208a54911bee793d225f23cdf8James Dong EXIT: 2268b65f253fdc60f6208a54911bee793d225f23cdf8James Dong OMX_PRMGR2(pComponentPrivate->dbg, "OMX_RmProxyCallback exiting.\n"); 2269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 2270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 2271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2272fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 2277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * IsTIOMXComponent() 2278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Check if the component is TI component. 2280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param hTunneledComp Component Tunnel Pipe 2282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_TRUE Input is a TI component. 2284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_FALSE Input is a not a TI component. 2285fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 2286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 2287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 2288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_BOOL IsTIOMXComponent(OMX_HANDLETYPE hComp) 2289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 2290fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 2291b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_STRING pTunnelcComponentName = NULL; 2292b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_VERSIONTYPE* pTunnelComponentVersion = NULL; 2293b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_VERSIONTYPE* pSpecVersion = NULL; 2294b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_UUIDTYPE* pComponentUUID = NULL; 2295b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin char *pSubstring = NULL; 2296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_BOOL bResult = OMX_TRUE; 2297fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2298b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MALLOC(pTunnelcComponentName, 128); 2299b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MALLOC(pTunnelComponentVersion, sizeof(OMX_VERSIONTYPE)); 2300b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MALLOC(pSpecVersion, sizeof(OMX_VERSIONTYPE)); 2301b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_MALLOC(pComponentUUID, sizeof(OMX_UUIDTYPE)); 2302b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2303b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin eError = OMX_GetComponentVersion (hComp, pTunnelcComponentName, pTunnelComponentVersion, pSpecVersion, pComponentUUID); 2304fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2305b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* Check if tunneled component is a TI component */ 2306b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pSubstring = strstr(pTunnelcComponentName, "OMX.TI."); 2307b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pSubstring == NULL) { 2308fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin bResult = OMX_FALSE; 2309fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 2310fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2311fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 2312b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_FREE(pTunnelcComponentName); 2313b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_FREE(pTunnelComponentVersion); 2314b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_FREE(pSpecVersion); 2315b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin OMX_FREE(pComponentUUID); 2316fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return bResult; 2317fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} /* End of IsTIOMXComponent */ 2318fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2319b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Create(LinkedList *LinkedList) { 2320b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LinkedList->pRoot = NULL; 2321b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2322b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2323b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_AddElement(LinkedList *LinkedList, void *pValue) { 2324b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* create new node and fill the value */ 2325b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pNewNode = (Node *)malloc(sizeof(Node)); 2326b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if ( pNewNode != NULL ) { 2327b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pNewNode->pValue = (void *)pValue; 2328b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*printf("LinkedList:::: Pointer=%p has been added.\n", pNewNode->pValue); */ 2329b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* add new node on the root to implement quick FIFO */ 2330b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /* modify new node pointers */ 2331b65f253fdc60f6208a54911bee793d225f23cdf8James Dong if(LinkedList->pRoot == NULL) { 2332b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pNewNode->pNextNode = NULL; 2333b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2334b65f253fdc60f6208a54911bee793d225f23cdf8James Dong else { 2335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong pNewNode->pNextNode = LinkedList->pRoot; 2336b65f253fdc60f6208a54911bee793d225f23cdf8James Dong } 2337b65f253fdc60f6208a54911bee793d225f23cdf8James Dong /*modify root */ 2338b65f253fdc60f6208a54911bee793d225f23cdf8James Dong LinkedList->pRoot = pNewNode; 2339b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2340b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2341b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2342b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeElement(LinkedList *LinkedList, void *pValue) { 2343b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pNode = LinkedList->pRoot; 2344b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pPastNode = NULL; 2345b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (pNode != NULL) { 2346b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if (pNode->pValue == pValue) { 2347b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pTempNode = pNode->pNextNode; 2348b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin if(pPastNode == NULL) { 2349b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LinkedList->pRoot = pTempNode; 2350b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2351b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin else { 2352b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPastNode->pNextNode = pTempNode; 2353b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2354b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*printf("LinkedList:::: Pointer=%p has been freed\n", pNode->pValue); */ 2355b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(pNode->pValue); 2356b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(pNode); 2357b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin break; 2358b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2359b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pPastNode = pNode; 2360b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pNode = pNode->pNextNode; 2361b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2362b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2363b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2364b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_FreeAll(LinkedList *LinkedList) { 2365b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pTempNode; 2366b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nodes = 0; 2367b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (LinkedList->pRoot != NULL) { 2368b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pTempNode = LinkedList->pRoot->pNextNode; 2369b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*printf("LinkedList:::: Pointer=%p has been freed\n", LinkedList->pRoot->pValue); */ 2370b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(LinkedList->pRoot->pValue); 2371b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin free(LinkedList->pRoot); 2372b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin LinkedList->pRoot = pTempNode; 2373b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nodes++; 2374b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2375b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /*printf("==================No. of deleted nodes: %d=======================================\n\n", nodes); */ 2376b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2377b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2378b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_DisplayAll(LinkedList *LinkedList) { 2379b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin Node *pNode = LinkedList->pRoot; 2380b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin int nodes = 0; 2381b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("\n================== Displaying contents of linked list=%p=====================\n", LinkedList); 2382b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("root->\n"); 2383b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin while (pNode != NULL) { 2384b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("[Value=%p, NextNode=%p]->\n", pNode->pValue, pNode->pNextNode); 2385b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin pNode = pNode->pNextNode; 2386b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin nodes++; 2387b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin } 2388b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin printf("==================No. of existing nodes: %d=======================================\n\n", nodes); 2389b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2390b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2391b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid LinkedList_Destroy(LinkedList *LinkedList) { 2392b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin /* do nothing */ 2393b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin} 2394b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2395b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 2396