| /** |
| * 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<Attribute> 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<Value> values; |
| }; |
| |
| /** |
| * The list of metrics to be captured. |
| */ |
| vec<Metric> 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<uint8_t> opaqueData; |
| }; |
| |