OMX_VPP_CompThread.c revision b44cdb1b44b144d09e8ec950d1e8e4c280064056
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