Merge "Add support for HDCP 2.3"
This commit is contained in:
@@ -125,6 +125,7 @@ struct WVDrmPlugin : public IDrmPlugin, IDrmPluginListener,
|
||||
Return<Status> removeAllSecureStops() 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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
WVDrmPlugin::WVDrmPlugin(const sp<WvContentDecryptionModule>& cdm,
|
||||
@@ -937,29 +951,46 @@ Return<Status> WVDrmPlugin::removeAllSecureStops() {
|
||||
}
|
||||
|
||||
Return<void> WVDrmPlugin::getHdcpLevels(getHdcpLevels_cb _hidl_cb) {
|
||||
HdcpLevel connectedLevel = HdcpLevel::HDCP_NONE;
|
||||
HdcpLevel maxLevel = HdcpLevel::HDCP_NO_OUTPUT;
|
||||
HdcpLevel connectedLevel = HdcpLevel::HDCP_NONE;
|
||||
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;
|
||||
Status status = queryProperty(wvcdm::QUERY_KEY_CURRENT_HDCP_LEVEL, level);
|
||||
if (status == Status::OK) {
|
||||
connectedLevel = mapHdcpLevel(level);
|
||||
connectedLevel = mapHdcpLevel_1_2(level);
|
||||
} else {
|
||||
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();
|
||||
}
|
||||
|
||||
status = queryProperty(wvcdm::QUERY_KEY_MAX_HDCP_LEVEL, level);
|
||||
if (status == Status::OK) {
|
||||
maxLevel = mapHdcpLevel(level);
|
||||
maxLevel = mapHdcpLevel_1_2(level);
|
||||
} else {
|
||||
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();
|
||||
}
|
||||
|
||||
_hidl_cb(Status::OK, connectedLevel, maxLevel);
|
||||
_hidl_cb(Status_V1_2::OK, connectedLevel, maxLevel);
|
||||
return Void();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user