diff options
| author | Jeff Tinker <jtinker@google.com> | 2019-01-19 05:48:04 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-01-19 05:48:04 +0000 |
| commit | 9f81192d77a62564dc1e2c7dad1afe601784a7b9 (patch) | |
| tree | 3c95f5e062dc1f2a9ef83515a3cd667a0e23be98 /drm | |
| parent | c8b2701a2f899bdd0fc01b2bcb38e372c855e523 (diff) | |
| parent | 44c2cc4e1637d6f7c43f14f0dbd6f078497719a2 (diff) | |
| download | frameworks_av-9f81192d77a62564dc1e2c7dad1afe601784a7b9.tar.gz frameworks_av-9f81192d77a62564dc1e2c7dad1afe601784a7b9.tar.bz2 frameworks_av-9f81192d77a62564dc1e2c7dad1afe601784a7b9.zip | |
Merge "Add support for HDCP 2.3"
Diffstat (limited to 'drm')
| -rw-r--r-- | drm/libmediadrm/DrmHal.cpp | 54 | ||||
| -rw-r--r-- | drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h | 8 |
2 files changed, 40 insertions, 22 deletions
diff --git a/drm/libmediadrm/DrmHal.cpp b/drm/libmediadrm/DrmHal.cpp index f4c0341722..b72348f456 100644 --- a/drm/libmediadrm/DrmHal.cpp +++ b/drm/libmediadrm/DrmHal.cpp @@ -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 { @@ -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; @@ -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) { - *connected = toHdcpLevel(hConnected); - *max = toHdcpLevel(hMax); - } - err = toStatusT(status); - } - ); + 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; } diff --git a/drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h b/drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h index a9b897b02e..ba5fa65092 100644 --- a/drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h +++ b/drm/mediadrm/plugins/clearkey/hidl/include/DrmPlugin.h @@ -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); @@ -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, |
