1bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber/* 2bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Copyright (C) 2011 The Android Open Source Project 3bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 4bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * you may not use this file except in compliance with the License. 6bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * You may obtain a copy of the License at 7bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 8bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * 10bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * Unless required by applicable law or agreed to in writing, software 11bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * See the License for the specific language governing permissions and 14bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber * limitations under the License. 15bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber */ 16bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 17bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#ifndef SOFT_OMX_COMPONENT_H_ 18bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 19bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#define SOFT_OMX_COMPONENT_H_ 20bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 21bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <media/stagefright/foundation/ABase.h> 22bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <media/stagefright/foundation/AString.h> 23bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <utils/RefBase.h> 24bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 25bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#include <OMX_Component.h> 26bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 27bbba88cb1bdc34705d1477208990a06904c022e7Andreas Hubernamespace android { 28bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 29bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberstruct SoftOMXComponent : public RefBase { 30bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber SoftOMXComponent( 31bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const char *name, 32bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const OMX_CALLBACKTYPE *callbacks, 33bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appData, 34bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_COMPONENTTYPE **component); 35bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 36bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE initCheck() const; 37bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 38bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void setLibHandle(void *libHandle); 39bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void *libHandle() const; 40bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 415a65e30064dc8dffa4f3d868f1c46038972c40c5Andreas Huber virtual void prepareForDestruction() {} 425a65e30064dc8dffa4f3d868f1c46038972c40c5Andreas Huber 43bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprotected: 44bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual ~SoftOMXComponent(); 45bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 46bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const char *name() const; 47bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 48bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void notify( 49bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_EVENTTYPE event, 50bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 data1, OMX_U32 data2, OMX_PTR data); 51bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 52bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void notifyEmptyBufferDone(OMX_BUFFERHEADERTYPE *header); 53bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void notifyFillBufferDone(OMX_BUFFERHEADERTYPE *header); 54bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 55bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE sendCommand( 56bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_COMMANDTYPE cmd, OMX_U32 param, OMX_PTR data); 57bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 58bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE getParameter( 59bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, OMX_PTR params); 60bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 61bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE setParameter( 62bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 63bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 64bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE getConfig( 65bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, OMX_PTR params); 66bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 67bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE setConfig( 68bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, const OMX_PTR params); 69bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 70bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE getExtensionIndex( 71bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const char *name, OMX_INDEXTYPE *index); 72bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 73bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE useBuffer( 74bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE **buffer, 75bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 76bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appPrivate, 77bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 size, 78bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U8 *ptr); 79bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 80bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE allocateBuffer( 81bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE **buffer, 82bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 83bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appPrivate, 84bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 size); 85bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 86bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE freeBuffer( 87bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 88bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 89bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 90bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE emptyThisBuffer( 91bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 92bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 93bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE fillThisBuffer( 94bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 95bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 96bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber virtual OMX_ERRORTYPE getState(OMX_STATETYPE *state); 97bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 98bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huberprivate: 99bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber AString mName; 100bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber const OMX_CALLBACKTYPE *mCallbacks; 101bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_COMPONENTTYPE *mComponent; 102bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 103bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber void *mLibHandle; 104bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 105bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE SendCommandWrapper( 106bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 107bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_COMMANDTYPE cmd, 108bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 param, 109bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR data); 110bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 111bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE GetParameterWrapper( 112bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 113bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, 114bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR params); 115bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 116bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE SetParameterWrapper( 117bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 118bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, 119bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR params); 120bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 121bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE GetConfigWrapper( 122bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 123bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, 124bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR params); 125bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 126bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE SetConfigWrapper( 127bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 128bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE index, 129bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR params); 130bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 131bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE GetExtensionIndexWrapper( 132bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 133bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_STRING name, 134bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_INDEXTYPE *index); 135bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 136bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE UseBufferWrapper( 137bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 138bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE **buffer, 139bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 140bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appPrivate, 141bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 size, 142bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U8 *ptr); 143bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 144bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE AllocateBufferWrapper( 145bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 146bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE **buffer, 147bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 148bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_PTR appPrivate, 149bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 size); 150bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 151bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE FreeBufferWrapper( 152bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 153bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_U32 portIndex, 154bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 155bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 156bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE EmptyThisBufferWrapper( 157bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 158bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 159bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 160bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE FillThisBufferWrapper( 161bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 162bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_BUFFERHEADERTYPE *buffer); 163bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 164bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber static OMX_ERRORTYPE GetStateWrapper( 165bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_HANDLETYPE component, 166bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber OMX_STATETYPE *state); 167bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 168bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber DISALLOW_EVIL_CONSTRUCTORS(SoftOMXComponent); 169bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber}; 170bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 171bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber} // namespace android 172bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber 173bbba88cb1bdc34705d1477208990a06904c022e7Andreas Huber#endif // SOFT_OMX_COMPONENT_H_ 174