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*
25b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  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_VideoEnc_Thread.c
30fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*
31b65f253fdc60f6208a54911bee793d225f23cdf8James Dong* This file implements OMX Component for MPEG-4 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/* -------------------------------------------------------------------------- */
39b65f253fdc60f6208a54911bee793d225f23cdf8James Dong/* =============================================================================
40b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*!
41b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! Revision History
42fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*! ================================================================
43fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*!
44b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! 02-Feb-2006 mf: Revisions appear in reverse chronological order;
45b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*! that is, newest first.  The date format is dd-Mon-yyyy.
46fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin* =========================================================================== */
47fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
48fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
49fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ------compilation control switches ----------------------------------------*/
50fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************
51b65f253fdc60f6208a54911bee793d225f23cdf8James Dong*  INCLUDE FILES
52fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*******************************************************************************/
53fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/* ----- system and platform files -------------------------------------------*/
54b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifdef UNDER_CE
55fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <windows.h>
56fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <oaf_osal.h>
57fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <omx_core.h>
58fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
59b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    #define _XOPEN_SOURCE 600
60fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <wchar.h>
61fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <unistd.h>
62fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <sys/select.h>
63fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <errno.h>
64fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    #include <fcntl.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#include "OMX_VideoEnc_Utils.h"
75fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
76fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************
77fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  EXTERNAL REFERENCES NOTE : only use if not found in header file
78fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*******************************************************************************/
79fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations --------------------------------------------------*/
80fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
81fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ------------------------------------------------*/
82fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
83fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************
84fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  PUBLIC DECLARATIONS Defined here, used elsewhere
85fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*******************************************************************************/
86fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations --------------------------------------------------*/
87fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
88fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ------------------------------------------------*/
89fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
90fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/******************************************************************************
91fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*  PRIVATE DECLARATIONS Defined here, used only here
92fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin*******************************************************************************/
93fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------data declarations --------------------------------------------------*/
94fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
95fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------macro definitions --------------------------------------------------*/
96fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
97fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*--------function prototypes ------------------------------------------------*/
98fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
99fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/
100fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/**
101fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * OMX_VideoEnc_Thread()
102fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
103fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * Called by VIDENC_Start_ComponentThread function.
104fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
105b65f253fdc60f6208a54911bee793d225f23cdf8James Dong  * @param pThreadData
106fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *
107fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  * @retval OMX_ErrorNone                  success, ready to roll
108fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  *         OMX_ErrorInsufficientResources if the malloc fails
109fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin  **/
110fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin/*----------------------------------------------------------------------------*/
111fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavinvoid* OMX_VIDENC_Thread (void* pThreadData)
112fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin{
113fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int status = -1;
114fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int fdmax = -1;
115fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    fd_set rfds;
116fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
117fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_COMMANDTYPE eCmd = -1;
118fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_U32 nParam1;
119fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    int nRet = -1;
120fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    OMX_PTR pCmdData = NULL;
121fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    VIDENC_COMPONENT_PRIVATE* pComponentPrivate = NULL;
122fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    LCML_DSP_INTERFACE* pLcmlHandle = NULL;
123b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    sigset_t set;
124fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
125fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (!pThreadData)
126fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
127fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        eError = OMX_ErrorBadParameter;
128fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        goto OMX_CONF_CMD_BAIL;
129fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
130fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
131fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate = (VIDENC_COMPONENT_PRIVATE*)pThreadData;
132fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pLcmlHandle = (LCML_DSP_INTERFACE*)pComponentPrivate->pLCML;
133fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
134fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
135fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    pComponentPrivate->pPERFcomp = PERF_Create(PERF_FOURCC('V', 'E', ' ', 'T'),
136fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               PERF_ModuleComponent |
137fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                               PERF_ModuleVideoEncode);
138fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
139fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
140b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    /** Looking for highest number of file descriptor
141fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        for pipes inorder to put in select loop */
142fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
143b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    fdmax = pComponentPrivate->nCmdPipe[0];
144fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
145fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nFree_oPipe[0] > fdmax)
146fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
147fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fdmax = pComponentPrivate->nFree_oPipe[0];
148fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
149fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
150fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    if (pComponentPrivate->nFilled_iPipe[0] > fdmax)
151fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
152fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        fdmax = pComponentPrivate->nFilled_iPipe[0];
153fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
154fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
155fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    while (1)
156fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    {
157fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        FD_ZERO (&rfds);
158fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        FD_SET (pComponentPrivate->nCmdPipe[0], &rfds);
159fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        FD_SET (pComponentPrivate->nFree_oPipe[0], &rfds);
160b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        FD_SET (pComponentPrivate->nFilled_iPipe[0], &rfds);
161b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
162b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        sigemptyset(&set);
163b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        sigaddset(&set,SIGALRM);
164fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        status = pselect(fdmax+1, &rfds, NULL, NULL, NULL,&set);
165fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
166fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        if (0 == status)
167fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
168fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            OMX_TRACE2(pComponentPrivate->dbg, "pselect() = 0\n");
169b65f253fdc60f6208a54911bee793d225f23cdf8James Dong#ifndef UNDER_CE
170fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            sched_yield();
171fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#else
172b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            sched_yield();
173fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
174fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
175fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        else if (-1 == status)
176fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
177fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (pComponentPrivate->eState != OMX_StateLoaded)
178fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
179fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_TRACE3(pComponentPrivate->dbg, "select() error.\n");
180fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                OMX_VIDENC_EVENT_HANDLER(pComponentPrivate, OMX_EventError, OMX_ErrorHardware, 0, NULL);
181fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
182b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            /*OMX_VIDENC_SET_ERROR_BAIL(eError, OMX_ErrorHardware, pComponentPrivate);*/
183b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            eError = OMX_ErrorHardware;
184b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_ERROR5(pComponentPrivate->dbg, "*Fatal Error : %x\n", eError);
185b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            OMX_VIDENC_HandleError(pComponentPrivate, eError);
186fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
187b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        else
188fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        {
189fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            if (FD_ISSET(pComponentPrivate->nCmdPipe[0], &rfds))
190fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
191fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                nRet = read(pComponentPrivate->nCmdPipe[0],
192fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            &eCmd,
193fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            sizeof(eCmd));
194fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (nRet == -1)
195fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
196fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from cmdPipe\n");
197fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_VIDENC_SET_ERROR_BAIL(eError,
198fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              OMX_ErrorHardware,
199fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                              pComponentPrivate);
200fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
201b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
202fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
203fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        PERF_ReceivedCommand(pComponentPrivate->pPERFcomp,
204fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                             eCmd, 0, PERF_ModuleLLMM);
205fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
206b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                if (eCmd == (OMX_COMMANDTYPE)-1)
207fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
208fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRCOMM2(pComponentPrivate->dbg, "Received thread close command.\n");
209fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_CONF_SET_ERROR_BAIL(eError, OMX_ErrorNone);
210fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
211b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
212fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                if (eCmd == OMX_CommandMarkBuffer)
213fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
214fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    nRet = read(pComponentPrivate->nCmdDataPipe[0],
215fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                &pCmdData,
216fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                sizeof(pCmdData));
217fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (nRet == -1)
218fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
219fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from cmdDataPipe\n");
220fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_SET_ERROR_BAIL(eError,
221fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  OMX_ErrorHardware,
222fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate);
223fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
224fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
225fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                else
226fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
227fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    nRet = read(pComponentPrivate->nCmdDataPipe[0],
228fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                &nParam1,
229fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                sizeof(nParam1));
230fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    if (nRet == -1)
231fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    {
232fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_PRCOMM4(pComponentPrivate->dbg, "Error while reading from cmdDataPipe\n");
233fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_SET_ERROR_BAIL(eError,
234fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  OMX_ErrorHardware,
235fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                  pComponentPrivate);
236fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    }
237fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
238fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
239fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
240fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    PERF_ReceivedCommand(pComponentPrivate->pPERFcomp,
241fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         eCmd,
242fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         (eCmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam1,
243fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                         PERF_ModuleLLMM);
244fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
245b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
246b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                switch (eCmd)
247fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
248fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    case OMX_CommandStateSet :
249fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Enters OMX_VIDENC_HandleCommandStateSet\n");
250fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = OMX_VIDENC_HandleCommandStateSet(pComponentPrivate,
251fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                  nParam1);
252fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
253fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Exits OMX_VIDENC_HandleCommandStateSet\n");
254fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
255fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    case OMX_CommandFlush :
256fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Enters OMX_VIDENC_HandleCommandFlush\n");
257b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        eError = OMX_VIDENC_HandleCommandFlush(pComponentPrivate,
258fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               nParam1,
259fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                               OMX_FALSE);
260fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
261fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Exits OMX_VIDENC_HandleCommandFlush\n");
262fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
263fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    case OMX_CommandPortDisable :
264fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Enters OMX_VIDENC_HandleCommandDisablePort\n");
265fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        eError = OMX_VIDENC_HandleCommandDisablePort(pComponentPrivate,
266fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                     nParam1);
267fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
268fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Exits OMX_VIDENC_HandleCommandDisablePort\n");
269fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
270fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    case OMX_CommandPortEnable :
271fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Enters OMX_VIDENC_HandleCommandDisablePort\n");
272b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                        eError = OMX_VIDENC_HandleCommandEnablePort(pComponentPrivate,
273fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                                    nParam1);
274fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
275fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    OMX_PRSTATE2(pComponentPrivate->dbg, "Exits OMX_VIDENC_HandleCommandDisablePort\n");
276fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
277fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    case OMX_CommandMarkBuffer :
278fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        if (!pComponentPrivate->pMarkBuf)
279fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        {
280fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                            pComponentPrivate->pMarkBuf = (OMX_MARKTYPE*)(pCmdData);
281fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        }
282fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        break;
283fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                    default:
284fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                        OMX_VIDENC_EVENT_HANDLER(pComponentPrivate,
285b65f253fdc60f6208a54911bee793d225f23cdf8James Dong                                                 OMX_EventError,
286fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 OMX_ErrorUndefined,
287fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 0,
288fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                                                 NULL);
289fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
290b65f253fdc60f6208a54911bee793d225f23cdf8James Dong            }
291fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
29224ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong            if ((FD_ISSET(pComponentPrivate->nFilled_iPipe[0], &rfds)) &&
29324ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                (pComponentPrivate->eState != OMX_StatePause &&
29408fad4c7afc7afecf6bdfe44312b7281be292c4eJames Dong                 pComponentPrivate->eState != OMX_StateIdle &&
29508fad4c7afc7afecf6bdfe44312b7281be292c4eJames Dong                 pComponentPrivate->eState != OMX_StateLoaded))
296fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            {
29724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                OMX_PRBUFFER1(pComponentPrivate->dbg, "Enters OMX_VIDENC_Process_FilledInBuf\n");
29824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                eError = OMX_VIDENC_Process_FilledInBuf(pComponentPrivate);
29924ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                if (eError != OMX_ErrorNone)
300fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
30124ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                    OMX_VIDENC_EVENT_HANDLER(pComponentPrivate,
30224ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             OMX_EventError,
30324ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             OMX_ErrorUndefined,
30424ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             0,
30524ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             NULL);
30624ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                    OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
307fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
30824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                OMX_PRBUFFER1(pComponentPrivate->dbg, "Exits OMX_VIDENC_Process_FilledInBuf\n");
30924ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong            }
310b65f253fdc60f6208a54911bee793d225f23cdf8James Dong
31124ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong            if (FD_ISSET(pComponentPrivate->nFree_oPipe[0], &rfds) &&
312a7b22907b3fe1a2d644e8ef023bf8d8fde16f99eJames Dong                (pComponentPrivate->eState!= OMX_StatePause &&
31308fad4c7afc7afecf6bdfe44312b7281be292c4eJames Dong                 pComponentPrivate->eState != OMX_StateIdle &&
31408fad4c7afc7afecf6bdfe44312b7281be292c4eJames Dong                 pComponentPrivate->eState != OMX_StateLoaded))
31524ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong            {
31624ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                OMX_PRBUFFER1(pComponentPrivate->dbg, "Enters OMX_VIDENC_Process_FreeOutBuf\n");
31724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                eError = OMX_VIDENC_Process_FreeOutBuf(pComponentPrivate);
31824ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                if (eError != OMX_ErrorNone)
319fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                {
32024ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                    OMX_VIDENC_EVENT_HANDLER(pComponentPrivate,
32124ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             OMX_EventError,
32224ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             OMX_ErrorUndefined,
32324ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             0,
32424ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                                             NULL);
32524ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                    OMX_VIDENC_BAIL_IF_ERROR(eError, pComponentPrivate);
326fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin                }
32724ef98f0d3b5d00b1d30c8ebf0791ef708170a32James Dong                OMX_PRBUFFER1(pComponentPrivate->dbg, "Exits OMX_VIDENC_Process_FreeOutBuf\n");
328fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin            }
329fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin        }
330fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin    }
331fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
332fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz ZavinOMX_CONF_CMD_BAIL:
333fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin
334fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
335b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pComponentPrivate)
336b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        PERF_Done(pComponentPrivate->pPERFcomp);
337fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin#endif
338b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    if (pComponentPrivate)
339b65f253fdc60f6208a54911bee793d225f23cdf8James Dong        OMX_PRINT2(pComponentPrivate->dbg, "Component Thread Exits\n");
340b65f253fdc60f6208a54911bee793d225f23cdf8James Dong    return (void*)eError;
341fb3766f18a2c18b6f4798a6a631fdb88fcacd1dcRebecca Schultz Zavin}
342