libwvhidl: implement setPlaybackId
Bug: 159337195 Bug: 168341163 Test: GtsMediaTestCases MediaDrmTest#testSetPlaybackId Change-Id: I4fc687892c9dd3b8077b3ecdfd9bbc355b298571
This commit is contained in:
@@ -348,6 +348,9 @@ class CdmEngine {
|
|||||||
}
|
}
|
||||||
virtual const std::string& GetAppPackageName() { return app_package_name_; }
|
virtual const std::string& GetAppPackageName() { return app_package_name_; }
|
||||||
virtual void SetSpoid(const std::string& spoid) { spoid_ = spoid; }
|
virtual void SetSpoid(const std::string& spoid) { spoid_ = spoid; }
|
||||||
|
virtual CdmResponseType SetPlaybackId(
|
||||||
|
const CdmSessionId& session_id,
|
||||||
|
const std::string& playback_id);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class CdmEngineFactory;
|
friend class CdmEngineFactory;
|
||||||
|
|||||||
@@ -416,6 +416,7 @@ enum CdmResponseType : int32_t {
|
|||||||
LOAD_USAGE_ENTRY_INVALID_SESSION = 361,
|
LOAD_USAGE_ENTRY_INVALID_SESSION = 361,
|
||||||
RESTORE_OFFLINE_LICENSE_ERROR_3 = 362,
|
RESTORE_OFFLINE_LICENSE_ERROR_3 = 362,
|
||||||
NO_SRM_VERSION = 363,
|
NO_SRM_VERSION = 363,
|
||||||
|
SESSION_NOT_FOUND_23 = 364,
|
||||||
// Don't forget to add new values to
|
// Don't forget to add new values to
|
||||||
// * core/test/test_printers.cpp.
|
// * core/test/test_printers.cpp.
|
||||||
// * android/include/mapErrors-inl.h
|
// * android/include/mapErrors-inl.h
|
||||||
|
|||||||
@@ -1922,6 +1922,19 @@ CdmResponseType CdmEngine::ValidateServiceCertificate(const std::string& cert) {
|
|||||||
return certificate.Init(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) {
|
std::string CdmEngine::MapHdcpVersion(CryptoSession::HdcpCapability version) {
|
||||||
switch (version) {
|
switch (version) {
|
||||||
case HDCP_NONE:
|
case HDCP_NONE:
|
||||||
|
|||||||
@@ -812,6 +812,9 @@ void PrintTo(const enum CdmResponseType& value, ::std::ostream* os) {
|
|||||||
case SESSION_NOT_FOUND_22:
|
case SESSION_NOT_FOUND_22:
|
||||||
*os << "SESSION_NOT_FOUND_22";
|
*os << "SESSION_NOT_FOUND_22";
|
||||||
break;
|
break;
|
||||||
|
case SESSION_NOT_FOUND_23:
|
||||||
|
*os << "SESSION_NOT_FOUND_23";
|
||||||
|
break;
|
||||||
case SESSION_NOT_FOUND_FOR_DECRYPT:
|
case SESSION_NOT_FOUND_FOR_DECRYPT:
|
||||||
*os << "SESSION_NOT_FOUND_FOR_DECRYPT";
|
*os << "SESSION_NOT_FOUND_FOR_DECRYPT";
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -180,6 +180,10 @@ class WvContentDecryptionModule : public android::RefBase, public TimerHandler {
|
|||||||
CdmSecurityLevel security_level,
|
CdmSecurityLevel security_level,
|
||||||
const CdmIdentifier& identifier);
|
const CdmIdentifier& identifier);
|
||||||
|
|
||||||
|
virtual CdmResponseType SetPlaybackId(
|
||||||
|
const CdmSessionId& session_id,
|
||||||
|
const std::string& playback_id);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct CdmInfo {
|
struct CdmInfo {
|
||||||
CdmInfo();
|
CdmInfo();
|
||||||
|
|||||||
@@ -337,6 +337,7 @@ class SessionMetrics {
|
|||||||
ValueMetric<std::string> oemcrypto_build_info_;
|
ValueMetric<std::string> oemcrypto_build_info_;
|
||||||
ValueMetric<std::string> license_sdk_version_;
|
ValueMetric<std::string> license_sdk_version_;
|
||||||
ValueMetric<std::string> license_service_version_;
|
ValueMetric<std::string> license_service_version_;
|
||||||
|
ValueMetric<std::string> playback_id_;
|
||||||
|
|
||||||
// Serialize the session metrics to the provided |metric_group|.
|
// Serialize the session metrics to the provided |metric_group|.
|
||||||
// |metric_group| is owned by the caller and must not be null.
|
// |metric_group| is owned by the caller and must not be null.
|
||||||
|
|||||||
@@ -246,6 +246,8 @@ void SessionMetrics::SerializeSessionMetrics(
|
|||||||
license_sdk_version_.ToProto());
|
license_sdk_version_.ToProto());
|
||||||
session_metrics->set_allocated_license_service_version(
|
session_metrics->set_allocated_license_service_version(
|
||||||
license_service_version_.ToProto());
|
license_service_version_.ToProto());
|
||||||
|
session_metrics->set_allocated_playback_id(
|
||||||
|
playback_id_.ToProto());
|
||||||
}
|
}
|
||||||
|
|
||||||
OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics()
|
OemCryptoDynamicAdapterMetrics::OemCryptoDynamicAdapterMetrics()
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ message WvCdmMetrics {
|
|||||||
optional ValueMetric oemcrypto_build_info = 8;
|
optional ValueMetric oemcrypto_build_info = 8;
|
||||||
optional ValueMetric license_sdk_version = 9;
|
optional ValueMetric license_sdk_version = 9;
|
||||||
optional ValueMetric license_service_version = 10;
|
optional ValueMetric license_service_version = 10;
|
||||||
|
optional ValueMetric playback_id = 11;
|
||||||
}
|
}
|
||||||
|
|
||||||
// These are metrics recorded at the Engine level. This includes CryptoSession
|
// These are metrics recorded at the Engine level. This includes CryptoSession
|
||||||
|
|||||||
@@ -609,4 +609,13 @@ CdmResponseType WvContentDecryptionModule::RemoveOfflineLicense(
|
|||||||
return cdm_engine->RemoveOfflineLicense(key_set_id, security_level);
|
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
|
} // namespace wvcdm
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ static android::status_t mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|||||||
case wvcdm::SESSION_NOT_FOUND_20:
|
case wvcdm::SESSION_NOT_FOUND_20:
|
||||||
case wvcdm::SESSION_NOT_FOUND_21:
|
case wvcdm::SESSION_NOT_FOUND_21:
|
||||||
case wvcdm::SESSION_NOT_FOUND_22:
|
case wvcdm::SESSION_NOT_FOUND_22:
|
||||||
|
case wvcdm::SESSION_NOT_FOUND_23:
|
||||||
case wvcdm::SESSION_NOT_FOUND_FOR_DECRYPT:
|
case wvcdm::SESSION_NOT_FOUND_FOR_DECRYPT:
|
||||||
return android::ERROR_DRM_SESSION_NOT_OPENED;
|
return android::ERROR_DRM_SESSION_NOT_OPENED;
|
||||||
case wvcdm::UNKNOWN_ERROR:
|
case wvcdm::UNKNOWN_ERROR:
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ static Status mapCdmResponseType(wvcdm::CdmResponseType res) {
|
|||||||
case wvcdm::SESSION_NOT_FOUND_20:
|
case wvcdm::SESSION_NOT_FOUND_20:
|
||||||
case wvcdm::SESSION_NOT_FOUND_21:
|
case wvcdm::SESSION_NOT_FOUND_21:
|
||||||
case wvcdm::SESSION_NOT_FOUND_22:
|
case wvcdm::SESSION_NOT_FOUND_22:
|
||||||
|
case wvcdm::SESSION_NOT_FOUND_23:
|
||||||
return Status::ERROR_DRM_SESSION_NOT_OPENED;
|
return Status::ERROR_DRM_SESSION_NOT_OPENED;
|
||||||
|
|
||||||
case wvcdm::DECRYPT_ERROR:
|
case wvcdm::DECRYPT_ERROR:
|
||||||
|
|||||||
@@ -225,6 +225,10 @@ struct WVDrmPlugin : public ::drm::V1_4::IDrmPlugin, IDrmPluginListener,
|
|||||||
|
|
||||||
Return<bool> requiresSecureDecoderDefault(const hidl_string& mime) override;
|
Return<bool> requiresSecureDecoderDefault(const hidl_string& mime) override;
|
||||||
|
|
||||||
|
Return<::drm::V1_0::Status> setPlaybackId(
|
||||||
|
const hidl_vec<uint8_t>& sessionId,
|
||||||
|
const hidl_string& playbackId) override;
|
||||||
|
|
||||||
// The following methods do not use hidl interface, it is used internally.
|
// The following methods do not use hidl interface, it is used internally.
|
||||||
virtual Status unprovisionDevice();
|
virtual Status unprovisionDevice();
|
||||||
|
|
||||||
|
|||||||
@@ -1955,6 +1955,16 @@ Return<bool> WVDrmPlugin::requiresSecureDecoderDefault(const hidl_string& mime)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Return<::drm::V1_0::Status> WVDrmPlugin::setPlaybackId(
|
||||||
|
const hidl_vec<uint8_t>& sessionId,
|
||||||
|
const hidl_string& playbackId) {
|
||||||
|
const std::vector<uint8_t> sId = toVector(sessionId);
|
||||||
|
CdmSessionId cdmSessionId(sId.begin(), sId.end());
|
||||||
|
std::string cdmPlaybackId = playbackId;
|
||||||
|
CdmResponseType res = mCDM->SetPlaybackId(cdmSessionId, cdmPlaybackId);
|
||||||
|
return mapCdmResponseType(res);
|
||||||
|
}
|
||||||
|
|
||||||
void WVDrmPlugin::OnSessionRenewalNeeded(const CdmSessionId& cdmSessionId) {
|
void WVDrmPlugin::OnSessionRenewalNeeded(const CdmSessionId& cdmSessionId) {
|
||||||
const std::vector<uint8_t> sessionId = StrToVector(cdmSessionId);
|
const std::vector<uint8_t> sessionId = StrToVector(cdmSessionId);
|
||||||
const hidl_vec<uint8_t> data; // data is ignored
|
const hidl_vec<uint8_t> data; // data is ignored
|
||||||
|
|||||||
@@ -412,6 +412,11 @@ void HidlMetricsAdapter::AddSessionMetrics(
|
|||||||
"license_service_version",
|
"license_service_version",
|
||||||
proto_metrics.license_service_version());
|
proto_metrics.license_service_version());
|
||||||
}
|
}
|
||||||
|
if (proto_metrics.has_playback_id()) {
|
||||||
|
group_builder.AddValue(
|
||||||
|
"playback_id",
|
||||||
|
proto_metrics.playback_id());
|
||||||
|
}
|
||||||
group_vector_.emplace_back(group_builder.Build());
|
group_vector_.emplace_back(group_builder.Build());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user