OMXNodeInstance.h revision 570a3cb7582daa030cb38eedc5eb6a06f86ecc7f
1318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber/* 2318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * Copyright (C) 2009 The Android Open Source Project 3318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * 4318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * Licensed under the Apache License, Version 2.0 (the "License"); 5318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * you may not use this file except in compliance with the License. 6318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * You may obtain a copy of the License at 7318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * 8318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * http://www.apache.org/licenses/LICENSE-2.0 9318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * 10318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * Unless required by applicable law or agreed to in writing, software 11318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * distributed under the License is distributed on an "AS IS" BASIS, 12318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * See the License for the specific language governing permissions and 14318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber * limitations under the License. 15318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber */ 16318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 17318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#ifndef OMX_NODE_INSTANCE_H_ 18318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 19318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#define OMX_NODE_INSTANCE_H_ 20318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 21318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#include "OMX.h" 22318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 23318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#include <utils/RefBase.h> 24318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#include <utils/threads.h> 25318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 26318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Hubernamespace android { 27318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 28318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huberclass IOMXObserver; 29f0fb96c352f30b812a4903a1d783a715e1e817bdAndreas Huberstruct OMXMaster; 30318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 31318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huberstruct OMXNodeInstance { 32318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance( 33318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX *owner, const sp<IOMXObserver> &observer); 34318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 35318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber void setHandle(OMX::node_id node_id, OMX_HANDLETYPE handle); 36318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 37318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX *owner(); 38318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMXObserver> observer(); 39318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX::node_id nodeID(); 40318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 41f0fb96c352f30b812a4903a1d783a715e1e817bdAndreas Huber status_t freeNode(OMXMaster *master); 42318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 43318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t sendCommand(OMX_COMMANDTYPE cmd, OMX_S32 param); 44318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getParameter(OMX_INDEXTYPE index, void *params, size_t size); 45318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 46318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t setParameter( 47318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_INDEXTYPE index, const void *params, size_t size); 48318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 49318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getConfig(OMX_INDEXTYPE index, void *params, size_t size); 50318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t setConfig(OMX_INDEXTYPE index, const void *params, size_t size); 51318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 52318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t useBuffer( 53318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_U32 portIndex, const sp<IMemory> ¶ms, 54318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX::buffer_id *buffer); 55318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 56318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t allocateBuffer( 57570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber OMX_U32 portIndex, size_t size, OMX::buffer_id *buffer, 58570a3cb7582daa030cb38eedc5eb6a06f86ecc7fAndreas Huber void **buffer_data); 59318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 60318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t allocateBufferWithBackup( 61318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_U32 portIndex, const sp<IMemory> ¶ms, 62318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX::buffer_id *buffer); 63318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 64318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t freeBuffer(OMX_U32 portIndex, OMX::buffer_id buffer); 65318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 66318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t fillBuffer(OMX::buffer_id buffer); 67318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 68318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t emptyBuffer( 69318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX::buffer_id buffer, 70318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_U32 rangeOffset, OMX_U32 rangeLength, 71318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_U32 flags, OMX_TICKS timestamp); 72318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 73318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getExtensionIndex( 74318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber const char *parameterName, OMX_INDEXTYPE *index); 75318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 76318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber void onMessage(const omx_message &msg); 77f0fb96c352f30b812a4903a1d783a715e1e817bdAndreas Huber void onObserverDied(OMXMaster *master); 78318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber void onGetHandleFailed(); 79318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 80318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_CALLBACKTYPE kCallbacks; 81318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 82318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huberprivate: 83318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber Mutex mLock; 84318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 85318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX *mOwner; 86318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX::node_id mNodeID; 87318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_HANDLETYPE mHandle; 88318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMXObserver> mObserver; 89134ee6a324c35f39e3576172e4eae4c6de6eb9dcAndreas Huber bool mDying; 90318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 91d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber struct ActiveBuffer { 92d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber OMX_U32 mPortIndex; 93d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber OMX::buffer_id mID; 94d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber }; 95d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber Vector<ActiveBuffer> mActiveBuffers; 96d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber 97318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber ~OMXNodeInstance(); 98318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 99d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber void addActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); 100d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber void removeActiveBuffer(OMX_U32 portIndex, OMX::buffer_id id); 101d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber void freeActiveBuffers(); 102d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber 103318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnEvent( 104318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 105318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 106318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_EVENTTYPE eEvent, 107318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_U32 nData1, 108318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_U32 nData2, 109318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pEventData); 110318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 111318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnEmptyBufferDone( 112318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 113318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 114318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 115318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 116318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnFillBufferDone( 117318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 118318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 119318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 120318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 121318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance(const OMXNodeInstance &); 122318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance &operator=(const OMXNodeInstance &); 123318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber}; 124318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 125318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber} // namespace android 126318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 127318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#endif // OMX_NODE_INSTANCE_H_ 128318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 129