// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// Protocol for video messages.

syntax = "proto2";

option optimize_for = LITE_RUNTIME;

package remoting;

message VideoPacketFormat {
  // Reserved fields IDs used for removed fields: 1 to 4.

  // Identifies how the image was encoded.
  enum Encoding {
    ENCODING_INVALID = -1;
    ENCODING_VERBATIM = 0;
    ENCODING_ZLIB = 1;
    ENCODING_VP8 = 2;
    ENCODING_VP9 = 3;
  };

  // The encoding used for this image update.
  optional Encoding encoding = 5 [default = ENCODING_INVALID];

  // Width and height of the whole screen.
  optional int32 screen_width = 6;
  optional int32 screen_height = 7;

  // Horizontal and vertical DPI of the screen. If either of these is zero or
  // unset, the corresponding DPI should be assumed to be 96 (Windows' default)
  optional int32 x_dpi = 8;
  optional int32 y_dpi = 9;
}

message Rect {
  optional int32 x = 1;
  optional int32 y = 2;
  optional int32 width = 3;
  optional int32 height = 4;
}

message VideoPacket {
  // Reserved fields IDs used for removed fields: 1 to 3, 10, 11.

  optional VideoPacketFormat format = 4;

  optional bytes data = 5;

  // List of rectangles updated by this frame.
  repeated Rect dirty_rects = 6;

  // Time in milliseconds spent in capturing this video frame.
  optional int64 capture_time_ms = 7;

  // Time in milliseconds spent in encoding this video frame.
  optional int64 encode_time_ms = 8;

  // The client's timestamp of the latest event received by the host before
  // starting to capture this video frame.
  optional int64 latest_event_timestamp = 9;

  // Optional frame timestamp. Used in tests to estimate frame latency.
  optional int64 timestamp = 12;

  // Frame identifier used to match VideoFrame and VideoAck.
  optional int32 frame_id = 13;

  // Time from when the last event was received until capturing has started.
  optional int64 capture_pending_time_ms = 14;

  // Total overhead time for IPC and threading when capturing frames.
  optional int64 capture_overhead_time_ms = 15;

  // Time between when the frame was captured and when encoder started encoding
  // it.
  optional int64 encode_pending_time_ms = 16;

  // Time for which the frame is blocked until it's sent to the client.
  optional int64 send_pending_time_ms = 17;

  // Indicates whether the encoded frame is a key frame.
  optional bool key_frame = 18;
}

// VideoAck acknowledges that the frame in the VideoPacket with the same
// frame_id has been rendered. VideoAck messages must be sent only for frames
// that have frame_id field set. They must be sent the same order in which
// the corresponding VideoPackets were received.
message VideoAck {
  // Frame ID.
  optional int32 frame_id = 1;
}
