Loading drm/common/IDrmManagerService.cpp +88 −188 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,63 @@ using namespace android; using namespace android; static void writeDecrptHandleToParcelData( const DecryptHandle* handle, Parcel* data) { data->writeInt32(handle->decryptId); data->writeString8(handle->mimeType); data->writeInt32(handle->decryptApiType); 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)); } if (NULL != handle->decryptInfo) { data->writeInt32(handle->decryptInfo->decryptBufferLength); } else { data->writeInt32(INVALID_BUFFER_LENGTH); } } static void readDecryptHandleFromParcelData( DecryptHandle* handle, const Parcel& data) { if (0 == data.dataAvail()) { return; } handle->decryptId = data.readInt32(); handle->mimeType = data.readString8(); handle->decryptApiType = data.readInt32(); handle->status = data.readInt32(); int size = data.readInt32(); for (int i = 0; i < size; i ++) { handle->copyControlVector.add( (DrmCopyControl)data.readInt32(), data.readInt32()); } handle->decryptInfo = NULL; const int bufferLen = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLen) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = bufferLen; } } static void clearDecryptHandle(DecryptHandle* handle) { if (handle == NULL) { return; } if (handle->decryptInfo) { delete handle->decryptInfo; handle->decryptInfo = NULL; } handle->copyControlVector.clear(); } int BpDrmManagerService::addUniqueId(int uniqueId) { int BpDrmManagerService::addUniqueId(int uniqueId) { LOGV("add uniqueid"); LOGV("add uniqueid"); Parcel data, reply; Parcel data, reply; Loading Loading @@ -344,16 +401,7 @@ status_t BpDrmManagerService::consumeRights( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(action); data.writeInt32(action); data.writeInt32(static_cast< int>(reserve)); data.writeInt32(static_cast< int>(reserve)); Loading @@ -370,16 +418,7 @@ status_t BpDrmManagerService::setPlaybackStatus( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(playbackStatus); data.writeInt32(playbackStatus); data.writeInt64(position); data.writeInt64(position); Loading Loading @@ -560,15 +599,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( DecryptHandle* handle = NULL; DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); readDecryptHandleFromParcelData(handle, reply); handle->mimeType = reply.readString8(); handle->decryptApiType = reply.readInt32(); handle->status = reply.readInt32(); handle->decryptInfo = NULL; if (0 != reply.dataAvail()) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = reply.readInt32(); } } } return handle; return handle; } } Loading @@ -586,15 +617,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession(int uniqueId, const char* DecryptHandle* handle = NULL; DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); readDecryptHandleFromParcelData(handle, reply); handle->mimeType = reply.readString8(); handle->decryptApiType = reply.readInt32(); handle->status = reply.readInt32(); handle->decryptInfo = NULL; if (0 != reply.dataAvail()) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = reply.readInt32(); } } else { } else { LOGV("no decryptHandle is generated in service side"); LOGV("no decryptHandle is generated in service side"); } } Loading @@ -608,16 +631,7 @@ status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* d data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } remote()->transact(CLOSE_DECRYPT_SESSION, data, &reply); remote()->transact(CLOSE_DECRYPT_SESSION, data, &reply); Loading @@ -633,16 +647,8 @@ status_t BpDrmManagerService::initializeDecryptUnit( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); data.writeInt32(headerInfo->length); data.writeInt32(headerInfo->length); Loading @@ -661,16 +667,7 @@ status_t BpDrmManagerService::decrypt( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); data.writeInt32((*decBuffer)->length); data.writeInt32((*decBuffer)->length); Loading Loading @@ -703,16 +700,7 @@ status_t BpDrmManagerService::finalizeDecryptUnit( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); Loading @@ -730,16 +718,7 @@ ssize_t BpDrmManagerService::pread( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(numBytes); data.writeInt32(numBytes); data.writeInt64(offset); data.writeInt64(offset); Loading Loading @@ -1064,24 +1043,14 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status const status_t status = consumeRights(uniqueId, &handle, data.readInt32(), = consumeRights(uniqueId, &handle, data.readInt32(), static_cast<bool>(data.readInt32())); static_cast<bool>(data.readInt32())); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1093,23 +1062,13 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status const status_t status = setPlaybackStatus(uniqueId, &handle, data.readInt32(), data.readInt64()); = setPlaybackStatus(uniqueId, &handle, data.readInt32(), data.readInt64()); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading Loading @@ -1270,16 +1229,10 @@ status_t BnDrmManagerService::onTransact( = openDecryptSession(uniqueId, fd, data.readInt64(), data.readInt64()); = openDecryptSession(uniqueId, fd, data.readInt64(), data.readInt64()); if (NULL != handle) { if (NULL != handle) { reply->writeInt32(handle->decryptId); writeDecrptHandleToParcelData(handle, reply); reply->writeString8(handle->mimeType); clearDecryptHandle(handle); reply->writeInt32(handle->decryptApiType); reply->writeInt32(handle->status); if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } delete handle; handle = NULL; delete handle; handle = NULL; } return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1294,18 +1247,13 @@ status_t BnDrmManagerService::onTransact( DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); if (NULL != handle) { if (NULL != handle) { reply->writeInt32(handle->decryptId); writeDecrptHandleToParcelData(handle, reply); reply->writeString8(handle->mimeType); reply->writeInt32(handle->decryptApiType); clearDecryptHandle(handle); reply->writeInt32(handle->status); delete handle; handle = NULL; if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } else { } else { LOGV("NULL decryptHandle is returned"); LOGV("NULL decryptHandle is returned"); } } delete handle; handle = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1317,17 +1265,7 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle* handle = new DecryptHandle(); DecryptHandle* handle = new DecryptHandle(); handle->decryptId = data.readInt32(); readDecryptHandleFromParcelData(handle, data); handle->mimeType = data.readString8(); handle->decryptApiType = data.readInt32(); handle->status = data.readInt32(); handle->decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = bufferLength; } const status_t status = closeDecryptSession(uniqueId, handle); const status_t status = closeDecryptSession(uniqueId, handle); reply->writeInt32(status); reply->writeInt32(status); Loading @@ -1342,17 +1280,8 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int decryptUnitId = data.readInt32(); const int decryptUnitId = data.readInt32(); //Filling Header info //Filling Header info Loading @@ -1364,7 +1293,7 @@ status_t BnDrmManagerService::onTransact( = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo); = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete headerInfo; headerInfo = NULL; delete headerInfo; headerInfo = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1377,17 +1306,8 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int decryptUnitId = data.readInt32(); const int decryptUnitId = data.readInt32(); const int decBufferSize = data.readInt32(); const int decBufferSize = data.readInt32(); Loading @@ -1414,7 +1334,7 @@ status_t BnDrmManagerService::onTransact( reply->writeInt32(size); reply->writeInt32(size); reply->write(decBuffer->data, size); reply->write(decBuffer->data, size); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete encBuffer; encBuffer = NULL; delete encBuffer; encBuffer = NULL; delete decBuffer; decBuffer = NULL; delete decBuffer; decBuffer = NULL; delete [] buffer; buffer = NULL; delete [] buffer; buffer = NULL; Loading @@ -1430,22 +1350,12 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32()); const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32()); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1457,17 +1367,7 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int numBytes = data.readInt32(); const int numBytes = data.readInt32(); char* buffer = new char[numBytes]; char* buffer = new char[numBytes]; Loading @@ -1480,7 +1380,7 @@ status_t BnDrmManagerService::onTransact( reply->write(buffer, result); reply->write(buffer, result); } } delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete [] buffer, buffer = NULL; delete [] buffer, buffer = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading include/drm/drm_framework_common.h +16 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,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 */ */ Loading Loading @@ -280,6 +291,11 @@ public: * e.g. size of memory to be allocated to get the decrypted content. * e.g. size of memory to be allocated to get the decrypted content. */ */ DecryptInfo* decryptInfo; DecryptInfo* decryptInfo; /** * Defines a vector for the copy control settings sent from the DRM plugin * to the player */ KeyedVector<DrmCopyControl, int> copyControlVector; public: public: DecryptHandle(): DecryptHandle(): Loading Loading
drm/common/IDrmManagerService.cpp +88 −188 Original line number Original line Diff line number Diff line Loading @@ -37,6 +37,63 @@ using namespace android; using namespace android; static void writeDecrptHandleToParcelData( const DecryptHandle* handle, Parcel* data) { data->writeInt32(handle->decryptId); data->writeString8(handle->mimeType); data->writeInt32(handle->decryptApiType); 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)); } if (NULL != handle->decryptInfo) { data->writeInt32(handle->decryptInfo->decryptBufferLength); } else { data->writeInt32(INVALID_BUFFER_LENGTH); } } static void readDecryptHandleFromParcelData( DecryptHandle* handle, const Parcel& data) { if (0 == data.dataAvail()) { return; } handle->decryptId = data.readInt32(); handle->mimeType = data.readString8(); handle->decryptApiType = data.readInt32(); handle->status = data.readInt32(); int size = data.readInt32(); for (int i = 0; i < size; i ++) { handle->copyControlVector.add( (DrmCopyControl)data.readInt32(), data.readInt32()); } handle->decryptInfo = NULL; const int bufferLen = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLen) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = bufferLen; } } static void clearDecryptHandle(DecryptHandle* handle) { if (handle == NULL) { return; } if (handle->decryptInfo) { delete handle->decryptInfo; handle->decryptInfo = NULL; } handle->copyControlVector.clear(); } int BpDrmManagerService::addUniqueId(int uniqueId) { int BpDrmManagerService::addUniqueId(int uniqueId) { LOGV("add uniqueid"); LOGV("add uniqueid"); Parcel data, reply; Parcel data, reply; Loading Loading @@ -344,16 +401,7 @@ status_t BpDrmManagerService::consumeRights( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(action); data.writeInt32(action); data.writeInt32(static_cast< int>(reserve)); data.writeInt32(static_cast< int>(reserve)); Loading @@ -370,16 +418,7 @@ status_t BpDrmManagerService::setPlaybackStatus( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(playbackStatus); data.writeInt32(playbackStatus); data.writeInt64(position); data.writeInt64(position); Loading Loading @@ -560,15 +599,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( DecryptHandle* handle = NULL; DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); readDecryptHandleFromParcelData(handle, reply); handle->mimeType = reply.readString8(); handle->decryptApiType = reply.readInt32(); handle->status = reply.readInt32(); handle->decryptInfo = NULL; if (0 != reply.dataAvail()) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = reply.readInt32(); } } } return handle; return handle; } } Loading @@ -586,15 +617,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession(int uniqueId, const char* DecryptHandle* handle = NULL; DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); readDecryptHandleFromParcelData(handle, reply); handle->mimeType = reply.readString8(); handle->decryptApiType = reply.readInt32(); handle->status = reply.readInt32(); handle->decryptInfo = NULL; if (0 != reply.dataAvail()) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = reply.readInt32(); } } else { } else { LOGV("no decryptHandle is generated in service side"); LOGV("no decryptHandle is generated in service side"); } } Loading @@ -608,16 +631,7 @@ status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* d data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } remote()->transact(CLOSE_DECRYPT_SESSION, data, &reply); remote()->transact(CLOSE_DECRYPT_SESSION, data, &reply); Loading @@ -633,16 +647,8 @@ status_t BpDrmManagerService::initializeDecryptUnit( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); data.writeInt32(headerInfo->length); data.writeInt32(headerInfo->length); Loading @@ -661,16 +667,7 @@ status_t BpDrmManagerService::decrypt( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); data.writeInt32((*decBuffer)->length); data.writeInt32((*decBuffer)->length); Loading Loading @@ -703,16 +700,7 @@ status_t BpDrmManagerService::finalizeDecryptUnit( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(decryptUnitId); data.writeInt32(decryptUnitId); Loading @@ -730,16 +718,7 @@ ssize_t BpDrmManagerService::pread( data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeInt32(uniqueId); data.writeInt32(decryptHandle->decryptId); writeDecrptHandleToParcelData(decryptHandle, &data); data.writeString8(decryptHandle->mimeType); data.writeInt32(decryptHandle->decryptApiType); data.writeInt32(decryptHandle->status); if (NULL != decryptHandle->decryptInfo) { data.writeInt32(decryptHandle->decryptInfo->decryptBufferLength); } else { data.writeInt32(INVALID_BUFFER_LENGTH); } data.writeInt32(numBytes); data.writeInt32(numBytes); data.writeInt64(offset); data.writeInt64(offset); Loading Loading @@ -1064,24 +1043,14 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status const status_t status = consumeRights(uniqueId, &handle, data.readInt32(), = consumeRights(uniqueId, &handle, data.readInt32(), static_cast<bool>(data.readInt32())); static_cast<bool>(data.readInt32())); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1093,23 +1062,13 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status const status_t status = setPlaybackStatus(uniqueId, &handle, data.readInt32(), data.readInt64()); = setPlaybackStatus(uniqueId, &handle, data.readInt32(), data.readInt64()); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading Loading @@ -1270,16 +1229,10 @@ status_t BnDrmManagerService::onTransact( = openDecryptSession(uniqueId, fd, data.readInt64(), data.readInt64()); = openDecryptSession(uniqueId, fd, data.readInt64(), data.readInt64()); if (NULL != handle) { if (NULL != handle) { reply->writeInt32(handle->decryptId); writeDecrptHandleToParcelData(handle, reply); reply->writeString8(handle->mimeType); clearDecryptHandle(handle); reply->writeInt32(handle->decryptApiType); reply->writeInt32(handle->status); if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } delete handle; handle = NULL; delete handle; handle = NULL; } return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1294,18 +1247,13 @@ status_t BnDrmManagerService::onTransact( DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); if (NULL != handle) { if (NULL != handle) { reply->writeInt32(handle->decryptId); writeDecrptHandleToParcelData(handle, reply); reply->writeString8(handle->mimeType); reply->writeInt32(handle->decryptApiType); clearDecryptHandle(handle); reply->writeInt32(handle->status); delete handle; handle = NULL; if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } else { } else { LOGV("NULL decryptHandle is returned"); LOGV("NULL decryptHandle is returned"); } } delete handle; handle = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1317,17 +1265,7 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle* handle = new DecryptHandle(); DecryptHandle* handle = new DecryptHandle(); handle->decryptId = data.readInt32(); readDecryptHandleFromParcelData(handle, data); handle->mimeType = data.readString8(); handle->decryptApiType = data.readInt32(); handle->status = data.readInt32(); handle->decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle->decryptInfo = new DecryptInfo(); handle->decryptInfo->decryptBufferLength = bufferLength; } const status_t status = closeDecryptSession(uniqueId, handle); const status_t status = closeDecryptSession(uniqueId, handle); reply->writeInt32(status); reply->writeInt32(status); Loading @@ -1342,17 +1280,8 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int decryptUnitId = data.readInt32(); const int decryptUnitId = data.readInt32(); //Filling Header info //Filling Header info Loading @@ -1364,7 +1293,7 @@ status_t BnDrmManagerService::onTransact( = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo); = initializeDecryptUnit(uniqueId, &handle, decryptUnitId, headerInfo); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete headerInfo; headerInfo = NULL; delete headerInfo; headerInfo = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1377,17 +1306,8 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int decryptUnitId = data.readInt32(); const int decryptUnitId = data.readInt32(); const int decBufferSize = data.readInt32(); const int decBufferSize = data.readInt32(); Loading @@ -1414,7 +1334,7 @@ status_t BnDrmManagerService::onTransact( reply->writeInt32(size); reply->writeInt32(size); reply->write(decBuffer->data, size); reply->write(decBuffer->data, size); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete encBuffer; encBuffer = NULL; delete encBuffer; encBuffer = NULL; delete decBuffer; decBuffer = NULL; delete decBuffer; decBuffer = NULL; delete [] buffer; buffer = NULL; delete [] buffer; buffer = NULL; Loading @@ -1430,22 +1350,12 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32()); const status_t status = finalizeDecryptUnit(uniqueId, &handle, data.readInt32()); reply->writeInt32(status); reply->writeInt32(status); delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading @@ -1457,17 +1367,7 @@ status_t BnDrmManagerService::onTransact( const int uniqueId = data.readInt32(); const int uniqueId = data.readInt32(); DecryptHandle handle; DecryptHandle handle; handle.decryptId = data.readInt32(); readDecryptHandleFromParcelData(&handle, data); handle.mimeType = data.readString8(); handle.decryptApiType = data.readInt32(); handle.status = data.readInt32(); handle.decryptInfo = NULL; const int bufferLength = data.readInt32(); if (INVALID_BUFFER_LENGTH != bufferLength) { handle.decryptInfo = new DecryptInfo(); handle.decryptInfo->decryptBufferLength = bufferLength; } const int numBytes = data.readInt32(); const int numBytes = data.readInt32(); char* buffer = new char[numBytes]; char* buffer = new char[numBytes]; Loading @@ -1480,7 +1380,7 @@ status_t BnDrmManagerService::onTransact( reply->write(buffer, result); reply->write(buffer, result); } } delete handle.decryptInfo; handle.decryptInfo = NULL; clearDecryptHandle(&handle); delete [] buffer, buffer = NULL; delete [] buffer, buffer = NULL; return DRM_NO_ERROR; return DRM_NO_ERROR; } } Loading
include/drm/drm_framework_common.h +16 −0 Original line number Original line Diff line number Diff line Loading @@ -43,6 +43,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 */ */ Loading Loading @@ -280,6 +291,11 @@ public: * e.g. size of memory to be allocated to get the decrypted content. * e.g. size of memory to be allocated to get the decrypted content. */ */ DecryptInfo* decryptInfo; DecryptInfo* decryptInfo; /** * Defines a vector for the copy control settings sent from the DRM plugin * to the player */ KeyedVector<DrmCopyControl, int> copyControlVector; public: public: DecryptHandle(): DecryptHandle(): Loading