summaryrefslogtreecommitdiffstats
path: root/media/libmediaplayerservice/Crypto.h
diff options
context:
space:
mode:
authorJeff Tinker <jtinker@google.com>2013-03-22 15:26:39 -0700
committerJeff Tinker <jtinker@google.com>2013-03-22 15:26:39 -0700
commitbafb682ec7f51486e751fea954169deb91846063 (patch)
tree88d3be30ac8e26843929fcda2fb3d2535c313ea4 /media/libmediaplayerservice/Crypto.h
parent9e36b5a5c630c303b5007fdeb5c0df83b953adf4 (diff)
downloadframeworks_av-bafb682ec7f51486e751fea954169deb91846063.zip
frameworks_av-bafb682ec7f51486e751fea954169deb91846063.tar.gz
frameworks_av-bafb682ec7f51486e751fea954169deb91846063.tar.bz2
Load crypto plugins from additional shared libraries
Currently crypto plugins are expected to be in libdrmdecrypt.so. When there are multiple plugins supporting different schemes, this approach requires source code integration across vendors which is unmanagable. Also, for integration with MediaDrm where the crypto keys are obtained from a drm server, the MediaCrypto plugin needs to interoperate with the MediaDrm plugin. This change allows {MediaCrypto, MediaDrm} pairs that are logically related to be implemented in a common shared library. Change-Id: I7f6638f29171f91609fc2d944396365568630b56
Diffstat (limited to 'media/libmediaplayerservice/Crypto.h')
-rw-r--r--media/libmediaplayerservice/Crypto.h15
1 files changed, 12 insertions, 3 deletions
diff --git a/media/libmediaplayerservice/Crypto.h b/media/libmediaplayerservice/Crypto.h
index d066774..c44ae34 100644
--- a/media/libmediaplayerservice/Crypto.h
+++ b/media/libmediaplayerservice/Crypto.h
@@ -20,6 +20,9 @@
#include <media/ICrypto.h>
#include <utils/threads.h>
+#include <utils/KeyedVector.h>
+
+#include "SharedLibrary.h"
namespace android {
@@ -32,7 +35,7 @@ struct Crypto : public BnCrypto {
virtual status_t initCheck() const;
- virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]) const;
+ virtual bool isCryptoSchemeSupported(const uint8_t uuid[16]);
virtual status_t createPlugin(
const uint8_t uuid[16], const void *data, size_t size);
@@ -56,11 +59,17 @@ private:
mutable Mutex mLock;
status_t mInitCheck;
- void *mLibHandle;
+ sp<SharedLibrary> mLibrary;
CryptoFactory *mFactory;
CryptoPlugin *mPlugin;
- status_t init();
+ static KeyedVector<Vector<uint8_t>, String8> mUUIDToLibraryPathMap;
+ static KeyedVector<String8, wp<SharedLibrary> > mLibraryPathToOpenLibraryMap;
+ static Mutex mMapLock;
+
+ void findFactoryForScheme(const uint8_t uuid[16]);
+ bool loadLibraryForScheme(const String8 &path, const uint8_t uuid[16]);
+ void closeFactory();
DISALLOW_EVIL_CONSTRUCTORS(Crypto);
};