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


enum MediaType {
  ANY = 0;
  AUDIO = 1;
  VIDEO = 2;
  DATA = 3;
}


// This is the main message to dump to a file, it can contain multiple event
// messages, but it is possible to append multiple EventStreams (each with a
// single event) to a file.
// This has the benefit that there's no need to keep all data in memory.
message EventStream {
  repeated Event stream = 1;
}


message Event {
  // required - Elapsed wallclock time in us since the start of the log.
  optional int64 timestamp_us = 1;

  // The different types of events that can occur, the UNKNOWN_EVENT entry
  // is added in case future EventTypes are added, in that case old code will
  // receive the new events as UNKNOWN_EVENT.
  enum EventType {
    UNKNOWN_EVENT = 0;
    RTP_EVENT = 1;
    RTCP_EVENT = 2;
    DEBUG_EVENT = 3;
    VIDEO_RECEIVER_CONFIG_EVENT = 4;
    VIDEO_SENDER_CONFIG_EVENT = 5;
    AUDIO_RECEIVER_CONFIG_EVENT = 6;
    AUDIO_SENDER_CONFIG_EVENT = 7;
  }

  // required - Indicates the type of this event
  optional EventType type = 2;

  // optional - but required if type == RTP_EVENT
  optional RtpPacket rtp_packet = 3;

  // optional - but required if type == RTCP_EVENT
  optional RtcpPacket rtcp_packet = 4;

  // optional - but required if type == DEBUG_EVENT
  optional DebugEvent debug_event = 5;

  // optional - but required if type == VIDEO_RECEIVER_CONFIG_EVENT
  optional VideoReceiveConfig video_receiver_config = 6;

  // optional - but required if type == VIDEO_SENDER_CONFIG_EVENT
  optional VideoSendConfig video_sender_config = 7;

  // optional - but required if type == AUDIO_RECEIVER_CONFIG_EVENT
  optional AudioReceiveConfig audio_receiver_config = 8;

  // optional - but required if type == AUDIO_SENDER_CONFIG_EVENT
  optional AudioSendConfig audio_sender_config = 9;
}


message RtpPacket {
  // required - True if the packet is incoming w.r.t. the user logging the data
  optional bool incoming = 1;

  // required
  optional MediaType type = 2;

  // required - The size of the packet including both payload and header.
  optional uint32 packet_length = 3;

  // required - The RTP header only.
  optional bytes header = 4;

  // Do not add code to log user payload data without a privacy review!
}


message RtcpPacket {
  // required - True if the packet is incoming w.r.t. the user logging the data
  optional bool incoming = 1;

  // required
  optional MediaType type = 2;

  // required - The whole packet including both payload and header.
  optional bytes packet_data = 3;
}


message DebugEvent {
  // Indicates the type of the debug event.
  // LOG_START and LOG_END indicate the start and end of the log respectively.
  // AUDIO_PLAYOUT indicates a call to the PlayoutData10Ms() function in ACM.
  enum EventType {
    UNKNOWN_EVENT = 0;
    LOG_START = 1;
    LOG_END = 2;
    AUDIO_PLAYOUT = 3;
  }

  // required
  optional EventType type = 1;
}


// TODO(terelius): Video and audio streams could in principle share SSRC,
// so identifying a stream based only on SSRC might not work.
// It might be better to use a combination of SSRC and media type
// or SSRC and port number, but for now we will rely on SSRC only.
message VideoReceiveConfig {
  // required - Synchronization source (stream identifier) to be received.
  optional uint32 remote_ssrc = 1;
  // required - Sender SSRC used for sending RTCP (such as receiver reports).
  optional uint32 local_ssrc = 2;

  // Compound mode is described by RFC 4585 and reduced-size
  // RTCP mode is described by RFC 5506.
  enum RtcpMode {
    RTCP_COMPOUND = 1;
    RTCP_REDUCEDSIZE = 2;
  }
  // required - RTCP mode to use.
  optional RtcpMode rtcp_mode = 3;

  // required - Extended RTCP settings.
  optional bool receiver_reference_time_report = 4;

  // required - Receiver estimated maximum bandwidth.
  optional bool remb = 5;

  // Map from video RTP payload type -> RTX config.
  repeated RtxMap rtx_map = 6;

  // RTP header extensions used for the received stream.
  repeated RtpHeaderExtension header_extensions = 7;

  // List of decoders associated with the stream.
  repeated DecoderConfig decoders = 8;
}


// Maps decoder names to payload types.
message DecoderConfig {
  // required
  optional string name = 1;

  // required
  optional sint32 payload_type = 2;
}


// Maps RTP header extension names to numerical IDs.
message RtpHeaderExtension {
  // required
  optional string name = 1;

  // required
  optional sint32 id = 2;
}


// RTX settings for incoming video payloads that may be received.
// RTX is disabled if there's no config present.
message RtxConfig {
  // required - SSRC to use for the RTX stream.
  optional uint32 rtx_ssrc = 1;

  // required - Payload type to use for the RTX stream.
  optional sint32 rtx_payload_type = 2;
}


message RtxMap {
  // required
  optional sint32 payload_type = 1;

  // required
  optional RtxConfig config = 2;
}


message VideoSendConfig {
  // Synchronization source (stream identifier) for outgoing stream.
  // One stream can have several ssrcs for e.g. simulcast.
  // At least one ssrc is required.
  repeated uint32 ssrcs = 1;

  // RTP header extensions used for the outgoing stream.
  repeated RtpHeaderExtension header_extensions = 2;

  // List of SSRCs for retransmitted packets.
  repeated uint32 rtx_ssrcs = 3;

  // required if rtx_ssrcs is used - Payload type for retransmitted packets.
  optional sint32 rtx_payload_type = 4;

  // required - Canonical end-point identifier.
  optional string c_name = 5;

  // required - Encoder associated with the stream.
  optional EncoderConfig encoder = 6;
}


// Maps encoder names to payload types.
message EncoderConfig {
  // required
  optional string name = 1;

  // required
  optional sint32 payload_type = 2;
}


message AudioReceiveConfig {
  // TODO(terelius): Add audio-receive config.
}


message AudioSendConfig {
  // TODO(terelius): Add audio-receive config.
}
