summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/drm/DrmAPI.h42
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_