From c481b5012a5f6cf72e5e93b36f1ed4c9169916f2 Mon Sep 17 00:00:00 2001 From: Jeff Tinker Date: Mon, 6 Apr 2015 18:21:05 -0700 Subject: 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 --- include/media/ICrypto.h | 3 ++- include/media/stagefright/MediaCodec.h | 6 +++++- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'include/media') diff --git a/include/media/ICrypto.h b/include/media/ICrypto.h index 07742ca..ac2b3ba 100644 --- a/include/media/ICrypto.h +++ b/include/media/ICrypto.h @@ -25,6 +25,7 @@ namespace android { struct AString; +struct IMemory; struct ICrypto : public IInterface { DECLARE_META_INTERFACE(Crypto); @@ -48,7 +49,7 @@ struct ICrypto : public IInterface { const uint8_t key[16], const uint8_t iv[16], CryptoPlugin::Mode mode, - const void *srcPtr, + const sp &sharedBuffer, size_t offset, const CryptoPlugin::SubSample *subSamples, size_t numSubSamples, void *dstPtr, AString *errorDetailMsg) = 0; diff --git a/include/media/stagefright/MediaCodec.h b/include/media/stagefright/MediaCodec.h index d055341..3bc6391 100644 --- a/include/media/stagefright/MediaCodec.h +++ b/include/media/stagefright/MediaCodec.h @@ -30,8 +30,10 @@ struct AMessage; struct AReplyToken; struct AString; struct CodecBase; -struct ICrypto; struct IBatteryStats; +struct ICrypto; +struct IMemory; +struct MemoryDealer; struct SoftwareRenderer; struct Surface; @@ -214,6 +216,7 @@ private: uint32_t mBufferID; sp mData; sp mEncryptedData; + sp mSharedEncryptedBuffer; sp mNotify; sp mFormat; bool mOwnedByClient; @@ -232,6 +235,7 @@ private: sp mOutputFormat; sp mInputFormat; sp mCallback; + sp mDealer; bool mBatteryStatNotified; bool mIsVideo; -- cgit v1.1