Add support for HDCP 2.3
bug:120040804 Change-Id: I51e0d173edc36d518e12b821ccb3a7b1e7e8d217
This commit is contained in:
@@ -58,5 +58,6 @@ using drm::V1_2::OfflineLicenseState;
|
|||||||
typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1;
|
typedef drm::V1_1::KeyRequestType KeyRequestType_V1_1;
|
||||||
typedef drm::V1_2::IDrmPluginListener IDrmPluginListener_V1_2;
|
typedef drm::V1_2::IDrmPluginListener IDrmPluginListener_V1_2;
|
||||||
typedef drm::V1_2::Status Status_V1_2;
|
typedef drm::V1_2::Status Status_V1_2;
|
||||||
|
typedef drm::V1_2::HdcpLevel HdcpLevel_V1_2;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
|
|||||||
Return<Status> removeAllSecureStops() override;
|
Return<Status> removeAllSecureStops() override;
|
||||||
|
|
||||||
Return<void> getHdcpLevels(getHdcpLevels_cb _hidl_cb) override;
|
Return<void> getHdcpLevels(getHdcpLevels_cb _hidl_cb) override;
|
||||||
|
Return<void> getHdcpLevels_1_2(getHdcpLevels_1_2_cb _hidl_cb) override;
|
||||||
|
|
||||||
Return<void> getNumberOfSessions(getNumberOfSessions_cb _hidl_cb) override;
|
Return<void> getNumberOfSessions(getNumberOfSessions_cb _hidl_cb) override;
|
||||||
|
|
||||||
|
|||||||
@@ -151,6 +151,20 @@ HdcpLevel mapHdcpLevel(const std::string level) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HdcpLevel_V1_2 mapHdcpLevel_1_2(const std::string level) {
|
||||||
|
if (level == wvcdm::QUERY_VALUE_HDCP_V2_3) {
|
||||||
|
return HdcpLevel_V1_2::HDCP_V2_3;
|
||||||
|
}
|
||||||
|
return static_cast<HdcpLevel_V1_2>(mapHdcpLevel(level));
|
||||||
|
}
|
||||||
|
|
||||||
|
HdcpLevel toHdcpLevel_1_1(HdcpLevel_V1_2 level) {
|
||||||
|
if (level == HdcpLevel_V1_2::HDCP_V2_3) {
|
||||||
|
return HdcpLevel::HDCP_NONE;
|
||||||
|
}
|
||||||
|
return static_cast<HdcpLevel>(level);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
WVDrmPlugin::WVDrmPlugin(const sp<WvContentDecryptionModule>& cdm,
|
WVDrmPlugin::WVDrmPlugin(const sp<WvContentDecryptionModule>& cdm,
|
||||||
@@ -940,26 +954,43 @@ Return<void> WVDrmPlugin::getHdcpLevels(getHdcpLevels_cb _hidl_cb) {
|
|||||||
HdcpLevel connectedLevel = HdcpLevel::HDCP_NONE;
|
HdcpLevel connectedLevel = HdcpLevel::HDCP_NONE;
|
||||||
HdcpLevel maxLevel = HdcpLevel::HDCP_NO_OUTPUT;
|
HdcpLevel maxLevel = HdcpLevel::HDCP_NO_OUTPUT;
|
||||||
|
|
||||||
|
Return<void> hResult = getHdcpLevels_1_2(
|
||||||
|
[&](Status_V1_2 status, const HdcpLevel_V1_2& hConnected,
|
||||||
|
const HdcpLevel_V1_2& hMax) {
|
||||||
|
if (status == Status_V1_2::OK) {
|
||||||
|
connectedLevel = toHdcpLevel_1_1(hConnected);
|
||||||
|
maxLevel = toHdcpLevel_1_1(hMax);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
_hidl_cb(Status::OK, connectedLevel, maxLevel);
|
||||||
|
return Void();
|
||||||
|
}
|
||||||
|
|
||||||
|
Return<void> WVDrmPlugin::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;
|
||||||
|
|
||||||
std::string level;
|
std::string level;
|
||||||
Status status = queryProperty(wvcdm::QUERY_KEY_CURRENT_HDCP_LEVEL, level);
|
Status status = queryProperty(wvcdm::QUERY_KEY_CURRENT_HDCP_LEVEL, level);
|
||||||
if (status == Status::OK) {
|
if (status == Status::OK) {
|
||||||
connectedLevel = mapHdcpLevel(level);
|
connectedLevel = mapHdcpLevel_1_2(level);
|
||||||
} else {
|
} else {
|
||||||
ALOGE("Failed to query current hdcp level.");
|
ALOGE("Failed to query current hdcp level.");
|
||||||
_hidl_cb(Status::ERROR_DRM_INVALID_STATE, connectedLevel, maxLevel);
|
_hidl_cb(Status_V1_2::ERROR_DRM_INVALID_STATE, connectedLevel, maxLevel);
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
status = queryProperty(wvcdm::QUERY_KEY_MAX_HDCP_LEVEL, level);
|
status = queryProperty(wvcdm::QUERY_KEY_MAX_HDCP_LEVEL, level);
|
||||||
if (status == Status::OK) {
|
if (status == Status::OK) {
|
||||||
maxLevel = mapHdcpLevel(level);
|
maxLevel = mapHdcpLevel_1_2(level);
|
||||||
} else {
|
} else {
|
||||||
ALOGE("Failed to query maximum hdcp level.");
|
ALOGE("Failed to query maximum hdcp level.");
|
||||||
_hidl_cb(Status::ERROR_DRM_INVALID_STATE, connectedLevel, maxLevel);
|
_hidl_cb(Status_V1_2::ERROR_DRM_INVALID_STATE, connectedLevel, maxLevel);
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
_hidl_cb(Status::OK, connectedLevel, maxLevel);
|
_hidl_cb(Status_V1_2::OK, connectedLevel, maxLevel);
|
||||||
return Void();
|
return Void();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user