summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2014-07-17 14:29:51 -0700
committerLajos Molnar <lajos@google.com>2014-07-17 21:14:52 -0700
commit095248375e29adde961ec2a44989ecb3a6dda6a2 (patch)
tree41c5e1378f8c7274b257837a4356efc54436d330 /media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
parentcc227036b05f7c2f960a89c567a61f9decefe742 (diff)
downloadframeworks_av-095248375e29adde961ec2a44989ecb3a6dda6a2.zip
frameworks_av-095248375e29adde961ec2a44989ecb3a6dda6a2.tar.gz
frameworks_av-095248375e29adde961ec2a44989ecb3a6dda6a2.tar.bz2
nuplayer: support widevine sources
- handle widevine:// scheme - add separate looper for renderer (as it can block initial buffer handling if all buffers are used) - initiate secure codecs before source is started - don't read secure buffers - share ACodec's input buffers with Widevine source on the decoder side - keep track of mediabuffers released by widevine source - keep track of dequeued input buffers (for safety) - release mediabuffer when buffer is subsequently dequeued. (This was hardcoded into OMXCodec to do this when buffer-empties message was handled, but MediaCodec does not support such functionality.) Bug: 15699665 Change-Id: I4a369443294e45c644be8b0257010e52db1d7c9b
Diffstat (limited to 'media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h')
-rw-r--r--media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h6
1 files changed, 6 insertions, 0 deletions
diff --git a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
index 4fa0dbd..c6fc237 100644
--- a/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
+++ b/media/libmediaplayerservice/nuplayer/NuPlayerDecoder.h
@@ -26,6 +26,7 @@ namespace android {
struct ABuffer;
struct MediaCodec;
+struct MediaBuffer;
struct NuPlayer::Decoder : public AHandler {
Decoder(const sp<AMessage> &notify,
@@ -34,6 +35,7 @@ struct NuPlayer::Decoder : public AHandler {
virtual void configure(const sp<AMessage> &format);
virtual void init();
+ status_t getInputBuffers(Vector<sp<ABuffer> > *dstBuffers) const;
virtual void signalFlush();
virtual void signalResume();
virtual void initiateShutdown();
@@ -60,6 +62,7 @@ private:
enum {
kWhatCodecNotify = 'cdcN',
kWhatConfigure = 'conf',
+ kWhatGetInputBuffers = 'gInB',
kWhatInputBufferFilled = 'inpF',
kWhatRenderBuffer = 'rndr',
kWhatFlush = 'flus',
@@ -77,11 +80,14 @@ private:
Vector<sp<ABuffer> > mInputBuffers;
Vector<sp<ABuffer> > mOutputBuffers;
+ Vector<bool> mInputBufferIsDequeued;
+ Vector<MediaBuffer *> mMediaBuffers;
void handleError(int32_t err);
bool handleAnInputBuffer();
bool handleAnOutputBuffer();
+ void releaseAndResetMediaBuffers();
void requestCodecNotification();
bool isStaleReply(const sp<AMessage> &msg);