14b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber/* 24b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Copyright (C) 2011 The Android Open Source Project 34b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * 44b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 54b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * you may not use this file except in compliance with the License. 64b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * You may obtain a copy of the License at 74b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * 84b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * http://www.apache.org/licenses/LICENSE-2.0 94b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * 104b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * Unless required by applicable law or agreed to in writing, software 114b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 124b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * See the License for the specific language governing permissions and 144b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber * limitations under the License. 154b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber */ 164b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 174b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#ifndef SOFT_OMX_COMPONENT_H_ 184b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 194b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#define SOFT_OMX_COMPONENT_H_ 204b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 214b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <media/stagefright/foundation/ABase.h> 224b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <media/stagefright/foundation/AString.h> 234b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <utils/RefBase.h> 244b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 254b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#include <OMX_Component.h> 264b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 274b3913a3e43d3180b21d77cc2f717b446350354fAndreas Hubernamespace android { 284b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 294b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberstruct SoftOMXComponent : public RefBase { 304b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber SoftOMXComponent( 314b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber const char *name, 324b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber const OMX_CALLBACKTYPE *callbacks, 334b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR appData, 344b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_COMPONENTTYPE **component); 354b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 364b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE initCheck() const; 374b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 384b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void setLibHandle(void *libHandle); 394b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void *libHandle() const; 404b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 4154802de06cfd336c9232a5647b3310fef33d4d81Andreas Huber virtual void prepareForDestruction() {} 4254802de06cfd336c9232a5647b3310fef33d4d81Andreas Huber 434b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberprotected: 444b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual ~SoftOMXComponent(); 454b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 464b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber const char *name() const; 474b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 484b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void notify( 494b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_EVENTTYPE event, 504b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 data1, OMX_U32 data2, OMX_PTR data); 514b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 524b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header); 534b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header); 544b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 554b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE sendCommand( 564b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data); 574b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 584b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE getParameter( 594b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, OMX_PTR params); 604b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 614b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE setParameter( 624b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 634b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 644b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE getConfig( 654b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, OMX_PTR params); 664b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 674b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE setConfig( 684b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 694b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 704b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE getExtensionIndex( 714b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber const char *name, OMX_INDEXTYPE *index); 724b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 734b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE useBuffer( 744b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE **buffer, 754b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 764b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR appPrivate, 774b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 size, 784b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U8 *ptr); 794b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 804b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE allocateBuffer( 814b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE **buffer, 824b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 834b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR appPrivate, 844b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 size); 854b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 864b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE freeBuffer( 874b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 884b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 894b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 904b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE emptyThisBuffer( 914b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 924b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 934b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE fillThisBuffer( 944b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 954b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 964b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber virtual OMX_ERRORTYPE getState(OMX_STATETYPE *state); 974b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 984b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huberprivate: 994b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber AString mName; 1004b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber const OMX_CALLBACKTYPE *mCallbacks; 1014b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_COMPONENTTYPE *mComponent; 1024b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1034b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber void *mLibHandle; 1044b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1054b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE SendCommandWrapper( 1064b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1074b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_COMMANDTYPE cmd, 1084b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 param, 1094b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR data); 1104b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1114b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE GetParameterWrapper( 1124b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1134b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, 1144b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR params); 1154b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1164b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE SetParameterWrapper( 1174b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1184b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, 1194b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR params); 1204b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1214b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE GetConfigWrapper( 1224b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1234b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, 1244b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR params); 1254b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1264b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE SetConfigWrapper( 1274b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1284b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE index, 1294b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR params); 1304b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1314b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE GetExtensionIndexWrapper( 1324b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1334b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_STRING name, 1344b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_INDEXTYPE *index); 1354b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1364b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE UseBufferWrapper( 1374b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1384b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE **buffer, 1394b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 1404b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR appPrivate, 1414b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 size, 1424b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U8 *ptr); 1434b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1444b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE AllocateBufferWrapper( 1454b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1464b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE **buffer, 1474b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 1484b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_PTR appPrivate, 1494b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 size); 1504b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1514b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE FreeBufferWrapper( 1524b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1534b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_U32 portIndex, 1544b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 1554b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1564b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE EmptyThisBufferWrapper( 1574b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1584b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 1594b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1604b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE FillThisBufferWrapper( 1614b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1624b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_BUFFERHEADERTYPE *buffer); 1634b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1644b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber static OMX_ERRORTYPE GetStateWrapper( 1654b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_HANDLETYPE component, 1664b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber OMX_STATETYPE *state); 1674b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1684b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber DISALLOW_EVIL_CONSTRUCTORS(SoftOMXComponent); 1694b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber}; 1704b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1714b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber} // namespace android 1724b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber 1734b3913a3e43d3180b21d77cc2f717b446350354fAndreas Huber#endif // SOFT_OMX_COMPONENT_H_ 174