diff options
author | Jeff Tinker <jtinker@google.com> | 2015-04-06 18:21:05 -0700 |
---|---|---|
committer | Jeff Tinker <jtinker@google.com> | 2015-04-08 18:33:59 -0700 |
commit | c481b5012a5f6cf72e5e93b36f1ed4c9169916f2 (patch) | |
tree | bbb7920204199b43cd24075d48b8fa387a43059f /media/libmediaplayerservice | |
parent | e41b5f31148f9cfb7316295c900c7d3c695510b2 (diff) | |
download | frameworks_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')
-rw-r--r-- | media/libmediaplayerservice/Crypto.cpp | 5 | ||||
-rw-r--r-- | media/libmediaplayerservice/Crypto.h | 2 |
2 files changed, 5 insertions, 2 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); diff --git a/media/libmediaplayerservice/Crypto.h b/media/libmediaplayerservice/Crypto.h index 0037c2e..d5f3c50 100644 --- a/media/libmediaplayerservice/Crypto.h +++ b/media/libmediaplayerservice/Crypto.h @@ -52,7 +52,7 @@ struct Crypto : public BnCrypto { 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); |