Merge "Revert "DecryptHandle cleanup""

am: 43251208e3

Change-Id: Ief6609328e84f298aa23b9fbc8fab7fa4651b7a2
gugelfrei
Greg Kaiser 5 years ago committed by android-build-merger
commit 290638a8f6

@ -33,6 +33,7 @@
#include "IDrmManagerService.h" #include "IDrmManagerService.h"
#define INVALID_BUFFER_LENGTH (-1)
#define MAX_BINDER_TRANSACTION_SIZE ((1*1024*1024)-(4096*2)) #define MAX_BINDER_TRANSACTION_SIZE ((1*1024*1024)-(4096*2))
using namespace android; using namespace android;
@ -43,6 +44,26 @@ static void writeDecryptHandleToParcelData(
data->writeString8(handle->mimeType); data->writeString8(handle->mimeType);
data->writeInt32(handle->decryptApiType); data->writeInt32(handle->decryptApiType);
data->writeInt32(handle->status); data->writeInt32(handle->status);
int size = handle->copyControlVector.size();
data->writeInt32(size);
for (int i = 0; i < size; i++) {
data->writeInt32(handle->copyControlVector.keyAt(i));
data->writeInt32(handle->copyControlVector.valueAt(i));
}
size = handle->extendedData.size();
data->writeInt32(size);
for (int i = 0; i < size; i++) {
data->writeString8(handle->extendedData.keyAt(i));
data->writeString8(handle->extendedData.valueAt(i));
}
if (NULL != handle->decryptInfo) {
data->writeInt32(handle->decryptInfo->decryptBufferLength);
} else {
data->writeInt32(INVALID_BUFFER_LENGTH);
}
} }
static void readDecryptHandleFromParcelData( static void readDecryptHandleFromParcelData(
@ -55,12 +76,39 @@ static void readDecryptHandleFromParcelData(
handle->mimeType = data.readString8(); handle->mimeType = data.readString8();
handle->decryptApiType = data.readInt32(); handle->decryptApiType = data.readInt32();
handle->status = data.readInt32(); handle->status = data.readInt32();
int size = data.readInt32();
for (int i = 0; i < size; i++) {
DrmCopyControl key = (DrmCopyControl)data.readInt32();
int value = data.readInt32();
handle->copyControlVector.add(key, value);
}
size = data.readInt32();
for (int i = 0; i < size; i++) {
String8 key = data.readString8();
String8 value = data.readString8();
handle->extendedData.add(key, value);
}
handle->decryptInfo = NULL;
const int bufferLen = data.readInt32();
if (INVALID_BUFFER_LENGTH != bufferLen) {
handle->decryptInfo = new DecryptInfo();
handle->decryptInfo->decryptBufferLength = bufferLen;
}
} }
static void clearDecryptHandle(sp<DecryptHandle> &handle) { static void clearDecryptHandle(sp<DecryptHandle> &handle) {
if (handle == NULL) { if (handle == NULL) {
return; return;
} }
if (handle->decryptInfo) {
delete handle->decryptInfo;
handle->decryptInfo = NULL;
}
handle->copyControlVector.clear();
handle->extendedData.clear();
} }
int BpDrmManagerService::addUniqueId(bool isNative) { int BpDrmManagerService::addUniqueId(bool isNative) {

@ -512,6 +512,7 @@ status_t FwdLockEngine::onOpenDecryptSession(int /* uniqueId */,
decryptHandle->mimeType = MimeTypeUtil::convertMimeType(contentType); decryptHandle->mimeType = MimeTypeUtil::convertMimeType(contentType);
decryptHandle->decryptApiType = DecryptApiType::CONTAINER_BASED; decryptHandle->decryptApiType = DecryptApiType::CONTAINER_BASED;
decryptHandle->status = RightsStatus::RIGHTS_VALID; decryptHandle->status = RightsStatus::RIGHTS_VALID;
decryptHandle->decryptInfo = NULL;
result = DRM_NO_ERROR; result = DRM_NO_ERROR;
} else { } else {
if (retVal && NULL != decodeSession) { if (retVal && NULL != decodeSession) {
@ -578,6 +579,13 @@ status_t FwdLockEngine::onCloseDecryptSession(int /* uniqueId */,
} }
if (NULL != decryptHandle.get()) { if (NULL != decryptHandle.get()) {
if (NULL != decryptHandle->decryptInfo) {
delete decryptHandle->decryptInfo;
decryptHandle->decryptInfo = NULL;
}
decryptHandle->copyControlVector.clear();
decryptHandle->extendedData.clear();
decryptHandle.clear(); decryptHandle.clear();
} }

@ -244,6 +244,7 @@ status_t DrmPassthruPlugIn::onOpenDecryptSession(
decryptHandle->mimeType = String8("video/passthru"); decryptHandle->mimeType = String8("video/passthru");
decryptHandle->decryptApiType = DecryptApiType::ELEMENTARY_STREAM_BASED; decryptHandle->decryptApiType = DecryptApiType::ELEMENTARY_STREAM_BASED;
decryptHandle->status = DRM_NO_ERROR; decryptHandle->status = DRM_NO_ERROR;
decryptHandle->decryptInfo = NULL;
return DRM_NO_ERROR; return DRM_NO_ERROR;
#else #else
(void)(decryptHandle.get()); // unused (void)(decryptHandle.get()); // unused
@ -260,6 +261,9 @@ status_t DrmPassthruPlugIn::onOpenDecryptSession(
status_t DrmPassthruPlugIn::onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) { status_t DrmPassthruPlugIn::onCloseDecryptSession(int uniqueId, sp<DecryptHandle>& decryptHandle) {
ALOGV("DrmPassthruPlugIn::onCloseDecryptSession() : %d", uniqueId); ALOGV("DrmPassthruPlugIn::onCloseDecryptSession() : %d", uniqueId);
if (NULL != decryptHandle.get()) { if (NULL != decryptHandle.get()) {
if (NULL != decryptHandle->decryptInfo) {
delete decryptHandle->decryptInfo; decryptHandle->decryptInfo = NULL;
}
decryptHandle.clear(); decryptHandle.clear();
} }
return DRM_NO_ERROR; return DRM_NO_ERROR;

@ -48,6 +48,17 @@ enum {
DRM_NO_ERROR = NO_ERROR DRM_NO_ERROR = NO_ERROR
}; };
/**
* copy control settings used in DecryptHandle::copyControlVector
*/
enum DrmCopyControl {
DRM_COPY_CONTROL_BASE = 1000,
// the key used to set the value for HDCP
// if the associated value is 1, then HDCP is required
// otherwise, HDCP is not required
DRM_COPY_CONTROL_HDCP = DRM_COPY_CONTROL_BASE
};
/** /**
* Defines DRM Buffer * Defines DRM Buffer
*/ */
@ -225,6 +236,20 @@ public:
static const int CONTAINER_BASED = 0x02; static const int CONTAINER_BASED = 0x02;
}; };
/**
* Defines decryption information
*/
class DecryptInfo {
public:
/**
* size of memory to be allocated to get the decrypted content.
*/
int decryptBufferLength;
/**
* reserved for future purpose
*/
};
/** /**
* Defines decryption handle * Defines decryption handle
*/ */
@ -262,16 +287,35 @@ public:
* RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED * RIGHTS_VALID, RIGHTS_INVALID, RIGHTS_EXPIRED or RIGHTS_NOT_ACQUIRED
*/ */
int status; int status;
/**
* Information required to decrypt content
* e.g. size of memory to be allocated to get the decrypted content.
*/
DecryptInfo* decryptInfo;
/**
* Defines a vector for the copy control settings sent from the DRM plugin
* to the player
*/
KeyedVector<DrmCopyControl, int> copyControlVector;
/**
* Defines a vector for any extra data the DRM plugin wants to send
* to the native code
*/
KeyedVector<String8, String8> extendedData;
public: public:
DecryptHandle(): DecryptHandle():
decryptId(INVALID_VALUE), decryptId(INVALID_VALUE),
mimeType(""), mimeType(""),
decryptApiType(INVALID_VALUE), decryptApiType(INVALID_VALUE),
status(INVALID_VALUE) { status(INVALID_VALUE),
decryptInfo(NULL) {
} }
~DecryptHandle() { ~DecryptHandle() {
delete decryptInfo; decryptInfo = NULL;
} }
}; };

Loading…
Cancel
Save