libwvhidl: implement setPlaybackId

Bug: 159337195
Bug: 168341163
Test: GtsMediaTestCases MediaDrmTest#testSetPlaybackId
Change-Id: I4fc687892c9dd3b8077b3ecdfd9bbc355b298571
This commit is contained in:
Robert Shih
2021-01-18 00:10:54 -08:00
parent 56195b41c6
commit e0a1e459a2
14 changed files with 58 additions and 0 deletions

View File

@@ -348,6 +348,9 @@ class CdmEngine {
}
virtual const std::string& GetAppPackageName() { return app_package_name_; }
virtual void SetSpoid(const std::string& spoid) { spoid_ = spoid; }
virtual CdmResponseType SetPlaybackId(
const CdmSessionId& session_id,
const std::string& playback_id);
protected:
friend class CdmEngineFactory;

View File

@@ -416,6 +416,7 @@ enum CdmResponseType : int32_t {
LOAD_USAGE_ENTRY_INVALID_SESSION = 361,
RESTORE_OFFLINE_LICENSE_ERROR_3 = 362,
NO_SRM_VERSION = 363,
SESSION_NOT_FOUND_23 = 364,
// Don't forget to add new values to
// * core/test/test_printers.cpp.
// * android/include/mapErrors-inl.h

View File

@@ -1922,6 +1922,19 @@ CdmResponseType CdmEngine::ValidateServiceCertificate(const std::string& cert) {
return certificate.Init(cert);
}
CdmResponseType CdmEngine::SetPlaybackId(
const CdmSessionId& session_id, const std::string& playback_id) {
LOGI("Setting session_id = %s playback_id = %s",
session_id.c_str(), playback_id.c_str());
std::shared_ptr<CdmSession> session;
if (!session_map_.FindSession(session_id, &session)) {
LOGE("Session ID not found: %s", session_id.c_str());
return SESSION_NOT_FOUND_23;
}
session->GetMetrics()->playback_id_.Record(playback_id);
return NO_ERROR;
}
std::string CdmEngine::MapHdcpVersion(CryptoSession::HdcpCapability version) {
switch (version) {
case HDCP_NONE:

View File

@@ -812,6 +812,9 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
case SESSION_NOT_FOUND_22:
*os << "SESSION_NOT_FOUND_22";
break;
case SESSION_NOT_FOUND_23:
*os << "SESSION_NOT_FOUND_23";
break;
case SESSION_NOT_FOUND_FOR_DECRYPT:
*os << "SESSION_NOT_FOUND_FOR_DECRYPT";
break;

View File

@@ -180,6 +180,10 @@ class WvContentDecryptionModule : public android::RefBase, public TimerHandler {
CdmSecurityLevel security_level,
const CdmIdentifier& identifier);
virtual CdmResponseType SetPlaybackId(
const CdmSessionId& session_id,
const std::string& playback_id);
private:
struct CdmInfo {
CdmInfo();

View File

@@ -337,6 +337,7 @@ class SessionMetrics {
ValueMetric<std::string> oemcrypto_build_info_;
ValueMetric<std::string> license_sdk_version_;
ValueMetric<std::string> license_service_version_;
ValueMetric<std::string> playback_id_;
// Serialize the session metrics to the provided |metric_group|.
// |metric_group| is owned by the caller and must not be null.

View File

@@ -246,6 +246,8 @@ void SessionMetrics::SerializeSessionMetrics(
license_sdk_version_.ToProto());
session_metrics->set_allocated_license_service_version(
license_service_version_.ToProto());
session_metrics->set_allocated_playback_id(
playback_id_.ToProto());
}
OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics()

View File

@@ -211,6 +211,7 @@ message WvCdmMetrics {
optional ValueMetric oemcrypto_build_info = 8;
optional ValueMetric license_sdk_version = 9;
optional ValueMetric license_service_version = 10;
optional ValueMetric playback_id = 11;
}
// These are metrics recorded at the Engine level. This includes CryptoSession

View File

@@ -609,4 +609,13 @@ CdmResponseType WvContentDecryptionModule::RemoveOfflineLicense(
return cdm_engine->RemoveOfflineLicense(key_set_id, security_level);
}
CdmResponseType WvContentDecryptionModule::SetPlaybackId(
const CdmSessionId& session_id,
const std::string& playback_id) {
LOGV("Setting session ID %s playback ID %s",
session_id.c_str(), playback_id.c_str());
CdmEngine* cdm_engine = GetCdmForSessionId(session_id);
if (!cdm_engine) return SESSION_NOT_FOUND_23;
return cdm_engine->SetPlaybackId(session_id, playback_id);
}
} // namespace wvcdm