// 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, 12.

  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;

  // 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;
}

// 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;
}
