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 213e378967b379afcd559b53d70d00e758f9c2616dWonsik Kim#include <atomic> 223e378967b379afcd559b53d70d00e758f9c2616dWonsik Kim 23d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa#include <media/IOMX.h> 24318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#include <utils/RefBase.h> 25318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#include <utils/threads.h> 26d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa#include <utils/KeyedVector.h> 27d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa#include <utils/SortedVector.h> 28d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa#include "OmxNodeOwner.h" 29318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 30f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa#include <android/hidl/memory/1.0/IMemory.h> 31f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa 32318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Hubernamespace android { 33bc1713d3b85d7ce656e032da6e4b6b342f14db03Mathias Agopianclass GraphicBuffer; 346d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhangclass IOMXBufferSource; 35318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huberclass IOMXObserver; 36f0fb96c352f30b812a4903a1d783a715e1e817bdAndreas Huberstruct OMXMaster; 373fd200feb657c157125e45e30c2a7262e3c0244dChong Zhangclass OMXBuffer; 38f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasatypedef hidl::memory::V1_0::IMemory IHidlMemory; 39318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 40d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhangstruct OMXNodeInstance : public BnOMXNode { 41318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance( 42d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa OmxNodeOwner *owner, const sp<IOMXObserver> &observer, const char *name); 43318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 44d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang void setHandle(OMX_HANDLETYPE handle); 45318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 46d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang OMX_HANDLETYPE handle(); 47318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMXObserver> observer(); 48318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 49d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang status_t freeNode() override; 50318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 51318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t sendCommand(OMX_COMMANDTYPE cmd, OMX_S32 param); 52318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getParameter(OMX_INDEXTYPE index, void *params, size_t size); 53318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 54318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t setParameter( 55318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_INDEXTYPE index, const void *params, size_t size); 56318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 57318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getConfig(OMX_INDEXTYPE index, void *params, size_t size); 58318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t setConfig(OMX_INDEXTYPE index, const void *params, size_t size); 59318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 60d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t setPortMode(OMX_U32 port_index, IOMX::PortMode mode); 61e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis 62e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis status_t getGraphicBufferUsage(OMX_U32 portIndex, OMX_U32* usage); 63e2ce6458659c6e1bad420357b61dc10cd8bbe2abJamie Gennis 6456ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar status_t prepareForAdaptivePlayback( 6556ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar OMX_U32 portIndex, OMX_BOOL enable, 6656ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar OMX_U32 maxFrameWidth, OMX_U32 maxFrameHeight); 6756ce726019f700a95ce5b45beebceadae4836e30Lajos Molnar 685a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad status_t configureVideoTunnelMode( 695a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad OMX_U32 portIndex, OMX_BOOL tunneled, 705a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad OMX_U32 audioHwSync, native_handle_t **sidebandHandle); 715a446aafff3020d607ad6fb14cc7ae76dd8f7947Rachad 728f469e18c307cb9dc0d16ed9225972aa8be4516fChong Zhang status_t setInputSurface( 73addf2cbb120346ae42e78fa739245a353db5edadChong Zhang const sp<IOMXBufferSource> &bufferSource); 74d291c222357303b9611cab89d0c3b047584ef377Chong Zhang 75a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar status_t allocateSecureBuffer( 76d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa OMX_U32 portIndex, size_t size, IOMX::buffer_id *buffer, 771b40f2804a27b695e9e53fb1699b64cb0dd387f9Lajos Molnar void **buffer_data, sp<NativeHandle> *native_handle); 78318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 793fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t useBuffer( 803fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, const OMXBuffer &omxBuf, buffer_id *buffer); 81318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 823fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t freeBuffer( 833fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, buffer_id buffer); 84318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 853fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t fillBuffer( 863fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang buffer_id buffer, const OMXBuffer &omxBuf, int fenceFd = -1); 87318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 883fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t emptyBuffer( 893fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang buffer_id buffer, const OMXBuffer &omxBuf, 903fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 flags, OMX_TICKS timestamp, int fenceFd = -1); 917cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 92318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber status_t getExtensionIndex( 93318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber const char *parameterName, OMX_INDEXTYPE *index); 94318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 9521b46588d022d0c22d7c7c08e919d7a9c5cd76e3Chong Zhang status_t setQuirks(OMX_U32 quirks); 9621b46588d022d0c22d7c7c08e919d7a9c5cd76e3Chong Zhang 978dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia bool isSecure() const { 988dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia return mIsSecure; 998dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia } 1008dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia 101d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang status_t dispatchMessage(const omx_message &msg) override; 102d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang 10326a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar // handles messages and removes them from the list 10426a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar void onMessages(std::list<omx_message> &messages); 105d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang void onObserverDied(); 1067cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden void onEvent(OMX_EVENTTYPE event, OMX_U32 arg1, OMX_U32 arg2); 107318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 108318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_CALLBACKTYPE kCallbacks; 109318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 110318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huberprivate: 111d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang struct CallbackDispatcherThread; 112d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang struct CallbackDispatcher; 113d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang 114318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber Mutex mLock; 115318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 116d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa OmxNodeOwner *mOwner; 117318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_HANDLETYPE mHandle; 118318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber sp<IOMXObserver> mObserver; 119d59b97223424a3974d2ac31cff998d02eecf2eedChong Zhang sp<CallbackDispatcher> mDispatcher; 1203e378967b379afcd559b53d70d00e758f9c2616dWonsik Kim std::atomic_bool mDying; 121d32d4030c3778b7947c08e9be7d38c229d8d555dLajos Molnar bool mSailed; // configuration is set (no more meta-mode changes) 122d32d4030c3778b7947c08e9be7d38c229d8d555dLajos Molnar bool mQueriedProhibitedExtensions; 123d32d4030c3778b7947c08e9be7d38c229d8d555dLajos Molnar SortedVector<OMX_INDEXTYPE> mProhibitedExtensions; 1248dde7269a5356503d2b283234b6cb46d0c3f214eWei Jia bool mIsSecure; 12521b46588d022d0c22d7c7c08e919d7a9c5cd76e3Chong Zhang uint32_t mQuirks; 126318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 1276d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang // Lock only covers mOMXBufferSource and mOMXOutputListener. We can't always 1286d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang // use mLock because of rare instances where we'd end up locking it recursively. 1296d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang Mutex mOMXBufferSourceLock; 1306d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang // Access these through getBufferSource(). 1316d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang sp<IOMXBufferSource> mOMXBufferSource; 1327cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 133d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber struct ActiveBuffer { 134d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber OMX_U32 mPortIndex; 135d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id mID; 136d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber }; 137d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber Vector<ActiveBuffer> mActiveBuffers; 1382d6b6601743c3c6960c6511a2cb774ef902759f4Andy Hung // for buffer ptr to buffer id translation 139609b815a3131d22da38b2f452faa9f89daad4039Andy Hung Mutex mBufferIDLock; 140609b815a3131d22da38b2f452faa9f89daad4039Andy Hung uint32_t mBufferIDCount; 141d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa KeyedVector<IOMX::buffer_id, OMX_BUFFERHEADERTYPE *> mBufferIDToBufferHeader; 142d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa KeyedVector<OMX_BUFFERHEADERTYPE *, IOMX::buffer_id> mBufferHeaderToBufferID; 143a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar 144d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang bool mLegacyAdaptiveExperiment; 145d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang IOMX::PortMode mPortMode[2]; 146a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar // metadata and secure buffer type tracking 147054219874873b41f1c815552987c10465c34ba2bLajos Molnar MetadataBufferType mMetadataType[2]; 148a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar enum SecureBufferType { 149a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar kSecureBufferTypeUnknown, 150a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar kSecureBufferTypeOpaque, 151a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar kSecureBufferTypeNativeHandle, 152a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar }; 153a63141af8f036bda0b8f7800107ca8a0e0623135Lajos Molnar SecureBufferType mSecureBufferType[2]; 154d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber 1553604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang // Following are OMX parameters managed by us (instead of the component) 1563604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang // OMX_IndexParamMaxFrameDurationForBitrateControl 1576d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang KeyedVector<int64_t, int64_t> mOriginalTimeUs; 1586d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang bool mRestorePtsFailed; 1593604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang int64_t mMaxTimestampGapUs; 1603604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang int64_t mPrevOriginalTimeUs; 1613604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang int64_t mPrevModifiedTimeUs; 1626d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang 163f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar // For debug support 164f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar char *mName; 165f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar int DEBUG; 166f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar size_t mNumPortBuffers[2]; // modified under mLock, read outside for debug 167f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar Mutex mDebugLock; 168f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar // following are modified and read under mDebugLock 169f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar int DEBUG_BUMP; 170f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar SortedVector<OMX_BUFFERHEADERTYPE *> mInputBuffersWithCodec, mOutputBuffersWithCodec; 171f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar size_t mDebugLevelBumpPendingBuffers[2]; 172f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar void bumpDebugLevel_l(size_t numInputBuffers, size_t numOutputBuffers); 173f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar void unbumpDebugLevel_l(size_t portIndex); 174f296e2b262d2a8f7c570eaed454a28cca99eb976Lajos Molnar 175318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber ~OMXNodeInstance(); 176318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 177d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa void addActiveBuffer(OMX_U32 portIndex, IOMX::buffer_id id); 178d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa void removeActiveBuffer(OMX_U32 portIndex, IOMX::buffer_id id); 179d6703ab22c85b43fdb2deb78a37e51465c902a5fAndreas Huber void freeActiveBuffers(); 180609b815a3131d22da38b2f452faa9f89daad4039Andy Hung 181609b815a3131d22da38b2f452faa9f89daad4039Andy Hung // For buffer id management 182d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id makeBufferID(OMX_BUFFERHEADERTYPE *bufferHeader); 183d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa OMX_BUFFERHEADERTYPE *findBufferHeader(IOMX::buffer_id buffer, OMX_U32 portIndex); 184d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id findBufferID(OMX_BUFFERHEADERTYPE *bufferHeader); 185d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa void invalidateBufferID(IOMX::buffer_id buffer); 186609b815a3131d22da38b2f452faa9f89daad4039Andy Hung 187d32d4030c3778b7947c08e9be7d38c229d8d555dLajos Molnar bool isProhibitedIndex_l(OMX_INDEXTYPE index); 188d32d4030c3778b7947c08e9be7d38c229d8d555dLajos Molnar 1893fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t useBuffer_l( 1903fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, const sp<IMemory> ¶ms, 191f62ea8018813951e8f6a182880cadb3217e4ce37Pawin Vongmasa const sp<IHidlMemory> &hParams, IOMX::buffer_id *buffer); 1923fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 193d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t useGraphicBuffer_l( 1943fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer, 195d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id *buffer); 1963fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 1973fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t useGraphicBufferWithMetadata_l( 1983fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer, 199d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id *buffer); 2003fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 201c5a57efb706ec79032fc09c43b16d11ed0876604Anu Sundararajan status_t useGraphicBuffer2_l( 202c5a57efb706ec79032fc09c43b16d11ed0876604Anu Sundararajan OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer, 203d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id *buffer); 2043fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 205d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t emptyBuffer_l( 206d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id buffer, 2073fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 rangeOffset, OMX_U32 rangeLength, 2083fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); 2093fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 210d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t emptyGraphicBuffer_l( 211d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id buffer, const sp<GraphicBuffer> &graphicBuffer, 2123fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); 2133fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 214d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t emptyNativeHandleBuffer_l( 215d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id buffer, const sp<NativeHandle> &nativeHandle, 2163fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); 2173fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 2183fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t emptyBuffer_l( 2193fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_BUFFERHEADERTYPE *header, 2203fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 flags, OMX_TICKS timestamp, intptr_t debugAddr, int fenceFd); 2213fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 222318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnEvent( 223318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 224318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 225318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_EVENTTYPE eEvent, 226318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_U32 nData1, 227318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_U32 nData2, 228318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pEventData); 229318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 230318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnEmptyBufferDone( 231318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 232318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 233318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 234318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 235318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber static OMX_ERRORTYPE OnFillBufferDone( 236318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_HANDLETYPE hComponent, 237318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_PTR pAppData, 238318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); 239318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 240d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang status_t enableNativeBuffers_l( 241d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang OMX_U32 portIndex, OMX_BOOL graphic, OMX_BOOL enable); 242d02c08671d666e12a94bcadd943787a9ab2ceea8Chong Zhang 243512e979284de984427e5b2f73b9054ae1b5e2b0aLajos Molnar status_t storeMetaDataInBuffers_l( 244054219874873b41f1c815552987c10465c34ba2bLajos Molnar OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type); 2457cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 24615ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Stores fence into buffer if it is ANWBuffer type and has enough space. 24715ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // otherwise, waits for the fence to signal. Takes ownership of |fenceFd|. 24815ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar status_t storeFenceInMeta_l( 24915ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar OMX_BUFFERHEADERTYPE *header, int fenceFd, OMX_U32 portIndex); 25015ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar 25115ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar // Retrieves the fence from buffer if ANWBuffer type and has enough space. Otherwise, returns -1 25215ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar int retrieveFenceFromMeta_l( 25315ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar OMX_BUFFERHEADERTYPE *header, OMX_U32 portIndex); 25415ab4996019387f27a48b81cb4774c21502bc0e5Lajos Molnar 255e63de4c60116261b90bc93b608ccd4bd182f3484Lajos Molnar // Updates the graphic buffer handle in the metadata buffer for |buffer| and |header| to 256e63de4c60116261b90bc93b608ccd4bd182f3484Lajos Molnar // |graphicBuffer|'s handle. If |updateCodecBuffer| is true, the update will happen in 257e63de4c60116261b90bc93b608ccd4bd182f3484Lajos Molnar // the actual codec buffer (use this if not using emptyBuffer (with no _l) later to 258e63de4c60116261b90bc93b608ccd4bd182f3484Lajos Molnar // pass the buffer to the codec, as only emptyBuffer copies the backup buffer to the codec 259e63de4c60116261b90bc93b608ccd4bd182f3484Lajos Molnar // buffer.) 260054219874873b41f1c815552987c10465c34ba2bLajos Molnar status_t updateGraphicBufferInMeta_l( 261054219874873b41f1c815552987c10465c34ba2bLajos Molnar OMX_U32 portIndex, const sp<GraphicBuffer> &graphicBuffer, 262d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id buffer, OMX_BUFFERHEADERTYPE *header); 263054219874873b41f1c815552987c10465c34ba2bLajos Molnar 2643fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang status_t updateNativeHandleInMeta_l( 2653fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang OMX_U32 portIndex, const sp<NativeHandle> &nativeHandle, 266d3ed3883c2d7bf3fb871be512055ed72cea964daPawin Vongmasa IOMX::buffer_id buffer, OMX_BUFFERHEADERTYPE *header); 2673fd200feb657c157125e45e30c2a7262e3c0244dChong Zhang 2686d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang sp<IOMXBufferSource> getBufferSource(); 2696d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang void setBufferSource(const sp<IOMXBufferSource> &bufferSource); 2706d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang // Called when omx_message::FILL_BUFFER_DONE is received. (Currently the 2716d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang // buffer source will fix timestamp in the header if needed.) 2726d332d2cdf6e62c2c20ebff220868fe9e3ed7f44Chong Zhang void codecBufferFilled(omx_message &msg); 2737cd58537932ef6f481f68be0b9c597a89cebdfecAndy McFadden 27426a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar // Handles |msg|, and may modify it. Returns true iff completely handled it and 27526a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar // |msg| does not need to be sent to the event listener. 27626a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar bool handleMessage(omx_message &msg); 27726a48f304a8754d655e554178ffb6d7ba4c5aac3Lajos Molnar 2786cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang bool handleDataSpaceChanged(omx_message &msg); 2796cf9a1238986880536de705255f7c2c91c1ba719Chong Zhang 2803604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang status_t setMaxPtsGapUs(const void *params, size_t size); 2813604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang int64_t getCodecTimestamp(OMX_TICKS timestamp); 2823604cb1a5548694393c7b7a87191eb517bebaa47Chong Zhang 283318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance(const OMXNodeInstance &); 284318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber OMXNodeInstance &operator=(const OMXNodeInstance &); 285318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber}; 286318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 287318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber} // namespace android 288318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber 289318ad9c1d9d6515026dfc2c021359d27decaa7a1Andreas Huber#endif // OMX_NODE_INSTANCE_H_ 290