// THIS FILE IS EXPERIMENTAL. BREAKING CHANGES MAY BE MADE AT ANY TIME
// WITHOUT PRIOR WARNING. THIS FILE SHOULD NOT BE USED IN PRODUCTION CODE.

syntax = "proto2";
option optimize_for = LITE_RUNTIME;
package webrtc.rtclog2;

// At the top level, a WebRTC event log is just an EventStream object. Note that
// concatenating multiple EventStreams in the same file is equivalent to a
// single EventStream object containing the same events. Hence, it is not
// necessary to wait for the entire log to be complete before beginning to
// write it to a file.
// Note: For all X_deltas fields, we rely on the default value being an
// empty string.
message EventStream {
  // Deprecated - Maintained for compatibility with the old event log.
  repeated Event stream = 1 [deprecated = true];
  repeated IncomingRtpPackets incoming_rtp_packets = 2;
  repeated OutgoingRtpPackets outgoing_rtp_packets = 3;
  repeated IncomingRtcpPackets incoming_rtcp_packets = 4;
  repeated OutgoingRtcpPackets outgoing_rtcp_packets = 5;
  repeated AudioPlayoutEvents audio_playout_events = 6;
  repeated FrameDecodedEvents frame_decoded_events = 7;
  // The field tags 8-15 are reserved for the most common events.
  repeated BeginLogEvent begin_log_events = 16;
  repeated EndLogEvent end_log_events = 17;
  repeated LossBasedBweUpdates loss_based_bwe_updates = 18;
  repeated DelayBasedBweUpdates delay_based_bwe_updates = 19;
  repeated AudioNetworkAdaptations audio_network_adaptations = 20;
  repeated BweProbeCluster probe_clusters = 21;
  repeated BweProbeResultSuccess probe_success = 22;
  repeated BweProbeResultFailure probe_failure = 23;
  repeated AlrState alr_states = 24;
  repeated IceCandidatePairConfig ice_candidate_configs = 25;
  repeated IceCandidatePairEvent ice_candidate_events = 26;
  repeated DtlsTransportStateEvent dtls_transport_state_events = 27;
  repeated DtlsWritableState dtls_writable_states = 28;
  repeated GenericPacketSent generic_packets_sent = 29;
  repeated GenericPacketReceived generic_packets_received = 30;
  repeated GenericAckReceived generic_acks_received = 31;
  repeated RouteChange route_changes = 32;
  repeated RemoteEstimates remote_estimates = 33;
  repeated NetEqSetMinimumDelay neteq_set_minimum_delay = 34;

  repeated AudioRecvStreamConfig audio_recv_stream_configs = 101;
  repeated AudioSendStreamConfig audio_send_stream_configs = 102;
  repeated VideoRecvStreamConfig video_recv_stream_configs = 103;
  repeated VideoSendStreamConfig video_send_stream_configs = 104;
}

// DEPRECATED.
message Event {
  // TODO(terelius): Do we want to preserve the old Event definition here?
}

message GenericPacketReceived {
  // All fields are required.
  optional int64 timestamp_ms = 1;
  optional int64 packet_number = 2;
  // Length of the packet in bytes.
  optional int32 packet_length = 3;

  // Provided if there are deltas in the batch.
  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes packet_length_deltas = 19;
}

message GenericPacketSent {
  // All fields are required. All lengths in bytes.
  optional int64 timestamp_ms = 1;
  optional int64 packet_number = 2;
  // overhead+payload+padding length = packet_length in bytes.
  optional int32 overhead_length = 3;
  optional int32 payload_length = 4;
  optional int32 padding_length = 5;

  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes overhead_length_deltas = 19;
  optional bytes payload_length_deltas = 20;
  optional bytes padding_length_deltas = 21;
}

message GenericAckReceived {
  optional int64 timestamp_ms = 1;

  // ID of the received packet.
  optional int64 packet_number = 2;

  // ID of the packet that was acked.
  optional int64 acked_packet_number = 3;

  // Timestamp in ms when the packet was received by the other side.
  optional int64 receive_acked_packet_time_ms = 4;

  optional uint32 number_of_deltas = 16;
  optional bytes timestamp_ms_deltas = 17;
  optional bytes packet_number_deltas = 18;
  optional bytes acked_packet_number_deltas = 19;
  optional bytes receive_acked_packet_time_ms_deltas = 20;
}

message IncomingRtpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - RTP marker bit, used to label boundaries between video frames.
  optional bool marker = 2;

  // required - RTP payload type.
  optional uint32 payload_type = 3;

  // required - RTP sequence number.
  optional uint32 sequence_number = 4;

  // required - RTP monotonic clock timestamp (not actual time).
  optional fixed32 rtp_timestamp = 5;

  // required - Synchronization source of this packet's RTP stream.
  optional fixed32 ssrc = 6;

  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.

  // required - The size (in bytes) of the media payload, not including
  // RTP header or padding. The packet size is the sum of payload, header and
  // padding.
  optional uint32 payload_size = 8;

  // required - The size (in bytes) of the RTP header.
  optional uint32 header_size = 9;

  // required - The size (in bytes) of the padding.
  optional uint32 padding_size = 10;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 11;

  // Field numbers 12-14 reserved for future use.

  // Optional header extensions.
  optional uint32 transport_sequence_number = 15;
  optional int32 transmission_time_offset = 16;
  optional uint32 absolute_send_time = 17;
  optional uint32 video_rotation = 18;
  // `audio_level` and `voice_activity` are always used in conjunction.
  optional uint32 audio_level = 19;
  optional bool voice_activity = 20;
  // TODO(terelius): Add other header extensions like playout delay?

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes marker_deltas = 102;
  optional bytes payload_type_deltas = 103;
  optional bytes sequence_number_deltas = 104;
  optional bytes rtp_timestamp_deltas = 105;
  // Field number 107 reserved for CSRC.
  optional bytes ssrc_deltas = 106;
  optional bytes payload_size_deltas = 108;
  optional bytes header_size_deltas = 109;
  optional bytes padding_size_deltas = 110;
  // Field number 111-114 reserved for future use.
  optional bytes transport_sequence_number_deltas = 115;
  optional bytes transmission_time_offset_deltas = 116;
  optional bytes absolute_send_time_deltas = 117;
  optional bytes video_rotation_deltas = 118;
  // `audio_level` and `voice_activity` are always used in conjunction.
  optional bytes audio_level_deltas = 119;
  optional bytes voice_activity_deltas = 120;
}

message OutgoingRtpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - RTP marker bit, used to label boundaries between video frames.
  optional bool marker = 2;

  // required - RTP payload type.
  optional uint32 payload_type = 3;

  // required - RTP sequence number.
  optional uint32 sequence_number = 4;

  // required - RTP monotonic clock timestamp (not actual time).
  optional fixed32 rtp_timestamp = 5;

  // required - Synchronization source of this packet's RTP stream.
  optional fixed32 ssrc = 6;

  // TODO(terelius/dinor): Add CSRCs. Field number 7 reserved for this purpose.

  // required - The size (in bytes) of the media payload, not including
  // RTP header or padding. The packet size is the sum of payload, header and
  // padding.
  optional uint32 payload_size = 8;

  // required - The size (in bytes) of the RTP header.
  optional uint32 header_size = 9;

  // required - The size (in bytes) of the padding.
  optional uint32 padding_size = 10;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 11;

  // Field numbers 12-14 reserved for future use.

  // Optional header extensions.
  optional uint32 transport_sequence_number = 15;
  optional int32 transmission_time_offset = 16;
  optional uint32 absolute_send_time = 17;
  optional uint32 video_rotation = 18;
  // `audio_level` and `voice_activity` are always used in conjunction.
  optional uint32 audio_level = 19;
  optional bool voice_activity = 20;
  // TODO(terelius): Add other header extensions like playout delay?

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes marker_deltas = 102;
  optional bytes payload_type_deltas = 103;
  optional bytes sequence_number_deltas = 104;
  optional bytes rtp_timestamp_deltas = 105;
  optional bytes ssrc_deltas = 106;
  // Field number 107 reserved for CSRC.
  optional bytes payload_size_deltas = 108;
  optional bytes header_size_deltas = 109;
  optional bytes padding_size_deltas = 110;
  // Field number 111-114 reserved for future use.
  optional bytes transport_sequence_number_deltas = 115;
  optional bytes transmission_time_offset_deltas = 116;
  optional bytes absolute_send_time_deltas = 117;
  optional bytes video_rotation_deltas = 118;
  // `audio_level` and `voice_activity` are always used in conjunction.
  optional bytes audio_level_deltas = 119;
  optional bytes voice_activity_deltas = 120;
}

message IncomingRtcpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - The whole packet including both payload and header.
  optional bytes raw_packet = 2;
  // TODO(terelius): Feasible to log parsed RTCP instead?

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta/blob encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes raw_packet_blobs = 102;
}

message OutgoingRtcpPackets {
  // required
  optional int64 timestamp_ms = 1;

  // required - The whole packet including both payload and header.
  optional bytes raw_packet = 2;
  // TODO(terelius): Feasible to log parsed RTCP instead?

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta/blob encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes raw_packet_blobs = 102;
}

message AudioPlayoutEvents {
  // required
  optional int64 timestamp_ms = 1;

  // required - The SSRC of the audio stream associated with the playout event.
  optional uint32 local_ssrc = 2;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 3;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes local_ssrc_deltas = 102;
}

message NetEqSetMinimumDelay {
  // required
  optional int64 timestamp_ms = 1;

  // required - The SSRC of the remote stream associated with the MinimumDelay
  // event.
  optional fixed32 remote_ssrc = 2;

  // required - minimum delay passed to SetBaseMinimumDelay.
  optional int32 minimum_delay_ms = 3;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 4;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes remote_ssrc_deltas = 102;
  optional bytes minimum_delay_ms_deltas = 103;
}

message FrameDecodedEvents {
  enum Codec {
    CODEC_UNKNOWN = 0;
    CODEC_GENERIC = 1;
    CODEC_VP8 = 2;
    CODEC_VP9 = 3;
    CODEC_AV1 = 4;
    CODEC_H264 = 5;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required - The SSRC of the video stream that the frame belongs to.
  optional fixed32 ssrc = 2;

  // required - The predicted render time of the frame.
  optional int64 render_time_ms = 3;

  // required - The width (in pixels) of the frame.
  optional int32 width = 4;

  // required - The height (in pixels) of the frame.
  optional int32 height = 5;

  // required - The codec type of the frame.
  optional Codec codec = 6;

  // required - The QP (quantization parameter) of the frame. Range [0,255].
  optional uint32 qp = 7;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 15;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes ssrc_deltas = 102;
  optional bytes render_time_ms_deltas = 103;
  optional bytes width_deltas = 104;
  optional bytes height_deltas = 105;
  optional bytes codec_deltas = 106;
  optional bytes qp_deltas = 107;
}

message BeginLogEvent {
  // required
  optional int64 timestamp_ms = 1;

  // required
  optional uint32 version = 2;

  // required
  optional int64 utc_time_ms = 3;
}

message EndLogEvent {
  // required
  optional int64 timestamp_ms = 1;
}

message LossBasedBweUpdates {
  // required
  optional int64 timestamp_ms = 1;

  // TODO(terelius): Update log interface to unsigned.
  // required - Bandwidth estimate (in bps) after the update.
  optional uint32 bitrate_bps = 2;

  // required - Fraction of lost packets since last receiver report
  // computed as floor( 256 * (#lost_packets / #total_packets) ).
  // The possible values range from 0 to 255.
  optional uint32 fraction_loss = 3;

  // TODO(terelius): Is this really needed? Remove or make optional?
  // TODO(terelius): Update log interface to unsigned.
  // required - Total number of packets that the BWE update is based on.
  optional uint32 total_packets = 4;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 5;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes fraction_loss_deltas = 103;
  optional bytes total_packets_deltas = 104;
}

message DelayBasedBweUpdates {
  // required
  optional int64 timestamp_ms = 1;

  // required - Bandwidth estimate (in bps) after the update.
  optional uint32 bitrate_bps = 2;

  enum DetectorState {
    BWE_UNKNOWN_STATE = 0;
    BWE_NORMAL = 1;
    BWE_UNDERUSING = 2;
    BWE_OVERUSING = 3;
  }
  optional DetectorState detector_state = 3;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 4;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes detector_state_deltas = 103;
}

// Maps RTP header extension names to numerical IDs.
message RtpHeaderExtensionConfig {
  // Optional IDs for the header extensions. Each ID is a 4-bit number that is
  // only set if that extension is configured.
  // TODO: Can we skip audio level?
  optional int32 transmission_time_offset_id = 1;
  optional int32 absolute_send_time_id = 2;
  optional int32 transport_sequence_number_id = 3;
  optional int32 video_rotation_id = 4;
  optional int32 audio_level_id = 5;
  // TODO(terelius): Add other header extensions like playout delay?
}

message VideoRecvStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) to be received.
  optional uint32 remote_ssrc = 2;

  // required - Sender SSRC used for sending RTCP (such as receiver reports).
  optional uint32 local_ssrc = 3;

  // optional - required if RTX is configured. SSRC for the RTX stream.
  optional uint32 rtx_ssrc = 4;

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 5;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message VideoSendStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) for outgoing stream.
  // When using simulcast, a separate config should be logged for each stream.
  optional uint32 ssrc = 2;

  // optional - required if RTX is configured. SSRC for the RTX stream.
  optional uint32 rtx_ssrc = 3;

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 4;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioRecvStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) to be received.
  optional uint32 remote_ssrc = 2;

  // required - Sender SSRC used for sending RTCP (such as receiver reports).
  optional uint32 local_ssrc = 3;

  // Field number 4 reserved for RTX SSRC.

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 5;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioSendStreamConfig {
  // required
  optional int64 timestamp_ms = 1;

  // required - Synchronization source (stream identifier) for outgoing stream.
  optional uint32 ssrc = 2;

  // Field number 3 reserved for RTX SSRC.

  // IDs for the header extension we care about. Only required if there are
  // header extensions configured.
  optional RtpHeaderExtensionConfig header_extensions = 4;

  // TODO(terelius): Do we need codec-payload mapping? If so and rtx_ssrc is
  // used, we also need a map between RTP payload type and RTX payload type.
}

