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