Loading api/current.xml +17 −115 Original line number Diff line number Diff line Loading @@ -55656,29 +55656,7 @@ type="int" transient="false" volatile="false" value="2012" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_FINALIZE_FAILED" type="int" transient="false" volatile="false" value="2010" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_INITIALIZE_FAILED" type="int" transient="false" volatile="false" value="2009" value="2008" static="true" final="true" deprecated="not deprecated" Loading Loading @@ -55718,7 +55696,7 @@ visibility="public" > </field> <field name="TYPE_REGISTRATION_FAILED" <field name="TYPE_PROCESS_DRM_INFO_FAILED" type="int" transient="false" volatile="false" Loading @@ -55733,18 +55711,7 @@ type="int" transient="false" volatile="false" value="2011" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_RIGHTS_ACQUISITION_FAILED" type="int" transient="false" volatile="false" value="2008" value="2007" static="true" final="true" deprecated="not deprecated" Loading Loading @@ -55773,17 +55740,6 @@ visibility="public" > </field> <field name="TYPE_UNREGISTRATION_FAILED" type="int" transient="false" volatile="false" value="2007" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> </class> <class name="DrmEvent" extends="java.lang.Object" Loading Loading @@ -55863,28 +55819,6 @@ > </field> <field name="TYPE_ALL_RIGHTS_REMOVED" type="int" transient="false" volatile="false" value="1006" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_DRM_INFO_ACQUIRED" type="int" transient="false" volatile="false" value="1007" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_FINALIZED" type="int" transient="false" volatile="false" Loading @@ -55895,7 +55829,7 @@ visibility="public" > </field> <field name="TYPE_INITIALIZED" <field name="TYPE_DRM_INFO_ACQUIRED" type="int" transient="false" volatile="false" Loading @@ -55906,7 +55840,7 @@ visibility="public" > </field> <field name="TYPE_REGISTERED" <field name="TYPE_DRM_INFO_PROCESSED" type="int" transient="false" volatile="false" Loading @@ -55917,28 +55851,6 @@ visibility="public" > </field> <field name="TYPE_RIGHTS_ACQUIRED" type="int" transient="false" volatile="false" value="1005" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_UNREGISTERED" type="int" transient="false" volatile="false" value="1004" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> </class> <class name="DrmInfo" extends="java.lang.Object" Loading Loading @@ -56314,6 +56226,8 @@ > <parameter name="_statusCode" type="int"> </parameter> <parameter name="_infoType" type="int"> </parameter> <parameter name="_data" type="android.drm.ProcessedData"> </parameter> <parameter name="_mimeType" type="java.lang.String"> Loading Loading @@ -56351,6 +56265,16 @@ visibility="public" > </field> <field name="infoType" type="int" transient="false" volatile="false" static="false" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="mimeType" type="java.lang.String" transient="false" Loading Loading @@ -56614,17 +56538,6 @@ <parameter name="uri" type="android.net.Uri"> </parameter> </method> <method name="loadPlugIns" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="openConvertSession" return="int" abstract="false" Loading Loading @@ -56746,17 +56659,6 @@ <parameter name="infoListener" type="android.drm.DrmManagerClient.OnInfoListener"> </parameter> </method> <method name="unloadPlugIns" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <field name="ERROR_NONE" type="int" transient="false" drm/common/DrmEngineBase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,11 @@ status_t DrmEngineBase::openDecryptSession( return onOpenDecryptSession(uniqueId, decryptHandle, fd, offset, length); } status_t DrmEngineBase::openDecryptSession( int uniqueId, DecryptHandle* decryptHandle, const char* uri) { return onOpenDecryptSession(uniqueId, decryptHandle, uri); } status_t DrmEngineBase::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) { return onCloseDecryptSession(uniqueId, decryptHandle); } Loading drm/common/DrmInfoStatus.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,9 @@ using namespace android; DrmInfoStatus::DrmInfoStatus( int _statusCode, const DrmBuffer* _drmBuffer, const String8& _mimeType) : int _statusCode, int _infoType, const DrmBuffer* _drmBuffer, const String8& _mimeType) : statusCode(_statusCode), infoType(_infoType), drmBuffer(_drmBuffer), mimeType(_mimeType) { Loading drm/common/IDrmManagerService.cpp +68 −51 Original line number Diff line number Diff line Loading @@ -53,27 +53,18 @@ void BpDrmManagerService::removeUniqueId(int uniqueId) { remote()->transact(REMOVE_UNIQUEID, data, &reply); } status_t BpDrmManagerService::loadPlugIns(int uniqueId) { LOGV("load plugins"); void BpDrmManagerService::addClient(int uniqueId) { Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); remote()->transact(LOAD_PLUGINS, data, &reply); return reply.readInt32(); remote()->transact(ADD_CLIENT, data, &reply); } status_t BpDrmManagerService::loadPlugIns(int uniqueId, const String8& plugInDirPath) { LOGV("load plugins from path"); void BpDrmManagerService::removeClient(int uniqueId) { Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeString8(plugInDirPath); remote()->transact(LOAD_PLUGINS_FROM_PATH, data, &reply); return reply.readInt32(); remote()->transact(REMOVE_CLIENT, data, &reply); } status_t BpDrmManagerService::setDrmServiceListener( Loading @@ -88,17 +79,6 @@ status_t BpDrmManagerService::setDrmServiceListener( return reply.readInt32(); } status_t BpDrmManagerService::unloadPlugIns(int uniqueId) { LOGV("unload plugins"); Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); remote()->transact(UNLOAD_PLUGINS, data, &reply); return reply.readInt32(); } status_t BpDrmManagerService::installDrmEngine(int uniqueId, const String8& drmEngineFile) { LOGV("Install DRM Engine"); Parcel data, reply; Loading Loading @@ -191,6 +171,7 @@ DrmInfoStatus* BpDrmManagerService::processDrmInfo(int uniqueId, const DrmInfo* if (0 != reply.dataAvail()) { //Filling DRM Info Status const int statusCode = reply.readInt32(); const int infoType = reply.readInt32(); const String8 mimeType = reply.readString8(); DrmBuffer* drmBuffer = NULL; Loading @@ -203,7 +184,7 @@ DrmInfoStatus* BpDrmManagerService::processDrmInfo(int uniqueId, const DrmInfo* } drmBuffer = new DrmBuffer(data, bufferSize); } drmInfoStatus = new DrmInfoStatus(statusCode, drmBuffer, mimeType); drmInfoStatus = new DrmInfoStatus(statusCode, infoType, drmBuffer, mimeType); } return drmInfoStatus; } Loading Loading @@ -538,8 +519,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( LOGV("Entering BpDrmManagerService::openDecryptSession"); Parcel data, reply; const String16 interfaceDescriptor = IDrmManagerService::getInterfaceDescriptor(); data.writeInterfaceToken(interfaceDescriptor); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeFileDescriptor(fd); data.writeInt32(offset); Loading @@ -565,6 +545,34 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( return handle; } DecryptHandle* BpDrmManagerService::openDecryptSession(int uniqueId, const char* uri) { LOGV("Entering BpDrmManagerService::openDecryptSession"); Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeString8(String8(uri)); remote()->transact(OPEN_DECRYPT_SESSION_FROM_URI, data, &reply); DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); 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 { LOGE("no decryptHandle is generated in service side"); } return handle; } status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) { LOGV("closeDecryptSession"); Parcel data, reply; Loading Loading @@ -746,25 +754,19 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case LOAD_PLUGINS: case ADD_CLIENT: { LOGV("BnDrmManagerService::onTransact :LOAD_PLUGINS"); LOGV("BnDrmManagerService::onTransact :ADD_CLIENT"); CHECK_INTERFACE(IDrmManagerService, data, reply); status_t status = loadPlugIns(data.readInt32()); reply->writeInt32(status); addClient(data.readInt32()); return DRM_NO_ERROR; } case LOAD_PLUGINS_FROM_PATH: case REMOVE_CLIENT: { LOGV("BnDrmManagerService::onTransact :LOAD_PLUGINS_FROM_PATH"); LOGV("BnDrmManagerService::onTransact :REMOVE_CLIENT"); CHECK_INTERFACE(IDrmManagerService, data, reply); status_t status = loadPlugIns(data.readInt32(), data.readString8()); reply->writeInt32(status); removeClient(data.readInt32()); return DRM_NO_ERROR; } Loading @@ -783,18 +785,6 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case UNLOAD_PLUGINS: { LOGV("BnDrmManagerService::onTransact :UNLOAD_PLUGINS"); CHECK_INTERFACE(IDrmManagerService, data, reply); const int uniqueId = data.readInt32(); status_t status = unloadPlugIns(uniqueId); reply->writeInt32(status); return DRM_NO_ERROR; } case INSTALL_DRM_ENGINE: { LOGV("BnDrmManagerService::onTransact :INSTALL_DRM_ENGINE"); Loading Loading @@ -881,6 +871,7 @@ status_t BnDrmManagerService::onTransact( if (NULL != drmInfoStatus) { //Filling DRM Info Status contents reply->writeInt32(drmInfoStatus->statusCode); reply->writeInt32(drmInfoStatus->infoType); reply->writeString8(drmInfoStatus->mimeType); if (NULL != drmInfoStatus->drmBuffer) { Loading Loading @@ -1239,6 +1230,32 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case OPEN_DECRYPT_SESSION_FROM_URI: { LOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FROM_URI"); CHECK_INTERFACE(IDrmManagerService, data, reply); const int uniqueId = data.readInt32(); const String8 uri = data.readString8(); DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); if (NULL != handle) { reply->writeInt32(handle->decryptId); reply->writeString8(handle->mimeType); reply->writeInt32(handle->decryptApiType); reply->writeInt32(handle->status); if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } else { LOGE("NULL decryptHandle is returned"); } delete handle; handle = NULL; return DRM_NO_ERROR; } case CLOSE_DECRYPT_SESSION: { LOGV("BnDrmManagerService::onTransact :CLOSE_DECRYPT_SESSION"); Loading drm/drmserver/DrmManager.cpp +62 −46 Original line number Diff line number Diff line Loading @@ -85,22 +85,31 @@ void DrmManager::removeUniqueId(int uniqueId) { } } status_t DrmManager::loadPlugIns(int uniqueId) { status_t DrmManager::loadPlugIns() { String8 pluginDirPath("/system/lib/drm/plugins/native"); return loadPlugIns(uniqueId, pluginDirPath); return loadPlugIns(pluginDirPath); } status_t DrmManager::loadPlugIns(int uniqueId, const String8& plugInDirPath) { status_t DrmManager::loadPlugIns(const String8& plugInDirPath) { if (mSupportInfoToPlugInIdMap.isEmpty()) { mPlugInManager.loadPlugIns(plugInDirPath); initializePlugIns(uniqueId); populate(uniqueId); } else { initializePlugIns(uniqueId); Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList(); for (unsigned int i = 0; i < plugInPathList.size(); ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0); if (NULL != info) { mSupportInfoToPlugInIdMap.add(*info, plugInPath); } } } return DRM_NO_ERROR; } status_t DrmManager::unloadPlugIns() { mConvertSessionMap.clear(); mDecryptSessionMap.clear(); mPlugInManager.unloadPlugIns(); mSupportInfoToPlugInIdMap.clear(); return DRM_NO_ERROR; } Loading @@ -111,21 +120,23 @@ status_t DrmManager::setDrmServiceListener( return DRM_NO_ERROR; } status_t DrmManager::unloadPlugIns(int uniqueId) { void DrmManager::addClient(int uniqueId) { if (!mSupportInfoToPlugInIdMap.isEmpty()) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.terminate(uniqueId); rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); } } } if (0 >= mUniqueIdVector.size()) { mConvertSessionMap.clear(); mDecryptSessionMap.clear(); mSupportInfoToPlugInIdMap.clear(); mPlugInManager.unloadPlugIns(); void DrmManager::removeClient(int uniqueId) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.terminate(uniqueId); } return DRM_NO_ERROR; } DrmConstraints* DrmManager::getConstraints(int uniqueId, const String8* path, const int action) { Loading @@ -144,7 +155,7 @@ status_t DrmManager::installDrmEngine(int uniqueId, const String8& absolutePath) rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); DrmSupportInfo* info = rDrmEngine.getSupportInfo(uniqueId); DrmSupportInfo* info = rDrmEngine.getSupportInfo(0); mSupportInfoToPlugInIdMap.add(*info, absolutePath); return DRM_NO_ERROR; Loading @@ -154,7 +165,7 @@ bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mim const String8 plugInId = getSupportedPlugInId(mimeType); bool result = (EMPTY_STRING != plugInId) ? true : false; if (NULL != path) { if (0 < path.length()) { if (result) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId); result = rDrmEngine.canHandle(uniqueId, path); Loading Loading @@ -340,7 +351,7 @@ status_t DrmManager::getAllSupportInfo( for (int i = 0; i < size; ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* drmSupportInfo = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(uniqueId); = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0); if (NULL != drmSupportInfo) { drmSupportInfoList.add(*drmSupportInfo); delete drmSupportInfo; drmSupportInfo = NULL; Loading @@ -360,12 +371,12 @@ status_t DrmManager::getAllSupportInfo( } DecryptHandle* DrmManager::openDecryptSession(int uniqueId, int fd, int offset, int length) { Mutex::Autolock _l(mDecryptLock); status_t result = DRM_ERROR_CANNOT_HANDLE; Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); DecryptHandle* handle = new DecryptHandle(); if (NULL != handle) { Mutex::Autolock _l(mDecryptLock); handle->decryptId = mDecryptSessionId + 1; for (unsigned int index = 0; index < plugInIdList.size(); index++) { Loading @@ -380,16 +391,43 @@ DecryptHandle* DrmManager::openDecryptSession(int uniqueId, int fd, int offset, } } } if (DRM_NO_ERROR != result) { delete handle; handle = NULL; LOGE("DrmManager::openDecryptSession: no capable plug-in found"); } return handle; } DecryptHandle* DrmManager::openDecryptSession(int uniqueId, const char* uri) { 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 (unsigned int index = 0; index < plugInIdList.size(); index++) { String8 plugInId = plugInIdList.itemAt(index); IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId); result = rDrmEngine.openDecryptSession(uniqueId, handle, uri); if (DRM_NO_ERROR == result) { ++mDecryptSessionId; mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine); break; } } } if (DRM_NO_ERROR != result) { delete handle; handle = NULL; LOGE("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; if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) { IDrmEngine* drmEngine = mDecryptSessionMap.valueFor(decryptHandle->decryptId); Loading Loading @@ -443,28 +481,6 @@ ssize_t DrmManager::pread(int uniqueId, DecryptHandle* decryptHandle, return result; } void DrmManager::initializePlugIns(int uniqueId) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); } } void DrmManager::populate(int uniqueId) { Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList(); for (unsigned int i = 0; i < plugInPathList.size(); ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(uniqueId); if (NULL != info) { mSupportInfoToPlugInIdMap.add(*info, plugInPath); } } } String8 DrmManager::getSupportedPlugInId( int uniqueId, const String8& path, const String8& mimeType) { String8 plugInId(""); Loading Loading
api/current.xml +17 −115 Original line number Diff line number Diff line Loading @@ -55656,29 +55656,7 @@ type="int" transient="false" volatile="false" value="2012" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_FINALIZE_FAILED" type="int" transient="false" volatile="false" value="2010" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_INITIALIZE_FAILED" type="int" transient="false" volatile="false" value="2009" value="2008" static="true" final="true" deprecated="not deprecated" Loading Loading @@ -55718,7 +55696,7 @@ visibility="public" > </field> <field name="TYPE_REGISTRATION_FAILED" <field name="TYPE_PROCESS_DRM_INFO_FAILED" type="int" transient="false" volatile="false" Loading @@ -55733,18 +55711,7 @@ type="int" transient="false" volatile="false" value="2011" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_RIGHTS_ACQUISITION_FAILED" type="int" transient="false" volatile="false" value="2008" value="2007" static="true" final="true" deprecated="not deprecated" Loading Loading @@ -55773,17 +55740,6 @@ visibility="public" > </field> <field name="TYPE_UNREGISTRATION_FAILED" type="int" transient="false" volatile="false" value="2007" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> </class> <class name="DrmEvent" extends="java.lang.Object" Loading Loading @@ -55863,28 +55819,6 @@ > </field> <field name="TYPE_ALL_RIGHTS_REMOVED" type="int" transient="false" volatile="false" value="1006" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_DRM_INFO_ACQUIRED" type="int" transient="false" volatile="false" value="1007" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_FINALIZED" type="int" transient="false" volatile="false" Loading @@ -55895,7 +55829,7 @@ visibility="public" > </field> <field name="TYPE_INITIALIZED" <field name="TYPE_DRM_INFO_ACQUIRED" type="int" transient="false" volatile="false" Loading @@ -55906,7 +55840,7 @@ visibility="public" > </field> <field name="TYPE_REGISTERED" <field name="TYPE_DRM_INFO_PROCESSED" type="int" transient="false" volatile="false" Loading @@ -55917,28 +55851,6 @@ visibility="public" > </field> <field name="TYPE_RIGHTS_ACQUIRED" type="int" transient="false" volatile="false" value="1005" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="TYPE_UNREGISTERED" type="int" transient="false" volatile="false" value="1004" static="true" final="true" deprecated="not deprecated" visibility="public" > </field> </class> <class name="DrmInfo" extends="java.lang.Object" Loading Loading @@ -56314,6 +56226,8 @@ > <parameter name="_statusCode" type="int"> </parameter> <parameter name="_infoType" type="int"> </parameter> <parameter name="_data" type="android.drm.ProcessedData"> </parameter> <parameter name="_mimeType" type="java.lang.String"> Loading Loading @@ -56351,6 +56265,16 @@ visibility="public" > </field> <field name="infoType" type="int" transient="false" volatile="false" static="false" final="true" deprecated="not deprecated" visibility="public" > </field> <field name="mimeType" type="java.lang.String" transient="false" Loading Loading @@ -56614,17 +56538,6 @@ <parameter name="uri" type="android.net.Uri"> </parameter> </method> <method name="loadPlugIns" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <method name="openConvertSession" return="int" abstract="false" Loading Loading @@ -56746,17 +56659,6 @@ <parameter name="infoListener" type="android.drm.DrmManagerClient.OnInfoListener"> </parameter> </method> <method name="unloadPlugIns" return="int" abstract="false" native="false" synchronized="false" static="false" final="false" deprecated="not deprecated" visibility="public" > </method> <field name="ERROR_NONE" type="int" transient="false"
drm/common/DrmEngineBase.cpp +5 −0 Original line number Diff line number Diff line Loading @@ -120,6 +120,11 @@ status_t DrmEngineBase::openDecryptSession( return onOpenDecryptSession(uniqueId, decryptHandle, fd, offset, length); } status_t DrmEngineBase::openDecryptSession( int uniqueId, DecryptHandle* decryptHandle, const char* uri) { return onOpenDecryptSession(uniqueId, decryptHandle, uri); } status_t DrmEngineBase::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) { return onCloseDecryptSession(uniqueId, decryptHandle); } Loading
drm/common/DrmInfoStatus.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,9 @@ using namespace android; DrmInfoStatus::DrmInfoStatus( int _statusCode, const DrmBuffer* _drmBuffer, const String8& _mimeType) : int _statusCode, int _infoType, const DrmBuffer* _drmBuffer, const String8& _mimeType) : statusCode(_statusCode), infoType(_infoType), drmBuffer(_drmBuffer), mimeType(_mimeType) { Loading
drm/common/IDrmManagerService.cpp +68 −51 Original line number Diff line number Diff line Loading @@ -53,27 +53,18 @@ void BpDrmManagerService::removeUniqueId(int uniqueId) { remote()->transact(REMOVE_UNIQUEID, data, &reply); } status_t BpDrmManagerService::loadPlugIns(int uniqueId) { LOGV("load plugins"); void BpDrmManagerService::addClient(int uniqueId) { Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); remote()->transact(LOAD_PLUGINS, data, &reply); return reply.readInt32(); remote()->transact(ADD_CLIENT, data, &reply); } status_t BpDrmManagerService::loadPlugIns(int uniqueId, const String8& plugInDirPath) { LOGV("load plugins from path"); void BpDrmManagerService::removeClient(int uniqueId) { Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeString8(plugInDirPath); remote()->transact(LOAD_PLUGINS_FROM_PATH, data, &reply); return reply.readInt32(); remote()->transact(REMOVE_CLIENT, data, &reply); } status_t BpDrmManagerService::setDrmServiceListener( Loading @@ -88,17 +79,6 @@ status_t BpDrmManagerService::setDrmServiceListener( return reply.readInt32(); } status_t BpDrmManagerService::unloadPlugIns(int uniqueId) { LOGV("unload plugins"); Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); remote()->transact(UNLOAD_PLUGINS, data, &reply); return reply.readInt32(); } status_t BpDrmManagerService::installDrmEngine(int uniqueId, const String8& drmEngineFile) { LOGV("Install DRM Engine"); Parcel data, reply; Loading Loading @@ -191,6 +171,7 @@ DrmInfoStatus* BpDrmManagerService::processDrmInfo(int uniqueId, const DrmInfo* if (0 != reply.dataAvail()) { //Filling DRM Info Status const int statusCode = reply.readInt32(); const int infoType = reply.readInt32(); const String8 mimeType = reply.readString8(); DrmBuffer* drmBuffer = NULL; Loading @@ -203,7 +184,7 @@ DrmInfoStatus* BpDrmManagerService::processDrmInfo(int uniqueId, const DrmInfo* } drmBuffer = new DrmBuffer(data, bufferSize); } drmInfoStatus = new DrmInfoStatus(statusCode, drmBuffer, mimeType); drmInfoStatus = new DrmInfoStatus(statusCode, infoType, drmBuffer, mimeType); } return drmInfoStatus; } Loading Loading @@ -538,8 +519,7 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( LOGV("Entering BpDrmManagerService::openDecryptSession"); Parcel data, reply; const String16 interfaceDescriptor = IDrmManagerService::getInterfaceDescriptor(); data.writeInterfaceToken(interfaceDescriptor); data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeFileDescriptor(fd); data.writeInt32(offset); Loading @@ -565,6 +545,34 @@ DecryptHandle* BpDrmManagerService::openDecryptSession( return handle; } DecryptHandle* BpDrmManagerService::openDecryptSession(int uniqueId, const char* uri) { LOGV("Entering BpDrmManagerService::openDecryptSession"); Parcel data, reply; data.writeInterfaceToken(IDrmManagerService::getInterfaceDescriptor()); data.writeInt32(uniqueId); data.writeString8(String8(uri)); remote()->transact(OPEN_DECRYPT_SESSION_FROM_URI, data, &reply); DecryptHandle* handle = NULL; if (0 != reply.dataAvail()) { handle = new DecryptHandle(); handle->decryptId = reply.readInt32(); 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 { LOGE("no decryptHandle is generated in service side"); } return handle; } status_t BpDrmManagerService::closeDecryptSession(int uniqueId, DecryptHandle* decryptHandle) { LOGV("closeDecryptSession"); Parcel data, reply; Loading Loading @@ -746,25 +754,19 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case LOAD_PLUGINS: case ADD_CLIENT: { LOGV("BnDrmManagerService::onTransact :LOAD_PLUGINS"); LOGV("BnDrmManagerService::onTransact :ADD_CLIENT"); CHECK_INTERFACE(IDrmManagerService, data, reply); status_t status = loadPlugIns(data.readInt32()); reply->writeInt32(status); addClient(data.readInt32()); return DRM_NO_ERROR; } case LOAD_PLUGINS_FROM_PATH: case REMOVE_CLIENT: { LOGV("BnDrmManagerService::onTransact :LOAD_PLUGINS_FROM_PATH"); LOGV("BnDrmManagerService::onTransact :REMOVE_CLIENT"); CHECK_INTERFACE(IDrmManagerService, data, reply); status_t status = loadPlugIns(data.readInt32(), data.readString8()); reply->writeInt32(status); removeClient(data.readInt32()); return DRM_NO_ERROR; } Loading @@ -783,18 +785,6 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case UNLOAD_PLUGINS: { LOGV("BnDrmManagerService::onTransact :UNLOAD_PLUGINS"); CHECK_INTERFACE(IDrmManagerService, data, reply); const int uniqueId = data.readInt32(); status_t status = unloadPlugIns(uniqueId); reply->writeInt32(status); return DRM_NO_ERROR; } case INSTALL_DRM_ENGINE: { LOGV("BnDrmManagerService::onTransact :INSTALL_DRM_ENGINE"); Loading Loading @@ -881,6 +871,7 @@ status_t BnDrmManagerService::onTransact( if (NULL != drmInfoStatus) { //Filling DRM Info Status contents reply->writeInt32(drmInfoStatus->statusCode); reply->writeInt32(drmInfoStatus->infoType); reply->writeString8(drmInfoStatus->mimeType); if (NULL != drmInfoStatus->drmBuffer) { Loading Loading @@ -1239,6 +1230,32 @@ status_t BnDrmManagerService::onTransact( return DRM_NO_ERROR; } case OPEN_DECRYPT_SESSION_FROM_URI: { LOGV("BnDrmManagerService::onTransact :OPEN_DECRYPT_SESSION_FROM_URI"); CHECK_INTERFACE(IDrmManagerService, data, reply); const int uniqueId = data.readInt32(); const String8 uri = data.readString8(); DecryptHandle* handle = openDecryptSession(uniqueId, uri.string()); if (NULL != handle) { reply->writeInt32(handle->decryptId); reply->writeString8(handle->mimeType); reply->writeInt32(handle->decryptApiType); reply->writeInt32(handle->status); if (NULL != handle->decryptInfo) { reply->writeInt32(handle->decryptInfo->decryptBufferLength); delete handle->decryptInfo; handle->decryptInfo = NULL; } } else { LOGE("NULL decryptHandle is returned"); } delete handle; handle = NULL; return DRM_NO_ERROR; } case CLOSE_DECRYPT_SESSION: { LOGV("BnDrmManagerService::onTransact :CLOSE_DECRYPT_SESSION"); Loading
drm/drmserver/DrmManager.cpp +62 −46 Original line number Diff line number Diff line Loading @@ -85,22 +85,31 @@ void DrmManager::removeUniqueId(int uniqueId) { } } status_t DrmManager::loadPlugIns(int uniqueId) { status_t DrmManager::loadPlugIns() { String8 pluginDirPath("/system/lib/drm/plugins/native"); return loadPlugIns(uniqueId, pluginDirPath); return loadPlugIns(pluginDirPath); } status_t DrmManager::loadPlugIns(int uniqueId, const String8& plugInDirPath) { status_t DrmManager::loadPlugIns(const String8& plugInDirPath) { if (mSupportInfoToPlugInIdMap.isEmpty()) { mPlugInManager.loadPlugIns(plugInDirPath); initializePlugIns(uniqueId); populate(uniqueId); } else { initializePlugIns(uniqueId); Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList(); for (unsigned int i = 0; i < plugInPathList.size(); ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0); if (NULL != info) { mSupportInfoToPlugInIdMap.add(*info, plugInPath); } } } return DRM_NO_ERROR; } status_t DrmManager::unloadPlugIns() { mConvertSessionMap.clear(); mDecryptSessionMap.clear(); mPlugInManager.unloadPlugIns(); mSupportInfoToPlugInIdMap.clear(); return DRM_NO_ERROR; } Loading @@ -111,21 +120,23 @@ status_t DrmManager::setDrmServiceListener( return DRM_NO_ERROR; } status_t DrmManager::unloadPlugIns(int uniqueId) { void DrmManager::addClient(int uniqueId) { if (!mSupportInfoToPlugInIdMap.isEmpty()) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.terminate(uniqueId); rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); } } } if (0 >= mUniqueIdVector.size()) { mConvertSessionMap.clear(); mDecryptSessionMap.clear(); mSupportInfoToPlugInIdMap.clear(); mPlugInManager.unloadPlugIns(); void DrmManager::removeClient(int uniqueId) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.terminate(uniqueId); } return DRM_NO_ERROR; } DrmConstraints* DrmManager::getConstraints(int uniqueId, const String8* path, const int action) { Loading @@ -144,7 +155,7 @@ status_t DrmManager::installDrmEngine(int uniqueId, const String8& absolutePath) rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); DrmSupportInfo* info = rDrmEngine.getSupportInfo(uniqueId); DrmSupportInfo* info = rDrmEngine.getSupportInfo(0); mSupportInfoToPlugInIdMap.add(*info, absolutePath); return DRM_NO_ERROR; Loading @@ -154,7 +165,7 @@ bool DrmManager::canHandle(int uniqueId, const String8& path, const String8& mim const String8 plugInId = getSupportedPlugInId(mimeType); bool result = (EMPTY_STRING != plugInId) ? true : false; if (NULL != path) { if (0 < path.length()) { if (result) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId); result = rDrmEngine.canHandle(uniqueId, path); Loading Loading @@ -340,7 +351,7 @@ status_t DrmManager::getAllSupportInfo( for (int i = 0; i < size; ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* drmSupportInfo = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(uniqueId); = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(0); if (NULL != drmSupportInfo) { drmSupportInfoList.add(*drmSupportInfo); delete drmSupportInfo; drmSupportInfo = NULL; Loading @@ -360,12 +371,12 @@ status_t DrmManager::getAllSupportInfo( } DecryptHandle* DrmManager::openDecryptSession(int uniqueId, int fd, int offset, int length) { Mutex::Autolock _l(mDecryptLock); status_t result = DRM_ERROR_CANNOT_HANDLE; Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); DecryptHandle* handle = new DecryptHandle(); if (NULL != handle) { Mutex::Autolock _l(mDecryptLock); handle->decryptId = mDecryptSessionId + 1; for (unsigned int index = 0; index < plugInIdList.size(); index++) { Loading @@ -380,16 +391,43 @@ DecryptHandle* DrmManager::openDecryptSession(int uniqueId, int fd, int offset, } } } if (DRM_NO_ERROR != result) { delete handle; handle = NULL; LOGE("DrmManager::openDecryptSession: no capable plug-in found"); } return handle; } DecryptHandle* DrmManager::openDecryptSession(int uniqueId, const char* uri) { 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 (unsigned int index = 0; index < plugInIdList.size(); index++) { String8 plugInId = plugInIdList.itemAt(index); IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInId); result = rDrmEngine.openDecryptSession(uniqueId, handle, uri); if (DRM_NO_ERROR == result) { ++mDecryptSessionId; mDecryptSessionMap.add(mDecryptSessionId, &rDrmEngine); break; } } } if (DRM_NO_ERROR != result) { delete handle; handle = NULL; LOGE("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; if (mDecryptSessionMap.indexOfKey(decryptHandle->decryptId) != NAME_NOT_FOUND) { IDrmEngine* drmEngine = mDecryptSessionMap.valueFor(decryptHandle->decryptId); Loading Loading @@ -443,28 +481,6 @@ ssize_t DrmManager::pread(int uniqueId, DecryptHandle* decryptHandle, return result; } void DrmManager::initializePlugIns(int uniqueId) { Vector<String8> plugInIdList = mPlugInManager.getPlugInIdList(); for (unsigned int index = 0; index < plugInIdList.size(); index++) { IDrmEngine& rDrmEngine = mPlugInManager.getPlugIn(plugInIdList.itemAt(index)); rDrmEngine.initialize(uniqueId); rDrmEngine.setOnInfoListener(uniqueId, this); } } void DrmManager::populate(int uniqueId) { Vector<String8> plugInPathList = mPlugInManager.getPlugInIdList(); for (unsigned int i = 0; i < plugInPathList.size(); ++i) { String8 plugInPath = plugInPathList[i]; DrmSupportInfo* info = mPlugInManager.getPlugIn(plugInPath).getSupportInfo(uniqueId); if (NULL != info) { mSupportInfoToPlugInIdMap.add(*info, plugInPath); } } } String8 DrmManager::getSupportedPlugInId( int uniqueId, const String8& path, const String8& mimeType) { String8 plugInId(""); Loading