message AudioNetworkAdaptations {
  // required
  optional int64 timestamp_ms = 1;

  // Bit rate that the audio encoder is operating at.
  // TODO(terelius): Signed vs unsigned?
  optional int32 bitrate_bps = 2;

  // Frame length that each encoded audio packet consists of.
  // TODO(terelius): Signed vs unsigned?
  optional int32 frame_length_ms = 3;

  // Packet loss fraction that the encoder's forward error correction (FEC) is
  // optimized for.
  // Instead of encoding a float, we encode a value between 0 and 16383, which
  // if divided by 16383, will give a value close to the original float.
  // The value 16383 (2^14 - 1) was chosen so that it would give good precision
  // on the one hand, and would be encodable with two bytes in varint form
  // on the other hand.
  optional uint32 uplink_packet_loss_fraction = 4;

  // Whether forward error correction (FEC) is turned on or off.
  optional bool enable_fec = 5;

  // Whether discontinuous transmission (DTX) is turned on or off.
  optional bool enable_dtx = 6;

  // Number of audio channels that each encoded packet consists of.
  optional uint32 num_channels = 7;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 8;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes bitrate_bps_deltas = 102;
  optional bytes frame_length_ms_deltas = 103;
  optional bytes uplink_packet_loss_fraction_deltas = 104;
  optional bytes enable_fec_deltas = 105;
  optional bytes enable_dtx_deltas = 106;
  optional bytes num_channels_deltas = 107;
}

message BweProbeCluster {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  // required - The bitrate in bps that this probe cluster is meant to probe.
  optional uint32 bitrate_bps = 3;

  // required - The minimum number of packets used to probe the given bitrate.
  optional uint32 min_packets = 4;

  // required - The minimum number of bytes used to probe the given bitrate.
  optional uint32 min_bytes = 5;
}

message BweProbeResultSuccess {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  // required - The resulting bitrate in bps.
  optional uint32 bitrate_bps = 3;
}

