Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Merge "Add a new API on DRM Framework for streaming"

  • Loading branch information...
commit 7a52ba8a0277f4b0c98e581115abc4a13cb47251 2 parents d9bde60 + d4726a8
Jean-Baptiste Queru authored android code review committed
View
5 drm/common/DrmEngineBase.cpp
@@ -129,6 +129,11 @@ status_t DrmEngineBase::openDecryptSession(
return onOpenDecryptSession(uniqueId, decryptHandle, uri);
}
+status_t DrmEngineBase::openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ const DrmBuffer& buf, const String8& mimeType) {
+ return onOpenDecryptSession(uniqueId, decryptHandle, buf, mimeType);
+}
+
status_t DrmEngineBase::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
return onCloseDecryptSession(uniqueId, decryptHandle);
}
View
51 drm/common/IDrmManagerService.cpp
@@ -640,6 +640,33 @@ DecryptHandle* BpDrmManagerService::openDecryptSession(int uniqueId, const char*
return handle;
}
+DecryptHandle* BpDrmManagerService::openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
+ ALOGV("Entering BpDrmManagerService::openDecryptSession");
+ Parcel data, reply;
+
+ data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor());
+ data.writeInt32(uniqueId);
+ if (buf.data != NULL && buf.length > 0) {
+ data.writeInt32(buf.length);
+ data.write(buf.data, buf.length);
+ } else {
+ data.writeInt32(0);
+ }
+ data.writeString8(mimeType);
+
+ remote()->transact(OPEN_DECRYPT_SESSION_FOR_STREAMING, data, &reply);
+
+ DecryptHandle* handle = NULL;
+ if (0 != reply.dataAvail()) {
+ handle = new DecryptHandle();
+ readDecryptHandleFromParcelData(handle, reply);
+ } else {
+ ALOGV("no decryptHandle is generated in service side");
+ }
+ return handle;
+}
+
status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
ALOGV("closeDecryptSession");
Parcel data, reply;
@@ -1297,6 +1324,30 @@ status_t BnDrmManagerService::onTransact(
return DRM_NO_ERROR;
}
+ case OPEN_DECRYPT_SESSION_FOR_STREAMING:
+ {
+ ALOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FOR_STREAMING");
+ CHECK_INTERFACE(IDrmManagerService, data, reply);
+
+ const int uniqueId = data.readInt32();
+ const int bufferSize = data.readInt32();
+ DrmBuffer buf((bufferSize > 0) ? (char *)data.readInplace(bufferSize) : NULL,
+ bufferSize);
+ const String8 mimeType(data.readString8());
+
+ DecryptHandle* handle = openDecryptSession(uniqueId, buf, mimeType);
+
+ if (handle != NULL) {
+ writeDecryptHandleToParcelData(handle, reply);
+ clearDecryptHandle(handle);
+ delete handle;
+ handle = NULL;
+ } else {
+ ALOGV("NULL decryptHandle is returned");
+ }
+ return DRM_NO_ERROR;
+ }
+
case CLOSE_DECRYPT_SESSION:
{
ALOGV("BnDrmManagerService::onTransact :CLOSE_DECRYPT_SESSION");
View
30 drm/drmserver/DrmManager.cpp
@@ -481,6 +481,36 @@ DecryptHandle* DrmManager::openDecryptSession(int uniqueId, const char* uri) {
return handle;
}
+DecryptHandle* DrmManager::openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
+ Mutex::Autolock _l(mDecryptLock);
+ status_t result = DRM_ERROR_CANNOT_HANDLE;
+ Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList();
+
+ DecryptHandle* handle = new DecryptHandle();
+ if (NULL != handle) {
+ handle->decryptId = mDecryptSessionId + 1;
+
+ for (size_t index = 0; index < plugInIdList.size(); index++) {
+ String8 plugInId = plugInIdList.itemAt(index);
+ IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId);
+ result = rDrmEngine.openDecryptSession(uniqueId, handle, buf, mimeType);
+
+ if (DRM_NO_ERROR == result) {
+ ++mDecryptSessionId;
+ mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine);
+ break;
+ }
+ }
+ }
+ if (DRM_NO_ERROR != result) {
+ delete handle;
+ handle = NULL;
+ ALOGV("DrmManager::openDecryptSession: no capable plug-in found");
+ }
+ return handle;
+}
+
status_t DrmManager::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
Mutex::Autolock _l(mDecryptLock);
status_t result = DRM_ERROR_UNKNOWN;
View
10 drm/drmserver/DrmManagerService.cpp
@@ -227,6 +227,16 @@ DecryptHandle* DrmManagerService::openDecryptSession(
return NULL;
}
+DecryptHandle* DrmManagerService::openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
+ ALOGV("Entering DrmManagerService::openDecryptSession for streaming");
+ if (isProtectedCallAllowed()) {
+ return mDrmManager->openDecryptSession(uniqueId, buf, mimeType);
+ }
+
+ return NULL;
+}
+
status_t DrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) {
ALOGV("Entering closeDecryptSession");
return mDrmManager->closeDecryptSession(uniqueId, decryptHandle);
View
5 drm/libdrmframework/DrmManagerClient.cpp
@@ -124,6 +124,11 @@ sp<DecryptHandle> DrmManagerClient::openDecryptSession(const char* uri) {
return mDrmManagerClientImpl->openDecryptSession(mUniqueId, uri);
}
+sp<DecryptHandle> DrmManagerClient::openDecryptSession(
+ const DrmBuffer& buf, const String8& mimeType) {
+ return mDrmManagerClientImpl->openDecryptSession(mUniqueId, buf, mimeType);
+}
+
status_t DrmManagerClient::closeDecryptSession(sp<DecryptHandle> &decryptHandle) {
return mDrmManagerClientImpl->closeDecryptSession(mUniqueId, decryptHandle);
}
View
5 drm/libdrmframework/DrmManagerClientImpl.cpp
@@ -268,6 +268,11 @@ sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
return handle;
}
+sp<DecryptHandle> DrmManagerClientImpl::openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType) {
+ return getDrmManagerService()->openDecryptSession(uniqueId, buf, mimeType);
+}
+
status_t DrmManagerClientImpl::closeDecryptSession(
int uniqueId, sp<DecryptHandle> &decryptHandle) {
status_t status = DRM_ERROR_UNKNOWN;
View
3  drm/libdrmframework/include/DrmManager.h
@@ -115,6 +115,9 @@ class DrmManager : public IDrmEngine::OnInfoListener {
DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
+ DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf,
+ const String8& mimeType);
+
status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
View
12 drm/libdrmframework/include/DrmManagerClientImpl.h
@@ -316,6 +316,18 @@ class DrmManagerClientImpl : public BnDrmServiceListener {
sp<DecryptHandle> openDecryptSession(int uniqueId, const char* uri);
/**
+ * Open the decrypt session to decrypt the given protected content
+ *
+ * @param[in] uniqueId Unique identifier for a session
+ * @param[in] buf Data to initiate decrypt session
+ * @param[in] mimeType Mime type of the protected content
+ * @return
+ * Handle for the decryption session
+ */
+ sp<DecryptHandle> openDecryptSession(int uniqueId, const DrmBuffer& buf,
+ const String8& mimeType);
+
+ /**
* Close the decrypt session for the given handle
*
* @param[in] uniqueId Unique identifier for a session
View
3  drm/libdrmframework/include/DrmManagerService.h
@@ -102,6 +102,9 @@ class DrmManagerService : public BnDrmManagerService {
DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
+ DecryptHandle* openDecryptSession(int uniqueId, const DrmBuffer& buf,
+ const String8& mimeType);
+
status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
View
7 drm/libdrmframework/include/IDrmManagerService.h
@@ -70,6 +70,7 @@ class IDrmManagerService : public IInterface
GET_ALL_SUPPORT_INFO,
OPEN_DECRYPT_SESSION,
OPEN_DECRYPT_SESSION_FROM_URI,
+ OPEN_DECRYPT_SESSION_FOR_STREAMING,
CLOSE_DECRYPT_SESSION,
INITIALIZE_DECRYPT_UNIT,
DECRYPT,
@@ -143,6 +144,9 @@ class IDrmManagerService : public IInterface
virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri) = 0;
+ virtual DecryptHandle* openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType) = 0;
+
virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) = 0;
virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
@@ -226,6 +230,9 @@ class BpDrmManagerService: public BpInterface<IDrmManagerService>
virtual DecryptHandle* openDecryptSession(int uniqueId, const char* uri);
+ virtual DecryptHandle* openDecryptSession(
+ int uniqueId, const DrmBuffer& buf, const String8& mimeType);
+
virtual status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
virtual status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
View
18 drm/libdrmframework/plugins/common/include/DrmEngineBase.h
@@ -85,6 +85,9 @@ class DrmEngineBase : public IDrmEngine {
status_t openDecryptSession(
int uniqueId, DecryptHandle* decryptHandle, const char* uri);
+ status_t openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ const DrmBuffer& buf, const String8& mimeType);
+
status_t closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle);
status_t initializeDecryptUnit(int uniqueId, DecryptHandle* decryptHandle,
@@ -390,6 +393,21 @@ class DrmEngineBase : public IDrmEngine {
int uniqueId, DecryptHandle* decryptHandle, const char* uri) = 0;
/**
+ * Open the decrypt session to decrypt the given protected content
+ *
+ * @param[in] uniqueId Unique identifier for a session
+ * @param[in] decryptHandle Handle for the current decryption session
+ * @param[in] buf Data to initiate decrypt session
+ * @param[in] mimeType Mime type of the protected content
+ * @return
+ * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
+ */
+ virtual status_t onOpenDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ const DrmBuffer& buf, const String8& mimeType) {
+ return DRM_ERROR_CANNOT_HANDLE;
+ }
+
+ /**
* Close the decrypt session for the given handle
*
* @param[in] uniqueId Unique identifier for a session
View
13 drm/libdrmframework/plugins/common/include/IDrmEngine.h
@@ -339,6 +339,19 @@ class IDrmEngine {
int uniqueId, DecryptHandle* decryptHandle, const char* uri) = 0;
/**
+ * Open the decrypt session to decrypt the given protected content
+ *
+ * @param[in] uniqueId Unique identifier for a session
+ * @param[in] decryptHandle Handle for the current decryption session
+ * @param[in] buf Data to initiate decrypt session
+ * @param[in] mimeType Mime type of the protected content
+ * @return
+ * DRM_ERROR_CANNOT_HANDLE for failure and DRM_NO_ERROR for success
+ */
+ virtual status_t openDecryptSession(int uniqueId, DecryptHandle* decryptHandle,
+ const DrmBuffer& buf, const String8& mimeType) = 0;
+
+ /**
* Close the decrypt session for the given handle
*
* @param[in] uniqueId Unique identifier for a session
View
10 include/drm/DrmManagerClient.h
@@ -81,6 +81,16 @@ class DrmManagerClient {
sp<DecryptHandle> openDecryptSession(const char* uri);
/**
+ * Open the decrypt session to decrypt the given protected content
+ *
+ * @param[in] buf Data to initiate decrypt session
+ * @param[in] mimeType Mime type of the protected content
+ * @return
+ * Handle for the decryption session
+ */
+ sp<DecryptHandle> openDecryptSession(const DrmBuffer& buf, const String8& mimeType);
+
+ /**
* Close the decrypt session for the given handle
*
* @param[in] decryptHandle Handle for the decryption session
Please sign in to comment.
Something went wrong with that request. Please try again.