Loading drm/libmediadrm/DrmHal.cpp +47 −45 Original line number Diff line number Diff line Loading @@ -510,17 +510,54 @@ status_t DrmHal::destroyPlugin() { return OK; } status_t DrmHal::openSession(Vector<uint8_t> &sessionId) { status_t DrmHal::openSession(DrmPlugin::SecurityLevel level, Vector<uint8_t> &sessionId) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); status_t err = UNKNOWN_ERROR; SecurityLevel hSecurityLevel; bool setSecurityLevel = true; switch(level) { case DrmPlugin::kSecurityLevelSwSecureCrypto: hSecurityLevel = SecurityLevel::SW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelSwSecureDecode: hSecurityLevel = SecurityLevel::SW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureCrypto: hSecurityLevel = SecurityLevel::HW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelHwSecureDecode: hSecurityLevel = SecurityLevel::HW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureAll: hSecurityLevel = SecurityLevel::HW_SECURE_ALL; break; case DrmPlugin::kSecurityLevelMax: setSecurityLevel = false; break; default: return ERROR_DRM_CANNOT_HANDLE; } status_t err = UNKNOWN_ERROR; bool retry = true; do { hidl_vec<uint8_t> hSessionId; Return<void> hResult = mPlugin->openSession( Return<void> hResult; if (mPluginV1_1 == NULL || !setSecurityLevel) { hResult = mPlugin->openSession( [&](Status status,const hidl_vec<uint8_t>& id) { if (status == Status::OK) { sessionId = toVector(id); } err = toStatusT(status); } ); } else { hResult = mPluginV1_1->openSession_1_1(hSecurityLevel, [&](Status status, const hidl_vec<uint8_t>& id) { if (status == Status::OK) { sessionId = toVector(id); Loading @@ -528,6 +565,7 @@ status_t DrmHal::openSession(Vector<uint8_t> &sessionId) { err = toStatusT(status); } ); } if (!hResult.isOk()) { err = DEAD_OBJECT; Loading Loading @@ -979,42 +1017,6 @@ status_t DrmHal::getSecurityLevel(Vector<uint8_t> const &sessionId, return hResult.isOk() ? err : DEAD_OBJECT; } status_t DrmHal::setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } SecurityLevel hSecurityLevel; switch(level) { case DrmPlugin::kSecurityLevelSwSecureCrypto: hSecurityLevel = SecurityLevel::SW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelSwSecureDecode: hSecurityLevel = SecurityLevel::SW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureCrypto: hSecurityLevel = SecurityLevel::HW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelHwSecureDecode: hSecurityLevel = SecurityLevel::HW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureAll: hSecurityLevel = SecurityLevel::HW_SECURE_ALL; break; default: return ERROR_DRM_CANNOT_HANDLE; } Status status = mPluginV1_1->setSecurityLevel(toHidlVec(sessionId), hSecurityLevel); return toStatusT(status); } status_t DrmHal::getPropertyString(String8 const &name, String8 &value ) const { Mutex::Autolock autoLock(mLock); return getPropertyStringInternal(name, value); Loading drm/libmediadrm/IDrm.cpp +6 −32 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ enum { GET_HDCP_LEVELS, GET_NUMBER_OF_SESSIONS, GET_SECURITY_LEVEL, SET_SECURITY_LEVEL, REMOVE_SECURE_STOP, GET_SECURE_STOP_IDS }; Loading Loading @@ -121,9 +120,11 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t openSession(Vector<uint8_t> &sessionId) { virtual status_t openSession(DrmPlugin::SecurityLevel securityLevel, Vector<uint8_t> &sessionId) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); data.writeInt32(securityLevel); status_t status = remote()->transact(OPEN_SESSION, data, &reply); if (status != OK) { Loading Loading @@ -448,23 +449,6 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, sessionId); data.writeInt32(static_cast<uint32_t>(level)); status_t status = remote()->transact(SET_SECURITY_LEVEL, data, &reply); if (status != OK) { return status; } return reply.readInt32(); } virtual status_t getPropertyByteArray(String8 const &name, Vector<uint8_t> &value) const { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -742,8 +726,10 @@ status_t BnDrm::onTransact( case OPEN_SESSION: { CHECK_INTERFACE(IDrm, data, reply); DrmPlugin::SecurityLevel level = static_cast<DrmPlugin::SecurityLevel>(data.readInt32()); Vector<uint8_t> sessionId; status_t result = openSession(sessionId); status_t result = openSession(level, sessionId); writeVector(reply, sessionId); reply->writeInt32(result); return OK; Loading Loading @@ -977,18 +963,6 @@ status_t BnDrm::onTransact( return OK; } case SET_SECURITY_LEVEL: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId; readVector(data, sessionId); DrmPlugin::SecurityLevel level = static_cast<DrmPlugin::SecurityLevel>(data.readInt32()); status_t result = setSecurityLevel(sessionId, level); reply->writeInt32(result); return OK; } case GET_PROPERTY_STRING: { CHECK_INTERFACE(IDrm, data, reply); Loading drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -73,12 +73,24 @@ void DrmPlugin::initProperties() { mByteArrayProperties[kMetricsKey] = valueVector; } Return<void> DrmPlugin::openSession(openSession_cb _hidl_cb) { sp<Session> session = mSessionLibrary->createSession(); std::vector<uint8_t> sessionId = session->sessionId(); setSecurityLevel(sessionId, SecurityLevel::SW_SECURE_CRYPTO); _hidl_cb(Status::OK, toHidlVec(sessionId)); Status status = setSecurityLevel(sessionId, SecurityLevel::SW_SECURE_CRYPTO); _hidl_cb(status, toHidlVec(sessionId)); mOpenSessionOkCount++; return Void(); } Return<void> DrmPlugin::openSession_1_1(SecurityLevel securityLevel, openSession_1_1_cb _hidl_cb) { sp<Session> session = mSessionLibrary->createSession(); std::vector<uint8_t> sessionId = session->sessionId(); Status status = setSecurityLevel(sessionId, securityLevel); _hidl_cb(status, toHidlVec(sessionId)); mOpenSessionOkCount++; return Void(); } Loading Loading @@ -344,8 +356,8 @@ Return<Status> DrmPlugin::setSecurityLevel(const hidl_vec<uint8_t>& sessionId, return Status::BAD_VALUE; } if (level > SecurityLevel::HW_SECURE_ALL) { ALOGE("Cannot set invalid security level"); if (level > SecurityLevel::SW_SECURE_CRYPTO) { ALOGE("Cannot set security level > max"); return Status::BAD_VALUE; } Loading drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h +5 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ struct DrmPlugin : public IDrmPlugin { virtual ~DrmPlugin() {} Return<void> openSession(openSession_cb _hidl_cb) override; Return<void> openSession_1_1(SecurityLevel securityLevel, openSession_cb _hidl_cb) override; Return<Status> closeSession(const hidl_vec<uint8_t>& sessionId) override; Loading Loading @@ -162,9 +164,6 @@ struct DrmPlugin : public IDrmPlugin { Return<void> getSecurityLevel(const hidl_vec<uint8_t>& sessionId, getSecurityLevel_cb _hidl_cb) override; Return<Status> setSecurityLevel(const hidl_vec<uint8_t>& sessionId, SecurityLevel level) override; Return<void> getMetrics(getMetrics_cb _hidl_cb) override; Return<void> getPropertyString( Loading Loading @@ -333,6 +332,9 @@ private: void initProperties(); void setPlayPolicy(); Return<Status> setSecurityLevel(const hidl_vec<uint8_t>& sessionId, SecurityLevel level); std::vector<KeyValue> mPlayPolicy; std::map<std::string, std::string> mStringProperties; std::map<std::string, std::vector<uint8_t> > mByteArrayProperties; Loading media/libmedia/include/media/DrmHal.h +2 −3 Original line number Diff line number Diff line Loading @@ -63,7 +63,8 @@ struct DrmHal : public BnDrm, virtual status_t destroyPlugin(); virtual status_t openSession(Vector<uint8_t> &sessionId); virtual status_t openSession(DrmPlugin::SecurityLevel level, Vector<uint8_t> &sessionId); virtual status_t closeSession(Vector<uint8_t> const &sessionId); Loading Loading @@ -110,8 +111,6 @@ struct DrmHal : public BnDrm, uint32_t *maxSessions) const; virtual status_t getSecurityLevel(Vector<uint8_t> const &sessionId, DrmPlugin::SecurityLevel *level) const; virtual status_t setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level); virtual status_t getPropertyString(String8 const &name, String8 &value ) const; virtual status_t getPropertyByteArray(String8 const &name, Loading Loading
drm/libmediadrm/DrmHal.cpp +47 −45 Original line number Diff line number Diff line Loading @@ -510,17 +510,54 @@ status_t DrmHal::destroyPlugin() { return OK; } status_t DrmHal::openSession(Vector<uint8_t> &sessionId) { status_t DrmHal::openSession(DrmPlugin::SecurityLevel level, Vector<uint8_t> &sessionId) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); status_t err = UNKNOWN_ERROR; SecurityLevel hSecurityLevel; bool setSecurityLevel = true; switch(level) { case DrmPlugin::kSecurityLevelSwSecureCrypto: hSecurityLevel = SecurityLevel::SW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelSwSecureDecode: hSecurityLevel = SecurityLevel::SW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureCrypto: hSecurityLevel = SecurityLevel::HW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelHwSecureDecode: hSecurityLevel = SecurityLevel::HW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureAll: hSecurityLevel = SecurityLevel::HW_SECURE_ALL; break; case DrmPlugin::kSecurityLevelMax: setSecurityLevel = false; break; default: return ERROR_DRM_CANNOT_HANDLE; } status_t err = UNKNOWN_ERROR; bool retry = true; do { hidl_vec<uint8_t> hSessionId; Return<void> hResult = mPlugin->openSession( Return<void> hResult; if (mPluginV1_1 == NULL || !setSecurityLevel) { hResult = mPlugin->openSession( [&](Status status,const hidl_vec<uint8_t>& id) { if (status == Status::OK) { sessionId = toVector(id); } err = toStatusT(status); } ); } else { hResult = mPluginV1_1->openSession_1_1(hSecurityLevel, [&](Status status, const hidl_vec<uint8_t>& id) { if (status == Status::OK) { sessionId = toVector(id); Loading @@ -528,6 +565,7 @@ status_t DrmHal::openSession(Vector<uint8_t> &sessionId) { err = toStatusT(status); } ); } if (!hResult.isOk()) { err = DEAD_OBJECT; Loading Loading @@ -979,42 +1017,6 @@ status_t DrmHal::getSecurityLevel(Vector<uint8_t> const &sessionId, return hResult.isOk() ? err : DEAD_OBJECT; } status_t DrmHal::setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level) { Mutex::Autolock autoLock(mLock); INIT_CHECK(); if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } SecurityLevel hSecurityLevel; switch(level) { case DrmPlugin::kSecurityLevelSwSecureCrypto: hSecurityLevel = SecurityLevel::SW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelSwSecureDecode: hSecurityLevel = SecurityLevel::SW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureCrypto: hSecurityLevel = SecurityLevel::HW_SECURE_CRYPTO; break; case DrmPlugin::kSecurityLevelHwSecureDecode: hSecurityLevel = SecurityLevel::HW_SECURE_DECODE; break; case DrmPlugin::kSecurityLevelHwSecureAll: hSecurityLevel = SecurityLevel::HW_SECURE_ALL; break; default: return ERROR_DRM_CANNOT_HANDLE; } Status status = mPluginV1_1->setSecurityLevel(toHidlVec(sessionId), hSecurityLevel); return toStatusT(status); } status_t DrmHal::getPropertyString(String8 const &name, String8 &value ) const { Mutex::Autolock autoLock(mLock); return getPropertyStringInternal(name, value); Loading
drm/libmediadrm/IDrm.cpp +6 −32 Original line number Diff line number Diff line Loading @@ -60,7 +60,6 @@ enum { GET_HDCP_LEVELS, GET_NUMBER_OF_SESSIONS, GET_SECURITY_LEVEL, SET_SECURITY_LEVEL, REMOVE_SECURE_STOP, GET_SECURE_STOP_IDS }; Loading Loading @@ -121,9 +120,11 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t openSession(Vector<uint8_t> &sessionId) { virtual status_t openSession(DrmPlugin::SecurityLevel securityLevel, Vector<uint8_t> &sessionId) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); data.writeInt32(securityLevel); status_t status = remote()->transact(OPEN_SESSION, data, &reply); if (status != OK) { Loading Loading @@ -448,23 +449,6 @@ struct BpDrm : public BpInterface<IDrm> { return reply.readInt32(); } virtual status_t setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level) { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); writeVector(data, sessionId); data.writeInt32(static_cast<uint32_t>(level)); status_t status = remote()->transact(SET_SECURITY_LEVEL, data, &reply); if (status != OK) { return status; } return reply.readInt32(); } virtual status_t getPropertyByteArray(String8 const &name, Vector<uint8_t> &value) const { Parcel data, reply; data.writeInterfaceToken(IDrm::getInterfaceDescriptor()); Loading Loading @@ -742,8 +726,10 @@ status_t BnDrm::onTransact( case OPEN_SESSION: { CHECK_INTERFACE(IDrm, data, reply); DrmPlugin::SecurityLevel level = static_cast<DrmPlugin::SecurityLevel>(data.readInt32()); Vector<uint8_t> sessionId; status_t result = openSession(sessionId); status_t result = openSession(level, sessionId); writeVector(reply, sessionId); reply->writeInt32(result); return OK; Loading Loading @@ -977,18 +963,6 @@ status_t BnDrm::onTransact( return OK; } case SET_SECURITY_LEVEL: { CHECK_INTERFACE(IDrm, data, reply); Vector<uint8_t> sessionId; readVector(data, sessionId); DrmPlugin::SecurityLevel level = static_cast<DrmPlugin::SecurityLevel>(data.readInt32()); status_t result = setSecurityLevel(sessionId, level); reply->writeInt32(result); return OK; } case GET_PROPERTY_STRING: { CHECK_INTERFACE(IDrm, data, reply); Loading
drm/mediadrm/plugins/clearkey/hidl/DrmPlugin.cpp +16 −4 Original line number Diff line number Diff line Loading @@ -73,12 +73,24 @@ void DrmPlugin::initProperties() { mByteArrayProperties[kMetricsKey] = valueVector; } Return<void> DrmPlugin::openSession(openSession_cb _hidl_cb) { sp<Session> session = mSessionLibrary->createSession(); std::vector<uint8_t> sessionId = session->sessionId(); setSecurityLevel(sessionId, SecurityLevel::SW_SECURE_CRYPTO); _hidl_cb(Status::OK, toHidlVec(sessionId)); Status status = setSecurityLevel(sessionId, SecurityLevel::SW_SECURE_CRYPTO); _hidl_cb(status, toHidlVec(sessionId)); mOpenSessionOkCount++; return Void(); } Return<void> DrmPlugin::openSession_1_1(SecurityLevel securityLevel, openSession_1_1_cb _hidl_cb) { sp<Session> session = mSessionLibrary->createSession(); std::vector<uint8_t> sessionId = session->sessionId(); Status status = setSecurityLevel(sessionId, securityLevel); _hidl_cb(status, toHidlVec(sessionId)); mOpenSessionOkCount++; return Void(); } Loading Loading @@ -344,8 +356,8 @@ Return<Status> DrmPlugin::setSecurityLevel(const hidl_vec<uint8_t>& sessionId, return Status::BAD_VALUE; } if (level > SecurityLevel::HW_SECURE_ALL) { ALOGE("Cannot set invalid security level"); if (level > SecurityLevel::SW_SECURE_CRYPTO) { ALOGE("Cannot set security level > max"); return Status::BAD_VALUE; } Loading
drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h +5 −3 Original line number Diff line number Diff line Loading @@ -53,6 +53,8 @@ struct DrmPlugin : public IDrmPlugin { virtual ~DrmPlugin() {} Return<void> openSession(openSession_cb _hidl_cb) override; Return<void> openSession_1_1(SecurityLevel securityLevel, openSession_cb _hidl_cb) override; Return<Status> closeSession(const hidl_vec<uint8_t>& sessionId) override; Loading Loading @@ -162,9 +164,6 @@ struct DrmPlugin : public IDrmPlugin { Return<void> getSecurityLevel(const hidl_vec<uint8_t>& sessionId, getSecurityLevel_cb _hidl_cb) override; Return<Status> setSecurityLevel(const hidl_vec<uint8_t>& sessionId, SecurityLevel level) override; Return<void> getMetrics(getMetrics_cb _hidl_cb) override; Return<void> getPropertyString( Loading Loading @@ -333,6 +332,9 @@ private: void initProperties(); void setPlayPolicy(); Return<Status> setSecurityLevel(const hidl_vec<uint8_t>& sessionId, SecurityLevel level); std::vector<KeyValue> mPlayPolicy; std::map<std::string, std::string> mStringProperties; std::map<std::string, std::vector<uint8_t> > mByteArrayProperties; Loading
media/libmedia/include/media/DrmHal.h +2 −3 Original line number Diff line number Diff line Loading @@ -63,7 +63,8 @@ struct DrmHal : public BnDrm, virtual status_t destroyPlugin(); virtual status_t openSession(Vector<uint8_t> &sessionId); virtual status_t openSession(DrmPlugin::SecurityLevel level, Vector<uint8_t> &sessionId); virtual status_t closeSession(Vector<uint8_t> const &sessionId); Loading Loading @@ -110,8 +111,6 @@ struct DrmHal : public BnDrm, uint32_t *maxSessions) const; virtual status_t getSecurityLevel(Vector<uint8_t> const &sessionId, DrmPlugin::SecurityLevel *level) const; virtual status_t setSecurityLevel(Vector<uint8_t> const &sessionId, const DrmPlugin::SecurityLevel& level); virtual status_t getPropertyString(String8 const &name, String8 &value ) const; virtual status_t getPropertyByteArray(String8 const &name, Loading