summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/MediaCodec.cpp
diff options
context:
space:
mode:
authorLajos Molnar <lajos@google.com>2015-04-10 17:18:22 -0700
committerLajos Molnar <lajos@google.com>2015-04-10 17:48:56 -0700
commite6109e2f10b43c2cc2561c6fd6633b5f988bd7a9 (patch)
tree3b8f9bd7d8caab7cdd2e58ad5a918619938db9a3 /media/libstagefright/MediaCodec.cpp
parent421f47ca9c2dcc78584b2bb609c3755483b55155 (diff)
downloadframeworks_av-e6109e2f10b43c2cc2561c6fd6633b5f988bd7a9.zip
frameworks_av-e6109e2f10b43c2cc2561c6fd6633b5f988bd7a9.tar.gz
frameworks_av-e6109e2f10b43c2cc2561c6fd6633b5f988bd7a9.tar.bz2
mediaplayer: support async mode for widevine legacy mode
Bug: 14679336 Change-Id: Id224eb8c31ec148ca9a144758cc56ddbf5465f5c
Diffstat (limited to 'media/libstagefright/MediaCodec.cpp')
-rw-r--r--media/libstagefright/MediaCodec.cpp16
1 files changed, 15 insertions, 1 deletions
diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp
index 8186f63..85b1f6b 100644
--- a/media/libstagefright/MediaCodec.cpp
+++ b/media/libstagefright/MediaCodec.cpp
@@ -546,6 +546,16 @@ status_t MediaCodec::getName(AString *name) const {
return OK;
}
+status_t MediaCodec::getWidevineLegacyBuffers(Vector<sp<ABuffer> > *buffers) const {
+ sp<AMessage> msg = new AMessage(kWhatGetBuffers, this);
+ msg->setInt32("portIndex", kPortIndexInput);
+ msg->setPointer("buffers", buffers);
+ msg->setInt32("widevine", true);
+
+ sp<AMessage> response;
+ return PostAndAwaitResponse(msg, &response);
+}
+
status_t MediaCodec::getInputBuffers(Vector<sp<ABuffer> > *buffers) const {
sp<AMessage> msg = new AMessage(kWhatGetBuffers, this);
msg->setInt32("portIndex", kPortIndexInput);
@@ -1602,8 +1612,12 @@ void MediaCodec::onMessageReceived(const sp<AMessage> &msg) {
{
sp<AReplyToken> replyID;
CHECK(msg->senderAwaitsResponse(&replyID));
+ // Unfortunately widevine legacy source requires knowing all of the
+ // codec input buffers, so we have to provide them even in async mode.
+ int32_t widevine = 0;
+ msg->findInt32("widevine", &widevine);
- if (!isExecuting() || (mFlags & kFlagIsAsync)) {
+ if (!isExecuting() || ((mFlags & kFlagIsAsync) && !widevine)) {
PostReplyWithError(replyID, INVALID_OPERATION);
break;
} else if (mFlags & kFlagStickyError) {