syntax = "proto2";

package android.os.statsd.media;

import "frameworks/proto_logging/stats/atom_field_options.proto";
import "frameworks/proto_logging/stats/enums/media/drm/enums.proto";

option java_package = "com.android.os.media";

/**
 * Logs when a MediaDrm object is created.
 *
 * Logged from:
 *   frameworks/av/drm/libmediadrm/DrmHal.cpp
 */
message MediaDrmCreated {
  // Crypto scheme & UUID.
  // Please see https://dashif.org/identifiers/content_protection/.
  optional android.media.drm.DrmScheme scheme = 1;
  optional int64 uuid_lsb = 2;
  optional int64 uuid_msb = 3;
  // App uid.
  optional int32 uid = 4 [(is_uid) = true];
  // DRM library (MediaDrm, NdkMediaDrm, or MediaPlayer).
  optional android.media.drm.IDrmFrontend frontend = 5;
  // MediaDrm#PROPERTY_VERSION.
  optional string version = 6;
}

/**
 * Logs when a MediaDrm object encountered an error.
 *
 * Logged from:
 *   frameworks/av/drm/libmediadrm/DrmHal.cpp
 */
message MediaDrmErrored {
  // Crypto scheme & UUID.
  // Please see https://dashif.org/identifiers/content_protection/.
  optional android.media.drm.DrmScheme scheme = 1;
  optional int64 uuid_lsb = 2;
  optional int64 uuid_msb = 3;
  // App uid.
  optional int32 uid = 4 [(is_uid) = true];
  // DRM library (MediaDrm, NdkMediaDrm, or MediaPlayer).
  optional android.media.drm.IDrmFrontend frontend = 5;
  // MediaDrm#PROPERTY_VERSION.
  optional string version = 6;
  // Base64 encoding of a randomly generated, globally unique 128 bit number
  // tied to a MediaDrm object; it has no device or user association.
  optional string object_nonce = 7;
  // Base64 encoding of a randomly generated, globally unique 128 bit number
  // tied to a MediaDrm session; it has no device or user association.
  optional string session_nonce = 8;
  // Security level of the opened session.
  optional android.media.drm.SecurityLevel security_level = 9;
  // The API that triggered the error.
  optional android.media.drm.DrmApi api = 10;
  // The encountered framework error.
  optional android.media.drm.Status error_code = 11;
  // Underlying plugin-specific (content decryption module) error.
  optional int32 cdm_err = 12;
  // Underlying OEM-specific error.
  optional int32 oem_err = 13;
  // Plugin-specific (cdm) error context.
  optional int32 error_context = 14;
}

/**
 * Logs when a MediaDrm session is opened.
 *
 * Logged from:
 *   frameworks/av/drm/libmediadrm/DrmHal.cpp
 */
message MediaDrmSessionOpened {
  // Crypto scheme & UUID.
  // Please see https://dashif.org/identifiers/content_protection/.
  optional android.media.drm.DrmScheme scheme = 1;
  optional int64 uuid_lsb = 2;
  optional int64 uuid_msb = 3;
  // App uid.
  optional int32 uid = 4 [(is_uid) = true];
  // DRM library (MediaDrm, NdkMediaDrm, or MediaPlayer).
  optional android.media.drm.IDrmFrontend frontend = 5;
  // MediaDrm#PROPERTY_VERSION.
  optional string version = 6;
  // Base64 encoding of a randomly generated, globally unique 128 bit number
  // tied to a MediaDrm object; it has no device or user association.
  optional string object_nonce = 7;
  // Input security level to MediaDrm#openSession.
  optional android.media.drm.SecurityLevel requested_security_level = 8;
  // Actual security level of the opened session.
  optional android.media.drm.SecurityLevel opened_security_level = 9;
}

/**
 * Logs when a MediaDrm session is closed.
 *
 * Logged from:
 *   frameworks/av/drm/libmediadrm/DrmHal.cpp
 */
message MediaDrmSessionClosed {
  // Crypto scheme & UUID.
  // Please see https://dashif.org/identifiers/content_protection/.
  optional android.media.drm.DrmScheme scheme = 1;
  optional int64 uuid_lsb = 2;
  optional int64 uuid_msb = 3;
  // App uid.
  optional int32 uid = 4 [(is_uid) = true];
  // DRM library (MediaDrm, NdkMediaDrm, or MediaPlayer).
  optional android.media.drm.IDrmFrontend frontend = 5;
  // MediaDrm#PROPERTY_VERSION.
  optional string version = 6;
  // Base64 encoding of a randomly generated, globally unique 128 bit number
  // tied to a MediaDrm object; it has no device or user association.
  optional string object_nonce  = 7;
  // Base64 encoding of a randomly generated, globally unique 128 bit number
  // tied to a MediaDrm session; it has no device or user association.
  optional string session_nonce = 8;
  // Security level of the opened session.
  optional android.media.drm.SecurityLevel opened_security_level = 9;
  // Duration between session open-close in milliseconds.
  optional int64 session_lifespan_ms = 10;
}

