mediaplayer2: per-source DRM prepare/release iface
Bug: 119675660
Test: MediaPlayer2DrmTest
Change-Id: I583be4de45cb7de4e1638fb3442511dbabc661b3
diff --git a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
index 4b19e38..5e98589 100644
--- a/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
+++ b/media/libmediaplayer2/include/mediaplayer2/MediaPlayer2Interface.h
@@ -260,11 +260,11 @@
virtual void onMessageReceived(const sp<AMessage> & /* msg */) override { }
// Modular DRM
- virtual status_t prepareDrm(const uint8_t /* uuid */[16],
+ virtual status_t prepareDrm(int64_t /*srcId*/, const uint8_t /* uuid */[16],
const Vector<uint8_t>& /* drmSessionId */) {
return INVALID_OPERATION;
}
- virtual status_t releaseDrm() {
+ virtual status_t releaseDrm(int64_t /*srcId*/) {
return INVALID_OPERATION;
}
diff --git a/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h b/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
index 4bc1a4a..c7cd7d2 100644
--- a/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
+++ b/media/libmediaplayer2/include/mediaplayer2/mediaplayer2.h
@@ -105,8 +105,10 @@
status_t getParameter(int key, Parcel* reply);
// Modular DRM
- status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId);
- status_t releaseDrm();
+ status_t prepareDrm(int64_t srcId,
+ const uint8_t uuid[16],
+ const Vector<uint8_t>& drmSessionId);
+ status_t releaseDrm(int64_t srcId);
// AudioRouting
status_t setPreferredDevice(jobject device);
jobject getRoutedDevice();
diff --git a/media/libmediaplayer2/mediaplayer2.cpp b/media/libmediaplayer2/mediaplayer2.cpp
index 921a5b7..2ae5a8c 100644
--- a/media/libmediaplayer2/mediaplayer2.cpp
+++ b/media/libmediaplayer2/mediaplayer2.cpp
@@ -1094,7 +1094,8 @@
}
// Modular DRM
-status_t MediaPlayer2::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) {
+status_t MediaPlayer2::prepareDrm(
+ int64_t srcId, const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) {
// TODO change to ALOGV
ALOGD("prepareDrm: uuid: %p drmSessionId: %p(%zu)", uuid,
drmSessionId.array(), drmSessionId.size());
@@ -1118,7 +1119,7 @@
}
// Passing down to mediaserver mainly for creating the crypto
- status_t status = mPlayer->prepareDrm(uuid, drmSessionId);
+ status_t status = mPlayer->prepareDrm(srcId, uuid, drmSessionId);
ALOGE_IF(status != OK, "prepareDrm: Failed at mediaserver with ret: %d", status);
// TODO change to ALOGV
@@ -1127,7 +1128,7 @@
return status;
}
-status_t MediaPlayer2::releaseDrm() {
+status_t MediaPlayer2::releaseDrm(int64_t srcId) {
Mutex::Autolock _l(mLock);
if (mPlayer == NULL) {
return NO_INIT;
@@ -1142,7 +1143,7 @@
return INVALID_OPERATION;
}
- status_t status = mPlayer->releaseDrm();
+ status_t status = mPlayer->releaseDrm(srcId);
// TODO change to ALOGV
ALOGD("releaseDrm: mediaserver::releaseDrm ret: %d", status);
if (status != OK) {
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
index 6c4f0db..d4ffdfe 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2.cpp
@@ -3046,7 +3046,8 @@
}
// Modular DRM begin
-status_t NuPlayer2::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
+status_t NuPlayer2::prepareDrm(
+ int64_t srcId, const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
{
ALOGV("prepareDrm ");
@@ -3056,6 +3057,7 @@
uint8_t UUID[16];
memcpy(UUID, uuid, sizeof(UUID));
Vector<uint8_t> sessionId = drmSessionId;
+ msg->setInt64("srcId", srcId);
msg->setPointer("uuid", (void*)UUID);
msg->setPointer("drmSessionId", (void*)&sessionId);
@@ -3072,11 +3074,12 @@
return status;
}
-status_t NuPlayer2::releaseDrm()
+status_t NuPlayer2::releaseDrm(int64_t srcId)
{
ALOGV("releaseDrm ");
sp<AMessage> msg = new AMessage(kWhatReleaseDrm, this);
+ msg->setInt64("srcId", srcId);
sp<AMessage> response;
status_t status = msg->postAndAwaitResponse(&response);
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2.h b/media/libmediaplayer2/nuplayer2/NuPlayer2.h
index 3ecdb01..93f9f00 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2.h
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2.h
@@ -92,8 +92,8 @@
float getFrameRate();
// Modular DRM
- status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId);
- status_t releaseDrm();
+ status_t prepareDrm(int64_t srcId, const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId);
+ status_t releaseDrm(int64_t srcId);
const char *getDataSourceType();
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
index 821dc9f..eff8866 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.cpp
@@ -976,24 +976,25 @@
}
// Modular DRM
-status_t NuPlayer2Driver::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
+status_t NuPlayer2Driver::prepareDrm(
+ int64_t srcId, const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId)
{
ALOGV("prepareDrm(%p) state: %d", this, mState);
// leaving the state verification for mediaplayer.cpp
- status_t ret = mPlayer->prepareDrm(uuid, drmSessionId);
+ status_t ret = mPlayer->prepareDrm(srcId, uuid, drmSessionId);
ALOGV("prepareDrm ret: %d", ret);
return ret;
}
-status_t NuPlayer2Driver::releaseDrm()
+status_t NuPlayer2Driver::releaseDrm(int64_t srcId)
{
ALOGV("releaseDrm(%p) state: %d", this, mState);
// leaving the state verification for mediaplayer.cpp
- status_t ret = mPlayer->releaseDrm();
+ status_t ret = mPlayer->releaseDrm(srcId);
ALOGV("releaseDrm ret: %d", ret);
diff --git a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
index 50ee173..bb30c76 100644
--- a/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
+++ b/media/libmediaplayer2/nuplayer2/NuPlayer2Driver.h
@@ -82,8 +82,9 @@
void notifyFlagsChanged(int64_t srcId, uint32_t flags);
// Modular DRM
- virtual status_t prepareDrm(const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId);
- virtual status_t releaseDrm();
+ virtual status_t prepareDrm(
+ int64_t srcId, const uint8_t uuid[16], const Vector<uint8_t> &drmSessionId);
+ virtual status_t releaseDrm(int64_t srcId);
protected:
virtual ~NuPlayer2Driver();