/** * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.hardware.drm@1.1; import @1.0::KeyRequestType; /** * This message contains plugin-specific metrics made available to the client. * The message is used for making vendor-specific metrics available to an * application. The framework is not consuming any of the information. * * Metrics are grouped in instances of DrmMetricGroup. Each group contains * multiple instances of Metric. * * Example: * * Capture the timing information of a buffer copy event, "buf_copy", broken * out by the "size" of the buffer. * * DrmMetricGroup { * metrics[0] { * name: "buf_copy" * attributes[0] { * name: "size" * type: INT64_TYPE * int64Value: 1024 * } * values[0] { * componentName: "operation_count" * type: INT64_TYPE * int64Value: 75 * } * values[1] { * component_name: "average_time_seconds" * type: DOUBLE_TYPE * doubleValue: 0.00000042 * } * } * } */ struct DrmMetricGroup { /** * Used to discriminate the type of value being stored in the structs * below. */ enum ValueType : uint8_t { INT64_TYPE, DOUBLE_TYPE, STRING_TYPE, }; /** * A detail about the metric being captured. The fields of an Attribute * are opaque to the framework. */ struct Attribute { string name; /** * The type field indicates which of the following values is used. */ ValueType type; int64_t int64Value; double doubleValue; string stringValue; }; /** * A value of the metric. A metric may have multiple values. The * component name may be left empty if there is only supposed to be * one value for the given metric. The fields of the Value are * opaque to the framework. */ struct Value { string componentName; /** * The type field indicates which of the following values is used. */ ValueType type; int64_t int64Value; double doubleValue; string stringValue; }; /** * The metric being captured. A metric must have a name and at least one * value. A metric may have 0 or more attributes. The fields of a Metric * are opaque to the framework. */ struct Metric { string name; vec attributes; // A Metric may have one or more values. Multiple values are useful // for capturing different aspects of the same metric. E.g. capture // the min, max, average, count, and stdev of a particular metric. vec values; }; /** * The list of metrics to be captured. */ vec metrics; }; /** * HDCP specifications are defined by Digital Content Protection LLC (DCP). * "HDCP Specification Rev. 2.2 Interface Independent Adaptation" * "HDCP 2.2 on HDMI Specification" */ enum HdcpLevel : uint32_t { /** * Unable to determine the HDCP level */ HDCP_UNKNOWN, /** * No HDCP, output is unprotected */ HDCP_NONE, /** * HDCP version 1.0 */ HDCP_V1, /** * HDCP version 2.0 Type 1. */ HDCP_V2, /** * HDCP version 2.1 Type 1. */ HDCP_V2_1, /** * HDCP version 2.2 Type 1. */ HDCP_V2_2, /** * No digital output, implicitly secure */ HDCP_NO_OUTPUT }; /** * KeyRequestTypes (in addition to those from 1.0) which allow an app * to determine the type of a key request returned from getKeyRequest. */ enum KeyRequestType : @1.0::KeyRequestType { /** * Keys are already loaded. No key request is needed. */ NONE, /** * Keys have previously been loaded. An additional (non-renewal) license * request is needed. */ UPDATE, }; enum SecurityLevel : uint32_t { /** * Unable to determine the security level */ UNKNOWN, /** * Software-based whitebox crypto */ SW_SECURE_CRYPTO, /** * Software-based whitebox crypto and an obfuscated decoder */ SW_SECURE_DECODE, /** * DRM key management and crypto operations are performed within a * hardware backed trusted execution environment */ HW_SECURE_CRYPTO, /** * DRM key management, crypto operations and decoding of content * are performed within a hardware backed trusted execution environment */ HW_SECURE_DECODE, /** * DRM key management, crypto operations, decoding of content and all * handling of the media (compressed and uncompressed) is handled within * a hardware backed trusted execution environment. */ HW_SECURE_ALL, }; /** * Encapsulates a secure stop release opaque object */ struct SecureStopRelease { vec opaqueData; };