diff options
author | Jeff Tinker <jtinker@google.com> | 2013-08-21 11:59:23 -0700 |
---|---|---|
committer | Jeff Tinker <jtinker@google.com> | 2013-08-22 09:27:35 -0700 |
commit | 9cf69e0fc110f17c28e988ed0f9bf91abfaf710d (patch) | |
tree | c5cb3fb67b26c852f8c7bea7e4eeb87952830842 /media | |
parent | 75c16dde986e16ac5fd4d34b06b0cc6a90679866 (diff) | |
download | frameworks_av-9cf69e0fc110f17c28e988ed0f9bf91abfaf710d.zip frameworks_av-9cf69e0fc110f17c28e988ed0f9bf91abfaf710d.tar.gz frameworks_av-9cf69e0fc110f17c28e988ed0f9bf91abfaf710d.tar.bz2 |
Add ability to test supported content types to MediaDrm
bug: 10244066
Change-Id: I317f05b146db962c271893f6208890a5a6c396f1
Diffstat (limited to 'media')
-rw-r--r-- | media/libmedia/IDrm.cpp | 7 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.cpp | 13 | ||||
-rw-r--r-- | media/libmediaplayerservice/Drm.h | 2 |
3 files changed, 14 insertions, 8 deletions
diff --git a/media/libmedia/IDrm.cpp b/media/libmedia/IDrm.cpp index 902aeb2..f7a9a75 100644 --- a/media/libmedia/IDrm.cpp +++ b/media/libmedia/IDrm.cpp @@ -68,10 +68,11 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } - virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) { + virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); data.write(uuid, 16); + data.writeString8(mimeType); remote()->transact(IS_CRYPTO_SUPPORTED, data, &reply); return reply.readInt32() != 0; @@ -438,7 +439,9 @@ status_t BnDrm::onTransact( CHECK_INTERFACE(IDrm, data, reply); uint8_t uuid[16]; data.read(uuid, sizeof(uuid)); - reply->writeInt32(isCryptoSchemeSupported(uuid)); + String8 mimeType = data.readString8(); + reply->writeInt32(isCryptoSchemeSupported(uuid, mimeType)); + return OK; } diff --git a/media/libmediaplayerservice/Drm.cpp b/media/libmediaplayerservice/Drm.cpp index f00f488..4b527d0 100644 --- a/media/libmediaplayerservice/Drm.cpp +++ b/media/libmediaplayerservice/Drm.cpp @@ -211,15 +211,18 @@ bool Drm::loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]) { return true; } -bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16]) { +bool Drm::isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType) { + Mutex::Autolock autoLock(mLock); - if (mFactory && mFactory->isCryptoSchemeSupported(uuid)) { - return true; + if (!mFactory || !mFactory->isCryptoSchemeSupported(uuid)) { + findFactoryForScheme(uuid); + if (mInitCheck != OK) { + return false; + } } - findFactoryForScheme(uuid); - return (mInitCheck == OK); + return mFactory->isContentTypeSupported(mimeType); } status_t Drm::createPlugin(const uint8_t uuid[16]) { diff --git a/media/libmediaplayerservice/Drm.h b/media/libmediaplayerservice/Drm.h index 3f460f1..119fd50 100644 --- a/media/libmediaplayerservice/Drm.h +++ b/media/libmediaplayerservice/Drm.h @@ -37,7 +37,7 @@ struct Drm : public BnDrm, virtual status_t initCheck() const; - virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]); + virtual bool isCryptoSchemeSupported(const uint8_t uuid[16], const String8 &mimeType); virtual status_t createPlugin(const uint8_t uuid[16]); |