diff options
author | Jeff Tinker <jtinker@google.com> | 2013-04-05 01:16:21 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-04-05 01:16:21 +0000 |
commit | 18bd1d6d55a275d23188251169dfe3cc74882665 (patch) | |
tree | 2ecbc304b29732d7659d11f15cdfe4d1c62c6234 | |
parent | 6d5b8e600e77164d3b5e51b89bf9c940fd7b4ea2 (diff) | |
parent | 7eafcae5ffb7f6f12ee573dea685dc6989a0ee91 (diff) | |
download | frameworks_native-18bd1d6d55a275d23188251169dfe3cc74882665.zip frameworks_native-18bd1d6d55a275d23188251169dfe3cc74882665.tar.gz frameworks_native-18bd1d6d55a275d23188251169dfe3cc74882665.tar.bz2 |
Merge "Implement async event callout from drm plugin to Java app" into jb-mr2-dev
-rw-r--r-- | include/media/drm/DrmAPI.h | 42 |
1 files changed, 39 insertions, 3 deletions
diff --git a/include/media/drm/DrmAPI.h b/include/media/drm/DrmAPI.h index 81d1ec0..c89f2d6 100644 --- a/include/media/drm/DrmAPI.h +++ b/include/media/drm/DrmAPI.h @@ -22,6 +22,7 @@ #include <utils/Vector.h> #include <utils/KeyedVector.h> #include <utils/RefBase.h> +#include <utils/Mutex.h> #include <media/stagefright/foundation/ABase.h> // Loadable DrmEngine shared libraries should define the entry points @@ -34,7 +35,8 @@ namespace android { - struct DrmPlugin; + class DrmPlugin; + class DrmPluginListener; // DRMs are implemented in DrmEngine plugins, which are dynamically // loadable shared libraries that implement the entry points @@ -70,7 +72,7 @@ namespace android { class DrmPlugin { public: enum EventType { - kDrmPluginEventProvisionRequired, + kDrmPluginEventProvisionRequired = 1, kDrmPluginEventKeyNeeded, kDrmPluginEventKeyExpired, kDrmPluginEventVendorDefined @@ -261,12 +263,46 @@ namespace android { bool &match) = 0; + status_t setListener(const sp<DrmPluginListener>& listener) { + Mutex::Autolock lock(mEventLock); + mListener = listener; + return OK; + } + + protected: + // Plugins call sendEvent to deliver events to the java app + void sendEvent(EventType eventType, int extra, + Vector<uint8_t> const *sessionId, + Vector<uint8_t> const *data); - // TODO: provide way to send an event private: + Mutex mEventLock; + sp<DrmPluginListener> mListener; + DISALLOW_EVIL_CONSTRUCTORS(DrmPlugin); }; + class DrmPluginListener: virtual public RefBase + { + public: + virtual void sendEvent(DrmPlugin::EventType eventType, int extra, + Vector<uint8_t> const *sesionId, + Vector<uint8_t> const *data) = 0; + }; + + inline void DrmPlugin::sendEvent(EventType eventType, int extra, + Vector<uint8_t> const *sessionId, + Vector<uint8_t> const *data) { + + mEventLock.lock(); + sp<DrmPluginListener> listener = mListener; + mEventLock.unlock(); + + if (listener != NULL) { + listener->sendEvent(eventType, extra, sessionId, data); + } + } + } // namespace android #endif // DRM_API_H_ |