OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "remoting/host/chromoting_param_traits.h" | 5 #include "remoting/host/chromoting_param_traits.h" |
6 | 6 |
7 #include <stdint.h> | 7 #include <stdint.h> |
8 | 8 |
9 #include "base/strings/stringprintf.h" | 9 #include "base/strings/stringprintf.h" |
10 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" | 10 #include "third_party/webrtc/modules/desktop_capture/desktop_frame.h" |
11 | 11 |
12 namespace IPC { | 12 namespace IPC { |
13 | 13 |
14 // static | 14 // static |
15 void ParamTraits<webrtc::DesktopVector>::Write(Message* m, | 15 void ParamTraits<webrtc::DesktopVector>::Write(base::Pickle* m, |
16 const webrtc::DesktopVector& p) { | 16 const webrtc::DesktopVector& p) { |
17 m->WriteInt(p.x()); | 17 m->WriteInt(p.x()); |
18 m->WriteInt(p.y()); | 18 m->WriteInt(p.y()); |
19 } | 19 } |
20 | 20 |
21 // static | 21 // static |
22 bool ParamTraits<webrtc::DesktopVector>::Read(const Message* m, | 22 bool ParamTraits<webrtc::DesktopVector>::Read(const base::Pickle* m, |
23 base::PickleIterator* iter, | 23 base::PickleIterator* iter, |
24 webrtc::DesktopVector* r) { | 24 webrtc::DesktopVector* r) { |
25 int x, y; | 25 int x, y; |
26 if (!iter->ReadInt(&x) || !iter->ReadInt(&y)) | 26 if (!iter->ReadInt(&x) || !iter->ReadInt(&y)) |
27 return false; | 27 return false; |
28 *r = webrtc::DesktopVector(x, y); | 28 *r = webrtc::DesktopVector(x, y); |
29 return true; | 29 return true; |
30 } | 30 } |
31 | 31 |
32 // static | 32 // static |
33 void ParamTraits<webrtc::DesktopVector>::Log(const webrtc::DesktopVector& p, | 33 void ParamTraits<webrtc::DesktopVector>::Log(const webrtc::DesktopVector& p, |
34 std::string* l) { | 34 std::string* l) { |
35 l->append(base::StringPrintf("webrtc::DesktopVector(%d, %d)", | 35 l->append(base::StringPrintf("webrtc::DesktopVector(%d, %d)", |
36 p.x(), p.y())); | 36 p.x(), p.y())); |
37 } | 37 } |
38 | 38 |
39 // static | 39 // static |
40 void ParamTraits<webrtc::DesktopSize>::Write(Message* m, | 40 void ParamTraits<webrtc::DesktopSize>::Write(base::Pickle* m, |
41 const webrtc::DesktopSize& p) { | 41 const webrtc::DesktopSize& p) { |
42 m->WriteInt(p.width()); | 42 m->WriteInt(p.width()); |
43 m->WriteInt(p.height()); | 43 m->WriteInt(p.height()); |
44 } | 44 } |
45 | 45 |
46 // static | 46 // static |
47 bool ParamTraits<webrtc::DesktopSize>::Read(const Message* m, | 47 bool ParamTraits<webrtc::DesktopSize>::Read(const base::Pickle* m, |
48 base::PickleIterator* iter, | 48 base::PickleIterator* iter, |
49 webrtc::DesktopSize* r) { | 49 webrtc::DesktopSize* r) { |
50 int width, height; | 50 int width, height; |
51 if (!iter->ReadInt(&width) || !iter->ReadInt(&height)) | 51 if (!iter->ReadInt(&width) || !iter->ReadInt(&height)) |
52 return false; | 52 return false; |
53 *r = webrtc::DesktopSize(width, height); | 53 *r = webrtc::DesktopSize(width, height); |
54 return true; | 54 return true; |
55 } | 55 } |
56 | 56 |
57 // static | 57 // static |
58 void ParamTraits<webrtc::DesktopSize>::Log(const webrtc::DesktopSize& p, | 58 void ParamTraits<webrtc::DesktopSize>::Log(const webrtc::DesktopSize& p, |
59 std::string* l) { | 59 std::string* l) { |
60 l->append(base::StringPrintf("webrtc::DesktopSize(%d, %d)", | 60 l->append(base::StringPrintf("webrtc::DesktopSize(%d, %d)", |
61 p.width(), p.height())); | 61 p.width(), p.height())); |
62 } | 62 } |
63 | 63 |
64 // static | 64 // static |
65 void ParamTraits<webrtc::DesktopRect>::Write(Message* m, | 65 void ParamTraits<webrtc::DesktopRect>::Write(base::Pickle* m, |
66 const webrtc::DesktopRect& p) { | 66 const webrtc::DesktopRect& p) { |
67 m->WriteInt(p.left()); | 67 m->WriteInt(p.left()); |
68 m->WriteInt(p.top()); | 68 m->WriteInt(p.top()); |
69 m->WriteInt(p.right()); | 69 m->WriteInt(p.right()); |
70 m->WriteInt(p.bottom()); | 70 m->WriteInt(p.bottom()); |
71 } | 71 } |
72 | 72 |
73 // static | 73 // static |
74 bool ParamTraits<webrtc::DesktopRect>::Read(const Message* m, | 74 bool ParamTraits<webrtc::DesktopRect>::Read(const base::Pickle* m, |
75 base::PickleIterator* iter, | 75 base::PickleIterator* iter, |
76 webrtc::DesktopRect* r) { | 76 webrtc::DesktopRect* r) { |
77 int left, right, top, bottom; | 77 int left, right, top, bottom; |
78 if (!iter->ReadInt(&left) || !iter->ReadInt(&top) || | 78 if (!iter->ReadInt(&left) || !iter->ReadInt(&top) || |
79 !iter->ReadInt(&right) || !iter->ReadInt(&bottom)) { | 79 !iter->ReadInt(&right) || !iter->ReadInt(&bottom)) { |
80 return false; | 80 return false; |
81 } | 81 } |
82 *r = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); | 82 *r = webrtc::DesktopRect::MakeLTRB(left, top, right, bottom); |
83 return true; | 83 return true; |
84 } | 84 } |
85 | 85 |
86 // static | 86 // static |
87 void ParamTraits<webrtc::DesktopRect>::Log(const webrtc::DesktopRect& p, | 87 void ParamTraits<webrtc::DesktopRect>::Log(const webrtc::DesktopRect& p, |
88 std::string* l) { | 88 std::string* l) { |
89 l->append(base::StringPrintf("webrtc::DesktopRect(%d, %d, %d, %d)", | 89 l->append(base::StringPrintf("webrtc::DesktopRect(%d, %d, %d, %d)", |
90 p.left(), p.top(), p.right(), p.bottom())); | 90 p.left(), p.top(), p.right(), p.bottom())); |
91 } | 91 } |
92 | 92 |
93 // static | 93 // static |
94 void ParamTraits<webrtc::MouseCursor>::Write( | 94 void ParamTraits<webrtc::MouseCursor>::Write(base::Pickle* m, |
95 Message* m, | 95 const webrtc::MouseCursor& p) { |
96 const webrtc::MouseCursor& p) { | |
97 ParamTraits<webrtc::DesktopSize>::Write(m, p.image()->size()); | 96 ParamTraits<webrtc::DesktopSize>::Write(m, p.image()->size()); |
98 | 97 |
99 // Data is serialized in such a way that size is exactly width * height * | 98 // Data is serialized in such a way that size is exactly width * height * |
100 // |kBytesPerPixel|. | 99 // |kBytesPerPixel|. |
101 std::string data; | 100 std::string data; |
102 uint8_t* current_row = p.image()->data(); | 101 uint8_t* current_row = p.image()->data(); |
103 for (int y = 0; y < p.image()->size().height(); ++y) { | 102 for (int y = 0; y < p.image()->size().height(); ++y) { |
104 data.append(current_row, | 103 data.append(current_row, |
105 current_row + p.image()->size().width() * | 104 current_row + p.image()->size().width() * |
106 webrtc::DesktopFrame::kBytesPerPixel); | 105 webrtc::DesktopFrame::kBytesPerPixel); |
107 current_row += p.image()->stride(); | 106 current_row += p.image()->stride(); |
108 } | 107 } |
109 m->WriteData(reinterpret_cast<const char*>(p.image()->data()), data.size()); | 108 m->WriteData(reinterpret_cast<const char*>(p.image()->data()), data.size()); |
110 | 109 |
111 ParamTraits<webrtc::DesktopVector>::Write(m, p.hotspot()); | 110 ParamTraits<webrtc::DesktopVector>::Write(m, p.hotspot()); |
112 } | 111 } |
113 | 112 |
114 // static | 113 // static |
115 bool ParamTraits<webrtc::MouseCursor>::Read(const Message* m, | 114 bool ParamTraits<webrtc::MouseCursor>::Read(const base::Pickle* m, |
116 base::PickleIterator* iter, | 115 base::PickleIterator* iter, |
117 webrtc::MouseCursor* r) { | 116 webrtc::MouseCursor* r) { |
118 webrtc::DesktopSize size; | 117 webrtc::DesktopSize size; |
119 if (!ParamTraits<webrtc::DesktopSize>::Read(m, iter, &size) || | 118 if (!ParamTraits<webrtc::DesktopSize>::Read(m, iter, &size) || |
120 size.width() <= 0 || size.width() > (SHRT_MAX / 2) || | 119 size.width() <= 0 || size.width() > (SHRT_MAX / 2) || |
121 size.height() <= 0 || size.height() > (SHRT_MAX / 2)) { | 120 size.height() <= 0 || size.height() > (SHRT_MAX / 2)) { |
122 return false; | 121 return false; |
123 } | 122 } |
124 | 123 |
125 const int expected_length = | 124 const int expected_length = |
(...skipping 22 matching lines...) Expand all Loading... |
148 std::string* l) { | 147 std::string* l) { |
149 l->append(base::StringPrintf( | 148 l->append(base::StringPrintf( |
150 "webrtc::DesktopRect{image(%d, %d), hotspot(%d, %d)}", | 149 "webrtc::DesktopRect{image(%d, %d), hotspot(%d, %d)}", |
151 p.image()->size().width(), p.image()->size().height(), | 150 p.image()->size().width(), p.image()->size().height(), |
152 p.hotspot().x(), p.hotspot().y())); | 151 p.hotspot().x(), p.hotspot().y())); |
153 } | 152 } |
154 | 153 |
155 | 154 |
156 // static | 155 // static |
157 void ParamTraits<remoting::ScreenResolution>::Write( | 156 void ParamTraits<remoting::ScreenResolution>::Write( |
158 Message* m, | 157 base::Pickle* m, |
159 const remoting::ScreenResolution& p) { | 158 const remoting::ScreenResolution& p) { |
160 ParamTraits<webrtc::DesktopSize>::Write(m, p.dimensions()); | 159 ParamTraits<webrtc::DesktopSize>::Write(m, p.dimensions()); |
161 ParamTraits<webrtc::DesktopVector>::Write(m, p.dpi()); | 160 ParamTraits<webrtc::DesktopVector>::Write(m, p.dpi()); |
162 } | 161 } |
163 | 162 |
164 // static | 163 // static |
165 bool ParamTraits<remoting::ScreenResolution>::Read( | 164 bool ParamTraits<remoting::ScreenResolution>::Read( |
166 const Message* m, | 165 const base::Pickle* m, |
167 base::PickleIterator* iter, | 166 base::PickleIterator* iter, |
168 remoting::ScreenResolution* r) { | 167 remoting::ScreenResolution* r) { |
169 webrtc::DesktopSize size; | 168 webrtc::DesktopSize size; |
170 webrtc::DesktopVector dpi; | 169 webrtc::DesktopVector dpi; |
171 if (!ParamTraits<webrtc::DesktopSize>::Read(m, iter, &size) || | 170 if (!ParamTraits<webrtc::DesktopSize>::Read(m, iter, &size) || |
172 !ParamTraits<webrtc::DesktopVector>::Read(m, iter, &dpi)) { | 171 !ParamTraits<webrtc::DesktopVector>::Read(m, iter, &dpi)) { |
173 return false; | 172 return false; |
174 } | 173 } |
175 if (size.width() < 0 || size.height() < 0 || | 174 if (size.width() < 0 || size.height() < 0 || |
176 dpi.x() < 0 || dpi.y() < 0) { | 175 dpi.x() < 0 || dpi.y() < 0) { |
177 return false; | 176 return false; |
178 } | 177 } |
179 *r = remoting::ScreenResolution(size, dpi); | 178 *r = remoting::ScreenResolution(size, dpi); |
180 return true; | 179 return true; |
181 } | 180 } |
182 | 181 |
183 // static | 182 // static |
184 void ParamTraits<remoting::ScreenResolution>::Log( | 183 void ParamTraits<remoting::ScreenResolution>::Log( |
185 const remoting::ScreenResolution& p, | 184 const remoting::ScreenResolution& p, |
186 std::string* l) { | 185 std::string* l) { |
187 l->append(base::StringPrintf("webrtc::ScreenResolution(%d, %d, %d, %d)", | 186 l->append(base::StringPrintf("webrtc::ScreenResolution(%d, %d, %d, %d)", |
188 p.dimensions().width(), p.dimensions().height(), | 187 p.dimensions().width(), p.dimensions().height(), |
189 p.dpi().x(), p.dpi().y())); | 188 p.dpi().x(), p.dpi().y())); |
190 } | 189 } |
191 | 190 |
192 } // namespace IPC | 191 } // namespace IPC |
193 | 192 |
OLD | NEW |