diff options
author | Chong Zhang <chz@google.com> | 2014-11-12 16:41:05 -0800 |
---|---|---|
committer | Chong Zhang <chz@google.com> | 2014-11-20 18:14:31 -0800 |
commit | 7137ec7e005a5a6e3c0edb91cfacf16a31f4bf6a (patch) | |
tree | df4513073e85173034aca859ff220d8908969636 /media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h | |
parent | f4ea51fda9396d7ee851b1d4d220384210ea2336 (diff) | |
download | frameworks_av-7137ec7e005a5a6e3c0edb91cfacf16a31f4bf6a.zip frameworks_av-7137ec7e005a5a6e3c0edb91cfacf16a31f4bf6a.tar.gz frameworks_av-7137ec7e005a5a6e3c0edb91cfacf16a31f4bf6a.tar.bz2 |
tunnel NuPlayer source and decoder input
Bug: 18342383
Change-Id: Ieff1cd3bad2b39d46f127ddd5d5139b919992461
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h')
-rw-r--r-- | media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h | 62 |
1 files changed, 32 insertions, 30 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h index 7742d30..3fe32b6 100644 --- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h +++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h @@ -20,23 +20,18 @@ #include "NuPlayer.h" -#include "NuPlayerDecoder.h" +#include "NuPlayerDecoderBase.h" namespace android { -struct NuPlayer::DecoderPassThrough : public Decoder { +struct NuPlayer::DecoderPassThrough : public DecoderBase { DecoderPassThrough(const sp<AMessage> ¬ify, const sp<Source> &source, const sp<Renderer> &renderer); - virtual void configure(const sp<AMessage> &format); - virtual void init(); - - virtual void signalFlush(); - virtual void signalResume(); - virtual void initiateShutdown(); - - bool supportsSeamlessFormatChange(const sp<AMessage> &to) const; + virtual void getStats( + int64_t *mNumFramesTotal, + int64_t *mNumFramesDropped) const; protected: @@ -44,42 +39,49 @@ protected: virtual void onMessageReceived(const sp<AMessage> &msg); + virtual void onConfigure(const sp<AMessage> &format); + virtual void onSetRenderer(const sp<Renderer> &renderer); + virtual void onGetInputBuffers(Vector<sp<ABuffer> > *dstBuffers); + virtual void onResume(); + virtual void onFlush(bool notifyComplete); + virtual void onShutdown(bool notifyComplete); + virtual void doRequestBuffers(); + private: enum { - kWhatRequestABuffer = 'reqB', kWhatBufferConsumed = 'bufC', }; sp<AMessage> mNotify; - sp<ALooper> mDecoderLooper; - sp<Source> mSource; sp<Renderer> mRenderer; - - /** Returns true if a buffer was requested. - * Returns false if at EOS or cache already full. - */ - bool requestABuffer(); - bool isStaleReply(const sp<AMessage> &msg); - - void onConfigure(const sp<AMessage> &format); - void onFlush(); - void onInputBufferFilled(const sp<AMessage> &msg); - void onBufferConsumed(int32_t size); - void requestMaxBuffers(); - void onShutdown(); - int64_t mSkipRenderingUntilMediaTimeUs; int32_t mBufferGeneration; bool mReachedEOS; - // TODO mPendingBuffersToFill and mPendingBuffersToDrain are only for - // debugging. They can be removed when the power investigation is done. - size_t mPendingBuffersToFill; + + // Used by feedDecoderInputData to aggregate small buffers into + // one large buffer. + sp<ABuffer> mPendingAudioAccessUnit; + status_t mPendingAudioErr; + sp<ABuffer> mAggregateBuffer; + + // mPendingBuffersToDrain are only for debugging. It can be removed + // when the power investigation is done. size_t mPendingBuffersToDrain; size_t mCachedBytes; AString mComponentName; + bool isStaleReply(const sp<AMessage> &msg); + bool isCacheFullOrEOS() const; + + status_t dequeueAccessUnit(sp<ABuffer> *accessUnit); + sp<ABuffer> aggregateBuffer(const sp<ABuffer> &accessUnit); + status_t fetchInputData(sp<AMessage> &reply); + + void onInputBufferFetched(const sp<AMessage> &msg); + void onBufferConsumed(int32_t size); + DISALLOW_EVIL_CONSTRUCTORS(DecoderPassThrough); }; |