1b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
2b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*
3b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Copyright (C) Texas Instruments - http://www.ti.com/
4b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
5b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is free software; you can redistribute it and/or
6b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * modify it under the terms of the GNU Lesser General Public
7b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License as published by the Free Software Foundation; either
8b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * version 2.1 of the License, or (at your option) any later version.
9b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
10b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
11b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * This library is distributed in the hope that it will be useful,
12b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * but WITHOUT ANY WARRANTY; without even the implied warranty of
13b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Lesser General Public License for more details.
15b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
16b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin *
17b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * You should have received a copy of the GNU Lesser General Public
18b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * License along with this library; if not, write to the Free Software
19b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
20b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin */
21b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ==============================================================================
22b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*             Texas Instruments OMAP (TM) Platform Software
23b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  (c) Copyright Texas Instruments, Incorporated.  All Rights Reserved.
24b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
25b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  Use of this software is controlled by the terms and conditions found
26b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  in the license agreement under which this software has been supplied.
27b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ============================================================================ */
28b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
29b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @file OMX_VPP_ComponentThread.c
30b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
31b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* This file implements OMX Component for video post processing that
32b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* is fully compliant with the OMX Audio specification 1.0.
33b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
34b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @path  $(CSLPATH)\
35b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*
36b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* @rev  1.0
37b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*/
38b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----------------------------------------------------------------------------
39b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
40b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! Revision History
41b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! ===================================
42b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! 13-Dec-2005 mf:  Initial Version. Change required per OMAPSWxxxxxxxxx
43b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*! to provide _________________.
44b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*!
45b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin* ============================================================================= */
46b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
47b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
48b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ------compilation control switches -------------------------*/
49b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/****************************************************************
50b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin*  INCLUDE FILES
51b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin****************************************************************/
52b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* ----- system and platform files ----------------------------*/
53b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
54b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef UNDER_CE
55b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <windows.h>
56b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <oaf_osal.h>
57b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <omx_core.h>
58b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdlib.h>
59b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#else
60b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
61b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define _XOPEN_SOURCE 600
62b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
63b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <unistd.h>
64b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/time.h>
65b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/types.h>
66b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/ioctl.h>
67b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <sys/select.h>
68b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
69b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <fcntl.h>
70b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <errno.h>
71b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
72b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <dbapi.h>
73b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <string.h>
74b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
75b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <stdio.h>
76b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
77b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP.h"
78b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_Utils.h"
79b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include "OMX_VPP_CompThread.h"
80b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <OMX_Component.h>
81b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#include <signal.h>
82b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
83b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/** Default timeout used to come out of blocking calls*/
84b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#define VPP_THREAD_TIMEOUT (100)
85b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
86b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
87b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/* -------------------------------------------------------------------*/
88b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/**
89b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *  ComponentThread() thread polling for messages and data in pipe
90b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
91b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @param pThreadData
92b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *
93b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  * @retval OMX_NoError              Success, ready to roll
94b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  *         OMX_Error_BadParameter   The input parameter pointer is null
95b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin  **/
96b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin/*-------------------------------------------------------------------*/
97b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavinvoid* VPP_ComponentThreadFunc (void* pThreadData)
98b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin{
99b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int status;
100b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    struct timeval tv;
101b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int fdmax;
102b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fd_set rfds;
103b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_ERRORTYPE eError = OMX_ErrorNone;
104b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMMANDTYPE eCmd = -1;
105b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_U32 nParam1;
106b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    int nRet = -1;
107b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_PTR pCmdData = NULL;
108b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    sigset_t set;
109b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
110b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
111b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
112b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    VPP_COMPONENT_PRIVATE* pComponentPrivate = (VPP_COMPONENT_PRIVATE*)pThreadData;
113b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    OMX_COMPONENTTYPE *pHandle = pComponentPrivate->pHandle;
114b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
115b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
116b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    pComponentPrivate->pPERFcomp = PERF_Create(PERF_FOURCC('V','P','P','T'),
117b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            PERF_ModuleComponent |
118b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            PERF_ModuleVideoEncode | PERF_ModuleImageEncode |
119b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                            PERF_ModuleVideoDecode | PERF_ModuleImageDecode);
120b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
121b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
122b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    fdmax = pComponentPrivate->cmdPipe[0];
123b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
124b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    /** Looking for highest number of file descriptor
125b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        for pipes inorder to put in select loop */
126b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->nFree_oPipe[0] > fdmax) {
127b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fdmax = pComponentPrivate->nFree_oPipe[0];
128b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
129b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
130b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    if (pComponentPrivate->nFilled_iPipe[0] > fdmax) {
131b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        fdmax = pComponentPrivate->nFilled_iPipe[0];
132b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
133b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
134b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    while (1) {
135b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_ZERO (&rfds);
136b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->cmdPipe[0], &rfds);
137b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
138b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (pComponentPrivate->curState != OMX_StatePause) {
139b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->nFree_oPipe[0], &rfds);
140b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        FD_SET (pComponentPrivate->nFilled_iPipe[0], &rfds);
141b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
142b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
143b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_sec  = 0;
144b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        tv.tv_usec = VPP_THREAD_TIMEOUT * 1000;
145b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
146b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	sigemptyset(&set);
147b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin	sigaddset(&set,SIGALRM);
148b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
149b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        status = pselect (fdmax+1, &rfds, NULL, NULL, NULL, &set);
150b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
151b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (0 == status) {
152b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            /*VPP_DPRINT("\n\n\n%d ::!!!!!  Component Time Out !!!!!!!!!!!! \n",__LINE__);*/
153b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (pComponentPrivate->bIsStopping == 1) {
154b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bIsStopping = 0;
155b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->bIsEOFSent  = 0;
156b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
157b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
158b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
159b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
160b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (-1 == status) {
161b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            VPP_DPRINT ("%d :: Error in Select\n", __LINE__);
162b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            pComponentPrivate->cbInfo.EventHandler (
163b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pHandle,pHandle->pApplicationPrivate,
164b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EventError,OMX_ErrorInsufficientResources,OMX_TI_ErrorSevere,
165b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    "Error from Component Thread in select");
166b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            goto EXIT;
167b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
168b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
169b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (FD_ISSET (pComponentPrivate->cmdPipe[0], &rfds)) {
170b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            nRet = read(pComponentPrivate->cmdPipe[0], &eCmd, sizeof(eCmd));
171b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (nRet == -1) {
172b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("Error while writing to the free_oPipe\n");
173b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = OMX_ErrorInsufficientResources;
174b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                goto EXIT;
175b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
176b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
177b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eCmd == EXIT_COMPONENT_THRD)
178b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
179b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
180b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
181b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                PERF_ReceivedCommand(pComponentPrivate->pPERFcomp,
182b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    eCmd, 0, PERF_ModuleLLMM);
183b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
184b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
185b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT ("VPP::%d: Exiting thread Cmd : \n",__LINE__);
186b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
187b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
188b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
189b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
190b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eCmd == OMX_CommandMarkBuffer) {
191b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nRet = read(pComponentPrivate->nCmdDataPipe[0], &pCmdData, sizeof(pCmdData));
192b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (nRet == -1) {
193b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("Error while writing to the free_oPipe\n");
194b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorInsufficientResources;
195b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
196b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
197b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
198b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            else {
199b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                nRet = read(pComponentPrivate->nCmdDataPipe[0], &nParam1, sizeof(nParam1));
200b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if (nRet == -1) {
201b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DPRINT ("Error while writing to the free_oPipe\n");
202b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    eError = OMX_ErrorInsufficientResources;
203b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
204b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
205b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
206b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
207b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
208b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            PERF_ReceivedCommand(pComponentPrivate->pPERFcomp,
209b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                eCmd,
210b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                (eCmd == OMX_CommandMarkBuffer) ? ((OMX_U32) pCmdData) : nParam1,
211b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                PERF_ModuleLLMM);
212b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
213b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
214b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            switch (eCmd)
215b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            {
216b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandPortDisable:
217b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    VPP_DisablePort(pComponentPrivate, nParam1);
218b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    break;
219b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
220b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandStateSet:
221b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                eError = VPP_HandleCommand(pComponentPrivate, nParam1);
222b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                if(eError != OMX_ErrorNone) {
223b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef RESOURCE_MANAGER_ENABLED
224b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->curState = OMX_StateInvalid;
225b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
226b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
227b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        pComponentPrivate->pHandle->pApplicationPrivate,
228b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_EventError,
229b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_ErrorInsufficientResources,
230b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        OMX_TI_ErrorMajor,
231b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                        "Error from Component Thread while processing Command Pipe.\n");
232b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                    goto EXIT;
233b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                }
234b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_DPRINT("return from StateSet %d\n", nParam1);
235b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
236b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
237b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandPortEnable:
238b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_EnablePort(pComponentPrivate, nParam1);
239b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
240b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
241b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandMarkBuffer:
242b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                /* OMX_CommandMarkBuffer is handled directly on VPP_SendCommand() function*/
243b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
244b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
245b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandFlush:
246b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                VPP_HandleCommandFlush(pComponentPrivate, nParam1, OMX_TRUE);
247b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
248b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            case OMX_CommandMax:
249b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                break;
250b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
251b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            continue;
252b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
253b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
254b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Filled Input Buffer from Application to component*/
255b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if ((FD_ISSET(pComponentPrivate->nFilled_iPipe[0], &rfds))) {
256b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FilledInBuf(pComponentPrivate);
257b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
258b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
259b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
260b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EventError,
261b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_ErrorUndefined,
262b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_TI_ErrorSevere,
263b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    NULL);
264b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
265b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
266b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        /*Free output buffers from Application to component*/
267b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        if (FD_ISSET(pComponentPrivate->nFree_oPipe[0], &rfds)) {
268b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            eError = VPP_Process_FreeOutBuf(pComponentPrivate);
269b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            if (eError != OMX_ErrorNone) {
270b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                pComponentPrivate->cbInfo.EventHandler(pComponentPrivate->pHandle,
271b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    pComponentPrivate->pHandle->pApplicationPrivate,
272b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_EventError,
273b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_ErrorUndefined,
274b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    OMX_TI_ErrorSevere,
275b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin                                    NULL);
276b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin            }
277b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin        }
278b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    }
279b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
280b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz ZavinEXIT:
281b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
282b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#ifdef __PERF_INSTRUMENTATION__
283b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    PERF_Done(pComponentPrivate->pPERFcomp);
284b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin#endif
285b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin
286b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin    return (void*)OMX_ErrorNone;
287b44cdb1b44b144d09e8ec950d1e8e4c280064056Rebecca Schultz Zavin}
288