diff -r 000000000000 -r 6474c204b198 content/media/omx/OMXCodecProxy.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/content/media/omx/OMXCodecProxy.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,100 @@ +/* -*- 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_