summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h
diff options
context:
space:
mode:
authorChong Zhang <chz@google.com>2014-11-12 16:41:05 -0800
committerChong Zhang <chz@google.com>2014-11-20 18:14:31 -0800
commit7137ec7e005a5a6e3c0edb91cfacf16a31f4bf6a (patch)
treedf4513073e85173034aca859ff220d8908969636 /media/libmediaplayerservice/nuplayer/NuPlayerDecoderPassThrough.h
parentf4ea51fda9396d7ee851b1d4d220384210ea2336 (diff)
downloadframeworks_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.h62
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> &notify,
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);
};