summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/Crypto.cpp
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2015-04-06 18:21:05 -0700
committerJeff Tinker <jtinker@google.com>2015-04-08 18:33:59 -0700
commitc481b5012a5f6cf72e5e93b36f1ed4c9169916f2 (patch)
treebbb7920204199b43cd24075d48b8fa387a43059f /media/libmediaplayerservice/Crypto.cpp
parente41b5f31148f9cfb7316295c900c7d3c695510b2 (diff)
downloadframeworks_av-c481b5012a5f6cf72e5e93b36f1ed4c9169916f2.zip
frameworks_av-c481b5012a5f6cf72e5e93b36f1ed4c9169916f2.tar.gz
frameworks_av-c481b5012a5f6cf72e5e93b36f1ed4c9169916f2.tar.bz2
Pass crypto source data using a shared buffer
MediaCodec was using a binder transaction buffer to pass encryption source data for protected content. On some 4K content, the max binder transaction buffer size was being exceeded. This change uses a shared buffer for the encryption source data instead of a binder transaction buffer, which avoids the problem and may be more efficient. bug: 20027687 Change-Id: I36a24ebf600d7e1064b78e48b167fdc29b2c65e9
Diffstat (limited to 'media/libmediaplayerservice/Crypto.cpp')
-rw-r--r--media/libmediaplayerservice/Crypto.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/media/libmediaplayerservice/Crypto.cpp b/media/libmediaplayerservice/Crypto.cpp
index 8ee7c0b..e768772 100644
--- a/media/libmediaplayerservice/Crypto.cpp
+++ b/media/libmediaplayerservice/Crypto.cpp
@@ -22,6 +22,7 @@
#include "Crypto.h"
+#include <binder/IMemory.h>
#include <media/hardware/CryptoAPI.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AString.h>
@@ -238,7 +239,7 @@ ssize_t Crypto::decrypt(
const uint8_t key[16],
const uint8_t iv[16],
CryptoPlugin::Mode mode,
- const void *srcPtr,
+ const sp<IMemory> &sharedBuffer, size_t offset,
const CryptoPlugin::SubSample *subSamples, size_t numSubSamples,
void *dstPtr,
AString *errorDetailMsg) {
@@ -252,6 +253,8 @@ ssize_t Crypto::decrypt(
return -EINVAL;
}
+ const void *srcPtr = static_cast<uint8_t *>(sharedBuffer->pointer()) + offset;
+
return mPlugin->decrypt(
secure, key, iv, mode, srcPtr, subSamples, numSubSamples, dstPtr,
errorDetailMsg);