/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim:set ts=2 sw=2 sts=2 et cindent: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this file, * You can obtain one at http://mozilla.org/MPL/2.0/. */ #ifndef OMX_CODEC_PROXY_DECODER_H_ #define OMX_CODEC_PROXY_DECODER_H_ #include #include #include #include #include #include "MediaResourceManagerClient.h" namespace android { struct MediaBufferGroup; struct MetaData; class OMXCodecProxy : public MediaSource, public MediaResourceManagerClient::EventListener { public: struct EventListener : public virtual RefBase { virtual void statusChanged() = 0; }; static sp Create( const sp &omx, const sp &meta, bool createEncoder, const sp &source, const char *matchComponentName = nullptr, uint32_t flags = 0, const sp &nativeWindow = nullptr); MediaResourceManagerClient::State getState(); void setEventListener(const wp& listener); void requestResource(); bool IsWaitingResources(); // MediaResourceManagerClient::EventListener virtual void statusChanged(int event); // MediaSource virtual status_t start(MetaData *params = nullptr); virtual status_t stop(); virtual sp getFormat(); virtual status_t read( MediaBuffer **buffer, const ReadOptions *options = nullptr); virtual status_t pause(); protected: OMXCodecProxy( const sp &omx, const sp &meta, bool createEncoder, const sp &source, const char *matchComponentName, uint32_t flags, const sp &nativeWindow); virtual ~OMXCodecProxy(); void notifyStatusChangedLocked(); private: OMXCodecProxy(const OMXCodecProxy &); OMXCodecProxy &operator=(const OMXCodecProxy &); Mutex mLock; sp mOMX; sp mSrcMeta; char *mComponentName; bool mIsEncoder; // Flags specified in the creation of the codec. uint32_t mFlags; sp mNativeWindow; sp mSource; sp mOMXCodec; sp mClient; MediaResourceManagerClient::State mState; sp mManagerService; wp mEventListener; }; } // namespace android #endif // OMX_CODEC_PROXY_DECODER_H_