120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu/* 22f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * componentbase.h, component base class 330bd6062e4b295f5f7bcaeb98165065310d29269Ho-Eun Ryu * 42f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Copyright (c) 2009-2010 Wind River Systems, Inc. 52f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 62f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Licensed under the Apache License, Version 2.0 (the "License"); 72f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * you may not use this file except in compliance with the License. 82f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * You may obtain a copy of the License at 92f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 102f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * http://www.apache.org/licenses/LICENSE-2.0 112f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * 122f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * Unless required by applicable law or agreed to in writing, software 132f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * distributed under the License is distributed on an "AS IS" BASIS, 142f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 152f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * See the License for the specific language governing permissions and 162f6e87e64736666857c1bbe2cb0692c1f4e56508Ho-Eun Ryu * limitations under the License. 1720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu */ 1820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 1920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#ifndef __COMPONENTBASE_H 2020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#define __COMPONENTBASE_H 2120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 2220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#include <OMX_Core.h> 2320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#include <OMX_Component.h> 245ab2f45a95344b12cad43f277a730c8679b42171Dan Liang#include <OMX_IntelIndexExt.h> 2520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#include <cmodule.h> 265ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu#include <portbase.h> 2720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 2820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu#include <queue.h> 29cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu#include <workqueue.h> 3020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 31f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu/* retain buffers */ 32f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryutypedef enum buffer_retain_e { 33f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu BUFFER_RETAIN_NOT_RETAIN = 0, 34f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu BUFFER_RETAIN_GETAGAIN, 35f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu BUFFER_RETAIN_ACCUMULATE, 36705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen BUFFER_RETAIN_OVERRIDDEN, 3785d33bdb86649f8daa474948f3224cc0a6c160ceZhao Liang BUFFER_RETAIN_CACHE, 38f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu} buffer_retain_t; 39f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu 40cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu/* ProcessCmdWork */ 41cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryustruct cmd_s { 42cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu OMX_COMMANDTYPE cmd; 43cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu OMX_U32 param1; 44cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu OMX_PTR cmddata; 45cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu}; 46cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 47cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryuclass CmdHandlerInterface 48cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu{ 49cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryupublic: 50cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu virtual ~CmdHandlerInterface() {}; 51cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu virtual void CmdHandler(struct cmd_s *cmd) = 0; 52cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu}; 53cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 54cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryuclass CmdProcessWork : public WorkableInterface 55cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu{ 56cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryupublic: 57cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu CmdProcessWork(CmdHandlerInterface *ci); 58cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu ~CmdProcessWork(); 59cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 60cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu OMX_ERRORTYPE PushCmdQueue(struct cmd_s *cmd); 61cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 62cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryuprivate: 63cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu struct cmd_s *PopCmdQueue(void); 64cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 65cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu virtual void Work(void); /* call ci->CmdHandler() */ 66cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 67cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu WorkQueue *workq; 68cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 69cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu struct queue q; 70cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu pthread_mutex_t lock; 71cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 72cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu CmdHandlerInterface *ci; /* to run ComponentBase::CmdHandler() */ 73cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu}; 74cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 7522d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryuclass ComponentBase : public CmdHandlerInterface, public WorkableInterface 7620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu{ 7720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryupublic: 7820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* 7920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu * constructor & destructor 8020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu */ 8120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu ComponentBase(); 8220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu ComponentBase(const OMX_STRING name); 8320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu virtual ~ComponentBase(); 8420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 8520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* 8620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu * accessor 8720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu */ 8820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* name */ 8920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu void SetName(const OMX_STRING name); 903f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan OMX_STRING GetName(void); 9120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 92656e873cff82a7d22ca3145dc1c8e041d95a1642Ho-Eun Ryu /* working role */ 933f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan OMX_STRING GetWorkingRole(void); 94656e873cff82a7d22ca3145dc1c8e041d95a1642Ho-Eun Ryu 9520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* cmodule */ 9620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu void SetCModule(CModule *cmodule); 9720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu CModule *GetCModule(void); 9820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 9920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* end of accessor */ 10020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 10120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* 1029b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu * core methods & helpers 1039b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu */ 1049b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu /* roles */ 1059b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu OMX_ERRORTYPE SetRolesOfComponent(OMX_U32 nr_roles, const OMX_U8 **roles); 1069b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu 1073ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu /* GetHandle & FreeHandle */ 1083ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_ERRORTYPE GetHandle(OMX_HANDLETYPE* pHandle, 1093ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_PTR pAppData, 1103ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_CALLBACKTYPE *pCallBacks); 1113ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_ERRORTYPE FreeHandle(OMX_HANDLETYPE hComponent); 1123ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu 1139b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu /* end of core methods & helpers */ 1149b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu 1159b88640fe94198cf3f03151136840b04014a0a7dHo-Eun Ryu /* 11620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu * component methods & helpers 11720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu */ 11820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 11920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE SendCommand( 12020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 12120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_COMMANDTYPE Cmd, 12220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nParam1, 12320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pCmdData); 12420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseSendCommand( 12520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 12620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_COMMANDTYPE Cmd, 12720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nParam1, 12820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pCmdData); 12920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 13020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE GetParameter( 13120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 13220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nParamIndex, 13320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_PTR pComponentParameterStructure); 13420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseGetParameter( 13520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 13620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nParamIndex, 13720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_PTR pComponentParameterStructure); 13820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 13920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE SetParameter( 14020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 14120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 14220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pComponentParameterStructure); 14320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseSetParameter( 14420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 14520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 14620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pComponentParameterStructure); 14720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 14820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE GetConfig( 14920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 15020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 15120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_PTR pComponentConfigStructure); 15220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseGetConfig( 15320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 15420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 15520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_PTR pComponentConfigStructure); 15620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 15720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE SetConfig( 15820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 15920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 16020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pComponentConfigStructure); 16120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseSetConfig( 16220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 16320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_INDEXTYPE nIndex, 16420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pComponentConfigStructure); 16520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 16620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE GetExtensionIndex( 16720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 16820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_STRING cParameterName, 16920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_INDEXTYPE* pIndexType); 17020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseGetExtensionIndex( 17120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 17220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_STRING cParameterName, 17320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_INDEXTYPE* pIndexType); 17420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 17520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE GetState( 17620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 17720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_STATETYPE* pState); 17820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseGetState( 17920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 18020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_STATETYPE* pState); 18120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 18220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE UseBuffer( 18320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 18420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 18520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 18620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppPrivate, 18720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nSizeBytes, 18820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U8* pBuffer); 18920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseUseBuffer( 19020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 19120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_BUFFERHEADERTYPE** ppBufferHdr, 19220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 19320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppPrivate, 19420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nSizeBytes, 19520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U8* pBuffer); 19620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 19720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE AllocateBuffer( 19820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 19920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 20020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 20120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppPrivate, 20220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nSizeBytes); 20320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseAllocateBuffer( 20420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 20520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_INOUT OMX_BUFFERHEADERTYPE** ppBuffer, 20620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 20720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppPrivate, 20820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nSizeBytes); 20920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 21020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE FreeBuffer( 21120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 21220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 21320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 21420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseFreeBuffer( 21520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 21620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nPortIndex, 21720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 21820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 21920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE EmptyThisBuffer( 22020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 22120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 22220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseEmptyThisBuffer( 22320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 22420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 22520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 22620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE FillThisBuffer( 22720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 22820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 22920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseFillThisBuffer( 23020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 23120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_BUFFERHEADERTYPE* pBuffer); 23220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 23320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE SetCallbacks( 23420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 23520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_CALLBACKTYPE* pCallbacks, 23620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppData); 23720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseSetCallbacks( 23820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 23920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_CALLBACKTYPE* pCallbacks, 24020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_PTR pAppData); 24120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 24220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu static OMX_ERRORTYPE ComponentRoleEnum( 24320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 24420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_U8 *cRole, 24520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nIndex); 24620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_ERRORTYPE CBaseComponentRoleEnum( 24720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_HANDLETYPE hComponent, 24820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_OUT OMX_U8 *cRole, 24920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_IN OMX_U32 nIndex); 25020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 25120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* end of component methods & helpers */ 25220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 25320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* 25420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu * omx header manipuation 25520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu */ 256074aeb8c3193c729c3e1050b970a2315608d0a24Ho-Eun Ryu static void SetTypeHeader(OMX_PTR type, OMX_U32 size); 257dfaf4e141f33555032cc66b3810eba741a589288Ho-Eun Ryu static OMX_ERRORTYPE CheckTypeHeader(const OMX_PTR type, OMX_U32 size); 25820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 25920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* end of omx header manipuation */ 26020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 261c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu /* 262c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu * helper method for queury_roles() 263c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu */ 264c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu static OMX_ERRORTYPE QueryRolesHelper(OMX_U32 nr_comp_roles, 265c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu const OMX_U8 **comp_roles, 266c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu OMX_U32 *nr_roles, OMX_U8 **roles); 267c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu 268c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu /* end of helper method for queury_roles() */ 269c127caa3755f46f028fe7ec6e7ab02cf33238f62Ho-Eun Ryu 270074aeb8c3193c729c3e1050b970a2315608d0a24Ho-Eun Ryuprotected: 27127cb7aad256077ad50541fb08c675b257ec76626Ho-Eun Ryu /* helpers for derived class */ 27269d34dfb7d76cbdd1bd0f0b4b7cb1f2267f5002aHo-Eun Ryu const OMX_COMPONENTTYPE *GetComponentHandle(void); 273ec2f29d0c23a6c7ea3a36e03a9635b63ac23ae35XiaoFeng#if 0 274dd0f8243514bd9380e5172ba883e488bcf65dcc9Ho-Eun Ryu void DumpBuffer(const OMX_BUFFERHEADERTYPE *bufferheader, bool dumpdata); 275ec2f29d0c23a6c7ea3a36e03a9635b63ac23ae35XiaoFeng#endif 276705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen /* check if all port has own pending buffer */ 277705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen virtual bool IsAllBufferAvailable(void); 278705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen 27927cb7aad256077ad50541fb08c675b257ec76626Ho-Eun Ryu /* end of helpers for derived class */ 28027cb7aad256077ad50541fb08c675b257ec76626Ho-Eun Ryu 2815ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu /* ports */ 2825ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu /* 2835ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu * allocated with derived port classes by derived component classes 2845ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu */ 2855ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu PortBase **ports; 2865ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu OMX_U32 nr_ports; 2875ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu OMX_PORT_PARAM_TYPE portparam; 2885ab694059dd6abe79303fdf2712a974d9d2e29d4Ho-Eun Ryu 28922d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu /* ports big lock, must be held when accessing all ports at one time */ 29022d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu pthread_mutex_t ports_block; 29122d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu 292b7e8facd37fe0d46e8f6ff6527e4f2c4f90565caDan Liang /* adaptive playback param */ 293b7e8facd37fe0d46e8f6ff6527e4f2c4f90565caDan Liang OMX_BOOL mEnableAdaptivePlayback; 29420fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryuprivate: 29520fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* common routines for constructor */ 29620fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu void __ComponentBase(void); 29720fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 2983ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu /* 2993ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu * core methods & helpers 3003ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu */ 3015f3dea3773e2a740d6389e9f0de70d3078c0dcc8Ho-Eun Ryu /* called in GetHandle (nr_roles == 1) or SetParameter(ComponentRole) */ 3025f3dea3773e2a740d6389e9f0de70d3078c0dcc8Ho-Eun Ryu OMX_ERRORTYPE SetWorkingRole(const OMX_STRING role); 3035995aef03a789309fef914febc0bc6beb2d926f2Ho-Eun Ryu /* called int FreeHandle() */ 3045995aef03a789309fef914febc0bc6beb2d926f2Ho-Eun Ryu OMX_ERRORTYPE FreePorts(void); 3055995aef03a789309fef914febc0bc6beb2d926f2Ho-Eun Ryu 3063ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu /* end of core methods & helpers */ 3073ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu 308cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu /* 309cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu * component methods & helpers 310cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu */ 311cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu /* SendCommand */ 312cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu /* implement CmdHandlerInterface */ 313cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu virtual void CmdHandler(struct cmd_s *cmd); 314cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 315abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu /* SendCommand:OMX_CommandStateSet */ 316abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu /* called in CmdHandler() thread context or by component itself */ 317abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu void TransState(OMX_STATETYPE transition); 318abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToLoaded(OMX_STATETYPE current); 319abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToIdle(OMX_STATETYPE current); 320abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToExecuting(OMX_STATETYPE current); 321abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToPause(OMX_STATETYPE current); 322abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToWaitForResources(OMX_STATETYPE current); 323abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu inline OMX_ERRORTYPE TransStateToInvalid(OMX_STATETYPE current); 324abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu 325118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu /* called in TransStateToIdle(Loaded) */ 326118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu OMX_ERRORTYPE ApplyWorkingRole(void); 327118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu /* called in ApplyWorkingRole() */ 328118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu OMX_ERRORTYPE AllocatePorts(void); 329118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu /* allocate specific port type derived from portbase */ 330118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu virtual OMX_ERRORTYPE ComponentAllocatePorts(void) = 0; 331118bba9d4dd9906f3d73713c931a3be3df9f2694Ho-Eun Ryu 332d2d7fc5745af2532cd7aaf9bd88148cf29501900Ho-Eun Ryu /* SendCommand:OMX_CommandMarkBuffer */ 333d2d7fc5745af2532cd7aaf9bd88148cf29501900Ho-Eun Ryu /* called in CmdHandler() thread context */ 334d2d7fc5745af2532cd7aaf9bd88148cf29501900Ho-Eun Ryu void PushThisMark(OMX_U32 portindex, OMX_MARKTYPE *mark); 335dcf05c3d6a37bf9a3b09de2428a18d7f82b8204dHo-Eun Ryu /* SendCommand:OMX_CommandFlush (notify:1) or other parts (notify:0) */ 336dcf05c3d6a37bf9a3b09de2428a18d7f82b8204dHo-Eun Ryu void FlushPort(OMX_U32 port_index, bool notify); 337b7ca9a1a868348e9234c9aee022929c9b3267e4dHo-Eun Ryu /* SendCommand:OMX_CommandPortDisable/Enable */ 338b7ca9a1a868348e9234c9aee022929c9b3267e4dHo-Eun Ryu /* state: PortBase::OMX_PortEnabled/Disabled */ 339b7ca9a1a868348e9234c9aee022929c9b3267e4dHo-Eun Ryu void TransStatePort(OMX_U32 port_index, OMX_U8 state); 340b7ca9a1a868348e9234c9aee022929c9b3267e4dHo-Eun Ryu 341d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu /* Get/SetParameter */ 342d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu virtual OMX_ERRORTYPE 343d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu ComponentGetParameter(OMX_INDEXTYPE nParamIndex, 344d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu OMX_PTR pComponentParameterStructure) = 0; 345d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu virtual OMX_ERRORTYPE 346d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu ComponentSetParameter(OMX_INDEXTYPE nIndex, 347d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu OMX_PTR pComponentParameterStructure) = 0; 348d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu 349e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu /* Get/SetConfig */ 350e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu virtual OMX_ERRORTYPE 351e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu ComponentGetConfig(OMX_INDEXTYPE nIndex, 352e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu OMX_PTR pComponentConfigStructure) = 0; 353e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu virtual OMX_ERRORTYPE 354e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu ComponentSetConfig(OMX_INDEXTYPE nIndex, 355e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu OMX_PTR pComponentConfigStructure) = 0; 356e3be2d84503a7693ece53adbcf26ee243eea1b87Ho-Eun Ryu 3579efecd18c0d29b883f22cbd54aa4a51ca158040dHo-Eun Ryu /* buffer processing */ 3589efecd18c0d29b883f22cbd54aa4a51ca158040dHo-Eun Ryu /* implement WorkableInterface */ 3599efecd18c0d29b883f22cbd54aa4a51ca158040dHo-Eun Ryu virtual void Work(void); /* handle this->ports, hold ports_block */ 360f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu 3617036eb904f03a68a182222e5c8148163dc0f1ad7Ho-Eun Ryu /* called in Work() after ProcessorProcess() */ 36234277d8b1ca48a932e7b17ba331c29f040ba0838xiao void PostProcessBuffers(OMX_BUFFERHEADERTYPE ***buffers, 363f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu const buffer_retain_t *retain); 3643f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan void SourcePostProcessBuffers(OMX_BUFFERHEADERTYPE ***buffers); 36534277d8b1ca48a932e7b17ba331c29f040ba0838xiao void FilterPostProcessBuffers(OMX_BUFFERHEADERTYPE ***buffers, 366f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu const buffer_retain_t *retain); 3673f7ceee13aa17ae32d4263aed2ce67eb9a37c58bywan void SinkPostProcessBuffers(); 3689efecd18c0d29b883f22cbd54aa4a51ca158040dHo-Eun Ryu 3697ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu /* processor callbacks */ 3707ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu /* TransState */ 3717ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorInit(void); /* Loaded to Idle */ 3727ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorDeinit(void);/* Idle to Loaded */ 3737ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorStart(void); /* Idle to Executing/Pause */ 374ecc877a1dd44921dff3f300bc5559841f0c44ac6ywan virtual OMX_ERRORTYPE ProcessorReset(void); /* Reset */ 3757ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorStop(void); /* Executing/Pause to Idle */ 3767ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorPause(void); /* Executing to Pause */ 3777ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu virtual OMX_ERRORTYPE ProcessorResume(void);/* Pause to Executing */ 378ac3429dfacf1c5a03889558006f2af0d40a7bfe8Tao Tao virtual OMX_ERRORTYPE ProcessorFlush(OMX_U32 port_index); /* Flush */ 379705c231d1e4ff148d8cec637288d9ad41429f0e3Weian Chen virtual OMX_ERRORTYPE ProcessorPreFillBuffer(OMX_BUFFERHEADERTYPE* buffer); 38085d33bdb86649f8daa474948f3224cc0a6c160ceZhao Liang virtual OMX_ERRORTYPE ProcessorPreEmptyBuffer(OMX_BUFFERHEADERTYPE* buffer); 38157fbad335bcd1fc0b12cea2e58586015cec7b571xiao 38257fbad335bcd1fc0b12cea2e58586015cec7b571xiao /* invoked when buffer is to be freed */ 38357fbad335bcd1fc0b12cea2e58586015cec7b571xiao virtual OMX_ERRORTYPE ProcessorPreFreeBuffer(OMX_U32 nPortIndex, OMX_BUFFERHEADERTYPE* pBuffer); 3847ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu /* Work */ 38534277d8b1ca48a932e7b17ba331c29f040ba0838xiao virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE ***pBuffers, 38634277d8b1ca48a932e7b17ba331c29f040ba0838xiao buffer_retain_t *retain, 38734277d8b1ca48a932e7b17ba331c29f040ba0838xiao OMX_U32 nr_buffers); 38834277d8b1ca48a932e7b17ba331c29f040ba0838xiao virtual OMX_ERRORTYPE ProcessorProcess(OMX_BUFFERHEADERTYPE **pBuffers, 38922c02021e7be74c6636353ad0b62f60278a695c8Ho-Eun Ryu buffer_retain_t *retain, 39034277d8b1ca48a932e7b17ba331c29f040ba0838xiao OMX_U32 nr_buffers); 3917ca8edc2e24fcee5fbaa5406bc966494d13ac1b4Ho-Eun Ryu 392d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu /* end of component methods & helpers */ 393d8b921cd23e85c61acf2422a617943ac378cccc4Ho-Eun Ryu 394cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu /* process component's commands work */ 395cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu CmdProcessWork *cmdwork; 396cc664c7fd05a92b255d2be6efefe3bb0378dd8a3Ho-Eun Ryu 39722d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu /* buffer processing work */ 39822d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu WorkQueue *bufferwork; 39922d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu 400f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu /* component variant */ 401f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu typedef enum component_variant_e { 402f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu CVARIANT_NULL = 0, 403f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu CVARIANT_SOURCE, 404f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu CVARIANT_FILTER, 405f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu CVARIANT_SINK, 406f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu } component_variant_t; 407f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu 408f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu component_variant_t cvariant; 409f0a76b4aab79646e482196e212f89ab1aacd6f6fHo-Eun Ryu 41020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* roles */ 41120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_U8 **roles; 41220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu OMX_U32 nr_roles; 41320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 4145f3dea3773e2a740d6389e9f0de70d3078c0dcc8Ho-Eun Ryu OMX_STRING working_role; 4155f3dea3773e2a740d6389e9f0de70d3078c0dcc8Ho-Eun Ryu 41669d34dfb7d76cbdd1bd0f0b4b7cb1f2267f5002aHo-Eun Ryu /* omx standard handle */ 41769d34dfb7d76cbdd1bd0f0b4b7cb1f2267f5002aHo-Eun Ryu /* allocated at GetHandle, freed at FreeHandle */ 41869d34dfb7d76cbdd1bd0f0b4b7cb1f2267f5002aHo-Eun Ryu OMX_COMPONENTTYPE *handle; 41969d34dfb7d76cbdd1bd0f0b4b7cb1f2267f5002aHo-Eun Ryu 42020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* component module */ 42120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu CModule *cmodule; 42220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 423abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu OMX_STATETYPE state; 424abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu 425abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu const static OMX_STATETYPE OMX_StateUnloaded = OMX_StateVendorStartUnused; 426abd679fdaba9c3c8230dbcbaa838a5100acb546dHo-Eun Ryu 4273ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu /* omx standard callbacks */ 4283ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_PTR appdata; 4293ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu OMX_CALLBACKTYPE *callbacks; 4303ee08716991119e541a439811c8c74988d7be754Ho-Eun Ryu 43120fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* component name */ 43220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu char name[OMX_MAX_STRINGNAME_SIZE]; 43320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 434d438ab4e1c4dde0b5e0aa7c44186137b2d2adaa5Gu, Wangyi /* state lock */ 435d438ab4e1c4dde0b5e0aa7c44186137b2d2adaa5Gu, Wangyi pthread_mutex_t state_block; 436d438ab4e1c4dde0b5e0aa7c44186137b2d2adaa5Gu, Wangyi 437c87a1a8f47c29d4eddf1ea0093c32b8eee04a239ywan OMX_U32 mMaxFrameWidth; 438c87a1a8f47c29d4eddf1ea0093c32b8eee04a239ywan OMX_U32 mMaxFrameHeight; 439c87a1a8f47c29d4eddf1ea0093c32b8eee04a239ywan 44020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu /* omx specification version */ 441302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu#ifndef ANDROID 44220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_MAJOR = 1; 44320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_MINOR = 1; 444302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_REVISION = 2; 445302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_STEP = 0; 446302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu#else 447302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_MAJOR = 1; 448302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_MINOR = 0; 44920fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_REVISION = 0; 45020fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu const static OMX_U8 OMX_SPEC_VERSION_STEP = 0; 451302f566a7f78515edc0b4e433e358c7eeba7fbd1Ho-Eun Ryu#endif 45220fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu 45320fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu const static OMX_U32 OMX_SPEC_VERSION = 0 454c198aa03548b9a81d46c31ddc2bebf37268ffe19Ho-Eun Ryu | (OMX_SPEC_VERSION_MAJOR << 0) 455c198aa03548b9a81d46c31ddc2bebf37268ffe19Ho-Eun Ryu | (OMX_SPEC_VERSION_MINOR << 8) 456c198aa03548b9a81d46c31ddc2bebf37268ffe19Ho-Eun Ryu | (OMX_SPEC_VERSION_REVISION << 16) 457c198aa03548b9a81d46c31ddc2bebf37268ffe19Ho-Eun Ryu | (OMX_SPEC_VERSION_STEP << 24); 45820fb971c092d9f2141a81d0890d211dab85284acHo-Eun Ryu}; 45922d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu 46022d9fa5479b936d58d92f54d16560d0f9f15d5b3Ho-Eun Ryu#endif /* __COMPONENTBASE_H */ 461