OMX.h revision 8b1be2ca7cee71a4920d5d31fdcbad2b1d4ca49d
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 2009 The Android Open Source Project 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Licensed under the Apache License, Version 2.0 (the "License"); 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * you may not use this file except in compliance with the License. 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * You may obtain a copy of the License at 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * http://www.apache.org/licenses/LICENSE-2.0 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Unless required by applicable law or agreed to in writing, software 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * distributed under the License is distributed on an "AS IS" BASIS, 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * See the License for the specific language governing permissions and 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * limitations under the License. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ANDROID_OMX_H_ 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ANDROID_OMX_H_ 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <media/IOMX.h> 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/threads.h> 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <utils/KeyedVector.h> 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct OMXMaster; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OMXNodeInstance; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OMX : public BnOMX, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public IBinder::DeathRecipient { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)public: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX(); 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual bool livesLocally(node_id node, pid_t pid); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t listNodes(List<ComponentInfo> *list); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t allocateNode( 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *name, const sp<IOMXObserver> &observer, node_id *node); 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t freeNode(node_id node); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t sendCommand( 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_COMMANDTYPE cmd, OMX_S32 param); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t getParameter( 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_INDEXTYPE index, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *params, size_t size); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t setParameter( 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_INDEXTYPE index, 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void *params, size_t size); 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t getConfig( 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_INDEXTYPE index, 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void *params, size_t size); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t setConfig( 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_INDEXTYPE index, 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const void *params, size_t size); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t getState( 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_STATETYPE* state); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t enableGraphicBuffers( 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, OMX_BOOL enable); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t getGraphicBufferUsage( 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, OMX_U32* usage); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t storeMetaDataInBuffers( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, OMX_BOOL enable); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t prepareForAdaptivePlayback( 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 portIndex, OMX_BOOL enable, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_U32 max_frame_width, OMX_U32 max_frame_height); 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t useBuffer( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_id *buffer); 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t useGraphicBuffer( 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual status_t updateGraphicBufferInMeta( 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node_id node, OMX_U32 port_index, 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual status_t createInputSurface( 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node_id node, OMX_U32 port_index, 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) sp<IGraphicBufferProducer> *bufferProducer); 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual status_t signalEndOfInputStream(node_id node); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual status_t allocateBuffer( 9790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) node_id node, OMX_U32 port_index, size_t size, 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) buffer_id *buffer, void **buffer_data); 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual status_t allocateBufferWithBackup( 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) node_id node, OMX_U32 port_index, const sp<IMemory> ¶ms, 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) buffer_id *buffer); 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t freeBuffer( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, OMX_U32 port_index, buffer_id buffer); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t fillBuffer(node_id node, buffer_id buffer); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t emptyBuffer( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) buffer_id buffer, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_U32 range_offset, OMX_U32 range_length, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_U32 flags, OMX_TICKS timestamp); 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual status_t getExtensionIndex( 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char *parameter_name, 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OMX_INDEXTYPE *index); 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual status_t setInternalOption( 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) node_id node, 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OMX_U32 port_index, 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InternalOptionType type, 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const void *data, 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) size_t size); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void binderDied(const wp<IBinder> &the_late_who); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_ERRORTYPE OnEvent( 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_IN OMX_EVENTTYPE eEvent, 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_IN OMX_U32 nData1, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_IN OMX_U32 nData2, 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_IN OMX_PTR pEventData); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_ERRORTYPE OnEmptyBufferDone( 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) OMX_ERRORTYPE OnFillBufferDone( 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void invalidateNodeID(node_id node); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)protected: 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~OMX(); 146 147private: 148 struct CallbackDispatcherThread; 149 struct CallbackDispatcher; 150 151 Mutex mLock; 152 OMXMaster *mMaster; 153 int32_t mNodeCounter; 154 155 KeyedVector<wp<IBinder>, OMXNodeInstance *> mLiveNodes; 156 KeyedVector<node_id, OMXNodeInstance *> mNodeIDToInstance; 157 KeyedVector<node_id, sp<CallbackDispatcher> > mDispatchers; 158 159 node_id makeNodeID(OMXNodeInstance *instance); 160 OMXNodeInstance *findInstance(node_id node); 161 sp<CallbackDispatcher> findDispatcher(node_id node); 162 163 void invalidateNodeID_l(node_id node); 164 165 OMX(const OMX &); 166 OMX &operator=(const OMX &); 167}; 168 169} // namespace android 170 171#endif // ANDROID_OMX_H_ 172