Loading drm/libmediadrm/DrmHal.cpp +32 −22 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ using ::android::sp; typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1; typedef drm::V1_2::Status Status_V1_2; typedef drm::V1_2::HdcpLevel HdcpLevel_V1_2; namespace { Loading Loading @@ -156,26 +157,26 @@ static DrmPlugin::OfflineLicenseState toOfflineLicenseState( } } static DrmPlugin::HdcpLevel toHdcpLevel(HdcpLevel level) { static DrmPlugin::HdcpLevel toHdcpLevel(HdcpLevel_V1_2 level) { switch(level) { case HdcpLevel::HDCP_NONE: case HdcpLevel_V1_2::HDCP_NONE: return DrmPlugin::kHdcpNone; case HdcpLevel::HDCP_V1: case HdcpLevel_V1_2::HDCP_V1: return DrmPlugin::kHdcpV1; case HdcpLevel::HDCP_V2: case HdcpLevel_V1_2::HDCP_V2: return DrmPlugin::kHdcpV2; case HdcpLevel::HDCP_V2_1: case HdcpLevel_V1_2::HDCP_V2_1: return DrmPlugin::kHdcpV2_1; case HdcpLevel::HDCP_V2_2: case HdcpLevel_V1_2::HDCP_V2_2: return DrmPlugin::kHdcpV2_2; case HdcpLevel::HDCP_NO_OUTPUT: case HdcpLevel_V1_2::HDCP_V2_3: return DrmPlugin::kHdcpV2_3; case HdcpLevel_V1_2::HDCP_NO_OUTPUT: return DrmPlugin::kHdcpNoOutput; default: return DrmPlugin::kHdcpLevelUnknown; } } static ::KeyedVector toHidlKeyedVector(const KeyedVector<String8, String8>& keyedVector) { std::vector<KeyValue> stdKeyedVector; Loading Loading @@ -1093,22 +1094,31 @@ status_t DrmHal::getHdcpLevels(DrmPlugin::HdcpLevel *connected, } status_t err = UNKNOWN_ERROR; if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } *connected = DrmPlugin::kHdcpLevelUnknown; *max = DrmPlugin::kHdcpLevelUnknown; Return<void> hResult = mPluginV1_1->getHdcpLevels( [&](Status status, const HdcpLevel& hConnected, const HdcpLevel& hMax) { if (status == Status::OK) { Return<void> hResult; if (mPluginV1_2 != NULL) { hResult = mPluginV1_2->getHdcpLevels_1_2( [&](Status_V1_2 status, const HdcpLevel_V1_2& hConnected, const HdcpLevel_V1_2& hMax) { if (status == Status_V1_2::OK) { *connected = toHdcpLevel(hConnected); *max = toHdcpLevel(hMax); } err = toStatusT_1_2(status); }); } else if (mPluginV1_1 != NULL) { hResult = mPluginV1_1->getHdcpLevels( [&](Status status, const HdcpLevel& hConnected, const HdcpLevel& hMax) { if (status == Status::OK) { *connected = toHdcpLevel(static_cast<HdcpLevel_V1_2>(hConnected)); *max = toHdcpLevel(static_cast<HdcpLevel_V1_2>(hMax)); } err = toStatusT(status); }); } else { return ERROR_DRM_CANNOT_HANDLE; } ); return hResult.isOk() ? err : DEAD_OBJECT; } Loading drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h +8 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ using ::android::sp; typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1; typedef drm::V1_2::IDrmPluginListener IDrmPluginListener_V1_2; typedef drm::V1_2::Status Status_V1_2; typedef drm::V1_2::HdcpLevel HdcpLevel_V1_2; struct DrmPlugin : public IDrmPlugin { explicit DrmPlugin(SessionLibrary* sessionLibrary); Loading Loading @@ -162,6 +163,13 @@ struct DrmPlugin : public IDrmPlugin { return Void(); } Return<void> getHdcpLevels_1_2(getHdcpLevels_1_2_cb _hidl_cb) { HdcpLevel_V1_2 connectedLevel = HdcpLevel_V1_2::HDCP_NONE; HdcpLevel_V1_2 maxLevel = HdcpLevel_V1_2::HDCP_NO_OUTPUT; _hidl_cb(Status_V1_2::OK, connectedLevel, maxLevel); return Void(); } Return<void> getNumberOfSessions(getNumberOfSessions_cb _hidl_cb) override; Return<void> getSecurityLevel(const hidl_vec<uint8_t>& sessionId, Loading Loading
drm/libmediadrm/DrmHal.cpp +32 −22 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ using ::android::sp; typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1; typedef drm::V1_2::Status Status_V1_2; typedef drm::V1_2::HdcpLevel HdcpLevel_V1_2; namespace { Loading Loading @@ -156,26 +157,26 @@ static DrmPlugin::OfflineLicenseState toOfflineLicenseState( } } static DrmPlugin::HdcpLevel toHdcpLevel(HdcpLevel level) { static DrmPlugin::HdcpLevel toHdcpLevel(HdcpLevel_V1_2 level) { switch(level) { case HdcpLevel::HDCP_NONE: case HdcpLevel_V1_2::HDCP_NONE: return DrmPlugin::kHdcpNone; case HdcpLevel::HDCP_V1: case HdcpLevel_V1_2::HDCP_V1: return DrmPlugin::kHdcpV1; case HdcpLevel::HDCP_V2: case HdcpLevel_V1_2::HDCP_V2: return DrmPlugin::kHdcpV2; case HdcpLevel::HDCP_V2_1: case HdcpLevel_V1_2::HDCP_V2_1: return DrmPlugin::kHdcpV2_1; case HdcpLevel::HDCP_V2_2: case HdcpLevel_V1_2::HDCP_V2_2: return DrmPlugin::kHdcpV2_2; case HdcpLevel::HDCP_NO_OUTPUT: case HdcpLevel_V1_2::HDCP_V2_3: return DrmPlugin::kHdcpV2_3; case HdcpLevel_V1_2::HDCP_NO_OUTPUT: return DrmPlugin::kHdcpNoOutput; default: return DrmPlugin::kHdcpLevelUnknown; } } static ::KeyedVector toHidlKeyedVector(const KeyedVector<String8, String8>& keyedVector) { std::vector<KeyValue> stdKeyedVector; Loading Loading @@ -1093,22 +1094,31 @@ status_t DrmHal::getHdcpLevels(DrmPlugin::HdcpLevel *connected, } status_t err = UNKNOWN_ERROR; if (mPluginV1_1 == NULL) { return ERROR_DRM_CANNOT_HANDLE; } *connected = DrmPlugin::kHdcpLevelUnknown; *max = DrmPlugin::kHdcpLevelUnknown; Return<void> hResult = mPluginV1_1->getHdcpLevels( [&](Status status, const HdcpLevel& hConnected, const HdcpLevel& hMax) { if (status == Status::OK) { Return<void> hResult; if (mPluginV1_2 != NULL) { hResult = mPluginV1_2->getHdcpLevels_1_2( [&](Status_V1_2 status, const HdcpLevel_V1_2& hConnected, const HdcpLevel_V1_2& hMax) { if (status == Status_V1_2::OK) { *connected = toHdcpLevel(hConnected); *max = toHdcpLevel(hMax); } err = toStatusT_1_2(status); }); } else if (mPluginV1_1 != NULL) { hResult = mPluginV1_1->getHdcpLevels( [&](Status status, const HdcpLevel& hConnected, const HdcpLevel& hMax) { if (status == Status::OK) { *connected = toHdcpLevel(static_cast<HdcpLevel_V1_2>(hConnected)); *max = toHdcpLevel(static_cast<HdcpLevel_V1_2>(hMax)); } err = toStatusT(status); }); } else { return ERROR_DRM_CANNOT_HANDLE; } ); return hResult.isOk() ? err : DEAD_OBJECT; } Loading
drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h +8 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,7 @@ using ::android::sp; typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1; typedef drm::V1_2::IDrmPluginListener IDrmPluginListener_V1_2; typedef drm::V1_2::Status Status_V1_2; typedef drm::V1_2::HdcpLevel HdcpLevel_V1_2; struct DrmPlugin : public IDrmPlugin { explicit DrmPlugin(SessionLibrary* sessionLibrary); Loading Loading @@ -162,6 +163,13 @@ struct DrmPlugin : public IDrmPlugin { return Void(); } Return<void> getHdcpLevels_1_2(getHdcpLevels_1_2_cb _hidl_cb) { HdcpLevel_V1_2 connectedLevel = HdcpLevel_V1_2::HDCP_NONE; HdcpLevel_V1_2 maxLevel = HdcpLevel_V1_2::HDCP_NO_OUTPUT; _hidl_cb(Status_V1_2::OK, connectedLevel, maxLevel); return Void(); } Return<void> getNumberOfSessions(getNumberOfSessions_cb _hidl_cb) override; Return<void> getSecurityLevel(const hidl_vec<uint8_t>& sessionId, Loading