message BweProbeResultFailure {
  // required
  optional int64 timestamp_ms = 1;

  // required - The id of this probe cluster.
  optional uint32 id = 2;

  enum FailureReason {
    UNKNOWN = 0;
    INVALID_SEND_RECEIVE_INTERVAL = 1;
    INVALID_SEND_RECEIVE_RATIO = 2;
    TIMEOUT = 3;
  }

  // required
  optional FailureReason failure = 3;
}

message AlrState {
  // required
  optional int64 timestamp_ms = 1;

  // required - True if the send rate is application limited.
  optional bool in_alr = 2;
}

message IceCandidatePairConfig {
  enum IceCandidatePairConfigType {
    UNKNOWN_CONFIG_TYPE = 0;
    ADDED = 1;
    UPDATED = 2;
    DESTROYED = 3;
    SELECTED = 4;
  }

  enum IceCandidateType {
    UNKNOWN_CANDIDATE_TYPE = 0;
    LOCAL = 1;
    STUN = 2;
    PRFLX = 3;
    RELAY = 4;
  }

  enum Protocol {
    UNKNOWN_PROTOCOL = 0;
    UDP = 1;
    TCP = 2;
    SSLTCP = 3;
    TLS = 4;
  }

  enum AddressFamily {
    UNKNOWN_ADDRESS_FAMILY = 0;
    IPV4 = 1;
    IPV6 = 2;
  }

  enum NetworkType {
    UNKNOWN_NETWORK_TYPE = 0;
    ETHERNET = 1;
    WIFI = 2;
    CELLULAR = 3;
    VPN = 4;
    LOOPBACK = 5;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional IceCandidatePairConfigType config_type = 2;

  // required
  optional uint32 candidate_pair_id = 3;

  // required
  optional IceCandidateType local_candidate_type = 4;

  // required
  optional Protocol local_relay_protocol = 5;

  // required
  optional NetworkType local_network_type = 6;

  // required
  optional AddressFamily local_address_family = 7;

  // required
  optional IceCandidateType remote_candidate_type = 8;

  // required
  optional AddressFamily remote_address_family = 9;

  // required
  optional Protocol candidate_pair_protocol = 10;
}

message IceCandidatePairEvent {
  enum IceCandidatePairEventType {
    UNKNOWN_CHECK_TYPE = 0;
    CHECK_SENT = 1;
    CHECK_RECEIVED = 2;
    CHECK_RESPONSE_SENT = 3;
    CHECK_RESPONSE_RECEIVED = 4;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional IceCandidatePairEventType event_type = 2;

  // required
  optional uint32 candidate_pair_id = 3;

  // required
  optional uint32 transaction_id = 4;
}

message DtlsTransportStateEvent {
  enum DtlsTransportState {
    UNKNOWN_DTLS_TRANSPORT_STATE = 0;
    DTLS_TRANSPORT_NEW = 1;
    DTLS_TRANSPORT_CONNECTING = 2;
    DTLS_TRANSPORT_CONNECTED = 3;
    DTLS_TRANSPORT_CLOSED = 4;
    DTLS_TRANSPORT_FAILED = 5;
  }

  // required
  optional int64 timestamp_ms = 1;

  // required
  optional DtlsTransportState dtls_transport_state = 2;
}

message DtlsWritableState {
  // required
  optional int64 timestamp_ms = 1;

  // required
  optional bool writable = 2;
}

message RouteChange {
  // required
  optional int64 timestamp_ms = 1;
  // required - True if the route is ready for sending packets.
  optional bool connected = 2;
  // required - The per packet data overhead for this route.
  optional uint32 overhead = 3;
}

message RemoteEstimates {
  // required
  optional int64 timestamp_ms = 1;
  // optional - value used as a safe measure of available capacity.
  optional uint32 link_capacity_lower_kbps = 2;
  // optional - value used as limit for increasing bitrate.
  optional uint32 link_capacity_upper_kbps = 3;

  // optional - required if the batch contains delta encoded events.
  optional uint32 number_of_deltas = 4;

  // Delta encodings.
  optional bytes timestamp_ms_deltas = 101;
  optional bytes link_capacity_lower_kbps_deltas = 102;
  optional bytes link_capacity_upper_kbps_deltas = 103;
}
