Merge "Add support for HDCP 2.3"

gugelfrei
Jeff Tinker 6 years ago committed by Android (Google) Code Review
commit 9f81192d77

@ -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;
}

@ -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,

Loading…
Cancel
Save