1fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 2fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* 3fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/ 4fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 5fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is free software; you can redistribute it and/or 6fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public 7fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License as published by the Free Software Foundation; either 8fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version. 9fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 10fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 11fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * This library is distributed in the hope that it will be useful, 12fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of 13fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Lesser General Public License for more details. 15fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 16fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 17fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public 18fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * License along with this library; if not, write to the Free Software 19fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 20fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin */ 21fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ==================================================================== 22fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Texas Instruments OMAP(TM) Platform Software 23fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* (c) Copyright Texas Instruments, Incorporated. All Rights Reserved. 24fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 25fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* Use of this software is controlled by the terms and conditions found 26fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* in the license agreement under which this software has been supplied. 27fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ==================================================================== */ 28fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 29fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @file OMX_JpegEnc_Thread.c 30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 31fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* This file implements OMX Component for JPEG encoder that 32fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* is fully compliant with the OMX specification 1.5. 33fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 34fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @path $(CSLPATH)\src 35fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* 36fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* @rev 0.1 37fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*/ 38fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* -------------------------------------------------------------------------------- */ 39fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ================================================================================ 40fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 41fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! Revision History 42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! =================================== 43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 44fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! 22-May-2006 mf: Revisions appear in reverse chronological order; 45fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! that is, newest first. The date format is dd-Mon-yyyy. 46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* ================================================================================= */ 47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**************************************************************** 49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* INCLUDE FILES 50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin****************************************************************/ 51fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- System and Platform Files ----------------------------*/ 53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef UNDER_CE 54fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <windows.h> 55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <oaf_osal.h> 56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <omx_core.h> 57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else 58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <unistd.h> 59fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/time.h> 60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/types.h> 61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/ioctl.h> 62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <sys/select.h> 63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <fcntl.h> 64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <errno.h> 65fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 66fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 67fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <dbapi.h> 68fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <string.h> 69fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdlib.h> 70fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <stdio.h> 71fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include <signal.h> 72fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 73fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*------- Program Header Files ----------------------------------------*/ 74fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#include "OMX_JpegEnc_Utils.h" 76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#define OMX_MAX_TIMEOUTS 200 79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------- Function Implementations ---------------------------------*/ 81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/** 83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_JpegEnc_Thread() 84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * Called by Start_ComponentThread function. 86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @param pThreadData 88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * 89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * @retval OMX_ErrorNone success, ready to roll 90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin * OMX_ErrorInsufficientResources if the malloc fails 91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin **/ 92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*-------------------------------------------------------------------*/ 93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid* OMX_JpegEnc_Thread (void* pThreadData) 94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{ 95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int status; 96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin struct timeval tv; 97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin int fdmax; 98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fd_set rfds; 99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_ERRORTYPE eError = OMX_ErrorNone; 100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMMANDTYPE eCmd; 101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_U32 nParam1; 102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin sigset_t set; 103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 105fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_COMPONENTTYPE *pHandle = (OMX_COMPONENTTYPE *)pThreadData; 106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin JPEGENC_COMPONENT_PRIVATE *pComponentPrivate = (JPEGENC_COMPONENT_PRIVATE *)pHandle->pComponentPrivate; 107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->pPERFcomp = PERF_Create(PERF_FOURS("JPET"), 110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleComponent |PERF_ModuleImageEncode); 111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /**Looking for highest number of file descriptor for pipes 114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin inorder to put in select loop */ 115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fdmax = pComponentPrivate->nCmdPipe[0]; 116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( pComponentPrivate->free_outBuf_Q[0] > fdmax ) { 118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fdmax = pComponentPrivate->free_outBuf_Q[0]; 119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( pComponentPrivate->filled_inpBuf_Q[0] > fdmax ) { 123fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin fdmax = pComponentPrivate->filled_inpBuf_Q[0]; 124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE2(pComponentPrivate->dbg, "fd max is %d\n",fdmax); 127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin while ( 1 ) { 129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FD_ZERO (&rfds); 130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FD_SET (pComponentPrivate->nCmdPipe[0], &rfds); 131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState != OMX_StatePause) { 132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FD_SET (pComponentPrivate->free_outBuf_Q[0], &rfds); 133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin FD_SET (pComponentPrivate->filled_inpBuf_Q[0], &rfds); 134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tv.tv_sec = 1; 138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin tv.tv_usec = 0; 139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sigemptyset(&set) ; 141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin sigaddset(&set,SIGALRM); 142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin status = pselect (fdmax+1, &rfds, NULL, NULL, NULL,&set); 143fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( 0 == status ) { 145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE2(pComponentPrivate->dbg, "Component Thread Time Out!!!\n"); 146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else if ( -1 == status ) { 147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_TRACE4(pComponentPrivate->dbg, "Error in Select\n"); 148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, pComponentPrivate->pHandle->pApplicationPrivate, 150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorInsufficientResources, OMX_TI_ErrorSevere, 151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error from COmponent Thread in select"); 152b65f253fdc60f6208a54911bee793d225f23cdf8James Dong eError = OMX_ErrorInsufficientResources; 153c22b4b5a6da81c52ed4aca4e0c9fec348d5f0adcJames Dong break; 154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } else { 155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( (FD_ISSET (pComponentPrivate->filled_inpBuf_Q[0], &rfds)) 156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin && (pComponentPrivate->nCurState != OMX_StatePause) ) { 157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "filled_inpBuf_Q pipe is set\n"); 158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleJpegEncDataBuf_FromApp (pComponentPrivate); 160fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 161fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( eError != OMX_ErrorNone ) { 162fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "Error while processing free queue buffers\n"); 163fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, pComponentPrivate->pHandle->pApplicationPrivate, 164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorUndefined, OMX_TI_ErrorSevere, 165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "1-Error from Component Thread while processing free Q\n"); 166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 169fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( FD_ISSET (pComponentPrivate->free_outBuf_Q[0], &rfds) ) { 170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "free_outBuf_Q has some buffers in Component Thread\n"); 171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleJpegEncFreeOutputBufferFromApp(pComponentPrivate); 172fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( eError != OMX_ErrorNone ) { 173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER4(pComponentPrivate->dbg, "Error while processing free Q Buffers\n"); 174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, pComponentPrivate->pHandle->pApplicationPrivate, 175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorUndefined, OMX_TI_ErrorSevere, 176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "3-Error from Component Thread while processing free Q\n"); 177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( FD_ISSET (pComponentPrivate->nCmdPipe[0], &rfds) ) { 180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /* Do not accept any command when the component is stopping */ 181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRCOMM2(pComponentPrivate->dbg, "CMD pipe is set in Component Thread\n"); 182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin 183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin read (pComponentPrivate->nCmdPipe[0], &eCmd, sizeof (eCmd)); 184fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin read (pComponentPrivate->nCmdDataPipe[0], &nParam1, sizeof (nParam1)); 185fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 187fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ReceivedCommand(pComponentPrivate->pPERFcomp, 188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eCmd, nParam1, 189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_ModuleLLMM); 190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "eCmd %d, nParam1 %d\n", (int)eCmd, (int)nParam1); 193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( eCmd == OMX_CommandStateSet ) { 194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT2(pComponentPrivate->dbg, "processing OMX_CommandStateSet\n"); 195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( (int)nParam1 != -1 ){ 196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if(nParam1 == OMX_StateInvalid){ 197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->nToState = OMX_StateInvalid; 198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleJpegEncCommand (pComponentPrivate, nParam1); 200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if ( eError != OMX_ErrorNone ) { 201fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT4(pComponentPrivate->dbg, "Error returned by HandleJpegEncCommand\n"); 202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin pComponentPrivate->cbInfo.EventHandler (pComponentPrivate->pHandle, pComponentPrivate->pHandle->pApplicationPrivate, 203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_EventError, OMX_ErrorHardware, OMX_TI_ErrorSevere, 204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin "Error returned by HandleJpegEncCommand\n"); 205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 206fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else{ 209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 211fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( eCmd == OMX_CommandPortDisable ) { 213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "Before Disable Port function Port %d\n",(int)nParam1); 214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = JpegEncDisablePort(pComponentPrivate, nParam1); 215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "After JPEG Encoder Sisable Port error = %d\n", eError); 216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( eCmd == OMX_CommandPortEnable ) { /*TODO: Check errors*/ 221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = JpegEncEnablePort(pComponentPrivate, nParam1); 222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone ) { 223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( eCmd == OMX_CustomCommandStopThread ) { 228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin /*eError = 10;*/ 229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin goto EXIT; 230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin else if ( eCmd == OMX_CommandFlush ) { 232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRBUFFER2(pComponentPrivate->dbg, "eCmd = OMX_CommandFlush\n"); 233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin eError = HandleJpegEncCommandFlush (pComponentPrivate, nParam1); 234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (eError != OMX_ErrorNone) { 235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin break; 236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin if (pComponentPrivate->nCurState == OMX_StatePause) 239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin continue; 240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin } 245fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Component Thread Exit while loop\n"); 246fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinEXIT: 248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__ 250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin PERF_Done(pComponentPrivate->pPERFcomp); 251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif 252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin OMX_PRINT1(pComponentPrivate->dbg, "Component Thread Exit while loop from EXIT label\n"); 254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin return(void*)eError; /*OMX_ErrorNone;*/ 255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin 256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin} 257