summaryrefslogtreecommitdiffstats
path: root/remoting/proto/video.proto
blob: 963c1181640392c0b4085e9c2614a15aa713918a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// Copyright (c) 2010 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;

// A message that gets sent to the client after the client is connected to the
// host. It contains information that the client needs to know about the host.
// NEXT ID: 3
// TODO(sergeyu): Move to the control channel.
message InitClientMessage {
  required int32 width = 1;
  required int32 height = 2;
}

// Identifies the pixel format.
// Note that this list should match exactly the same as
// media::VideoFrame::Format in media/base/video_frame.h.
enum PixelFormat {
  PIXEL_FORMAT_INVALID = 0;
  PIXEL_FORMAT_RGB555 = 1;
  PIXEL_FORMAT_RGB565 = 2;
  PIXEL_FORMAT_RGB24 = 3;
  PIXEL_FORMAT_RGB32 = 4;
  PIXEL_FORMAT_RGBA = 5; 
  PIXEL_FORMAT_YV12 = 6;
  PIXEL_FORMAT_YV16 = 7;
  PIXEL_FORMAT_NV12 = 8;
  PIXEL_FORMAT_EMPTY = 9;
  PIXEL_FORMAT_ASCII = 10;
}

// TODO(ajwong): Determine if these fields should be optional or required.
message VideoPacketFormat {
  // Identifies how the image was encoded.
  enum Encoding {
    ENCODING_INVALID = -1;
    ENCODING_VERBATIM = 0;
    ENCODING_ZLIB = 1;
    ENCODING_VP8 = 2;
  };

  // X,Y coordinates (in screen pixels) for origin of this update.
  optional int32 x = 1;
  optional int32 y = 2;

  // Width, height (in screen pixels) for this update.
  optional int32 width = 3;
  optional int32 height = 4;

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

  // The pixel format of this image.
  optional PixelFormat pixel_format = 6 [default = PIXEL_FORMAT_RGB24];
}

message VideoPacket {
  // Bitmasks for use in the flags field below.
  //
  // The encoder may fragment one update into multiple packets depending on
  // how the encoder outputs data.  Thus, one update can logically consist of
  // multiple packets.  The FIRST_PACKET and LAST_PACKET flags are used to
  // indicate the start and end of a logical update.  Here are notable
  // consequences:
  //  * Both FIRST_PACKET and LAST_PACKET may be set if an update is only
  //    one packet long.
  //  * The VideoPacketFormat is only supplied in a FIRST_PACKET.
  //  * An local update cannot change format between a FIRST_PACKET and
  //    a LAST_PACKET.
  //  * All packets in one logical update must be processed in order, and
  //    packets may not be skipped.
  enum Flags {
    FIRST_PACKET = 1;
    LAST_PACKET = 2;
  }
  optional int32 flags = 1 [default = 0];

  // The sequence number of the partial data for updating a rectangle.
  optional int32 sequence_number = 2 [default = 0];

  optional int32 timestamp = 3 [default = 0];

  // This is provided on the first packet of the rectangle data, when
  // the flags has FIRST_PACKET set.
  optional VideoPacketFormat format = 4;

  optional bytes data = 5;
}