OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 <deque> | 5 #include <deque> |
6 #include <stdlib.h> | 6 #include <stdlib.h> |
7 | 7 |
8 #include "gfx/rect.h" | 8 #include "gfx/rect.h" |
9 #include "media/base/video_frame.h" | 9 #include "media/base/video_frame.h" |
10 #include "remoting/base/codec_test.h" | 10 #include "remoting/base/codec_test.h" |
(...skipping 11 matching lines...) Expand all Loading... |
22 static const gfx::Rect kTestRects[] = { | 22 static const gfx::Rect kTestRects[] = { |
23 gfx::Rect(0, 0, kWidth, kHeight), | 23 gfx::Rect(0, 0, kWidth, kHeight), |
24 gfx::Rect(0, 0, kWidth / 2, kHeight / 2), | 24 gfx::Rect(0, 0, kWidth / 2, kHeight / 2), |
25 gfx::Rect(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2), | 25 gfx::Rect(kWidth / 2, kHeight / 2, kWidth / 2, kHeight / 2), |
26 gfx::Rect(16, 16, 16, 16), | 26 gfx::Rect(16, 16, 16, 16), |
27 gfx::Rect(128, 64, 32, 32), | 27 gfx::Rect(128, 64, 32, 32), |
28 }; | 28 }; |
29 | 29 |
30 namespace remoting { | 30 namespace remoting { |
31 | 31 |
| 32 // A class to test that the state transition of the Encoder is correct. |
| 33 class EncoderStateTester { |
| 34 public: |
| 35 EncoderStateTester() |
| 36 : next_state_(Encoder::EncodingStarting) { |
| 37 } |
| 38 |
| 39 ~EncoderStateTester() { |
| 40 EXPECT_EQ(Encoder::EncodingStarting, next_state_); |
| 41 } |
| 42 |
| 43 // Set the state output of the Encoder. |
| 44 void ReceivedState(Encoder::EncodingState state) { |
| 45 if (state & Encoder::EncodingStarting) { |
| 46 EXPECT_EQ(Encoder::EncodingStarting, next_state_); |
| 47 next_state_ = Encoder::EncodingInProgress | Encoder::EncodingEnded; |
| 48 } else { |
| 49 EXPECT_FALSE(next_state_ & Encoder::EncodingStarting); |
| 50 } |
| 51 |
| 52 if (state & Encoder::EncodingInProgress) { |
| 53 EXPECT_TRUE(next_state_ & Encoder::EncodingInProgress); |
| 54 } |
| 55 |
| 56 if (state & Encoder::EncodingEnded) { |
| 57 EXPECT_TRUE(next_state_ & Encoder::EncodingEnded); |
| 58 next_state_ = Encoder::EncodingStarting; |
| 59 } |
| 60 } |
| 61 |
| 62 private: |
| 63 Encoder::EncodingState next_state_; |
| 64 |
| 65 DISALLOW_COPY_AND_ASSIGN(EncoderStateTester); |
| 66 }; |
| 67 |
32 // A class to test the message output of the encoder. | 68 // A class to test the message output of the encoder. |
33 class EncoderMessageTester { | 69 class EncoderMessageTester { |
34 public: | 70 public: |
35 EncoderMessageTester() | 71 EncoderMessageTester() |
36 : begin_rect_(0), | 72 : begin_rect_(0), |
37 rect_data_(0), | 73 rect_data_(0), |
38 end_rect_(0), | 74 end_rect_(0), |
39 added_rects_(0), | 75 added_rects_(0), |
40 state_(kWaitingForBeginRect), | 76 state_(kWaitingForBeginRect), |
41 strict_(false) { | 77 strict_(false) { |
42 } | 78 } |
43 | 79 |
44 ~EncoderMessageTester() { | 80 ~EncoderMessageTester() { |
45 EXPECT_EQ(begin_rect_, end_rect_); | 81 EXPECT_EQ(begin_rect_, end_rect_); |
46 EXPECT_GT(begin_rect_, 0); | 82 EXPECT_GT(begin_rect_, 0); |
47 EXPECT_EQ(kWaitingForBeginRect, state_); | 83 EXPECT_EQ(kWaitingForBeginRect, state_); |
48 if (strict_) { | 84 if (strict_) { |
49 EXPECT_EQ(added_rects_, begin_rect_); | 85 EXPECT_EQ(added_rects_, begin_rect_); |
50 } | 86 } |
51 } | 87 } |
52 | 88 |
53 // Test that we received the correct packet. | 89 // Test that we received the correct message. |
54 void ReceivedPacket(VideoPacket* packet) { | 90 void ReceivedMessage(ChromotingHostMessage* message) { |
| 91 EXPECT_TRUE(message->has_update_stream_packet()); |
| 92 |
55 if (state_ == kWaitingForBeginRect) { | 93 if (state_ == kWaitingForBeginRect) { |
56 EXPECT_TRUE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); | 94 EXPECT_TRUE(message->update_stream_packet().has_begin_rect()); |
57 state_ = kWaitingForRectData; | 95 state_ = kWaitingForRectData; |
58 ++begin_rect_; | 96 ++begin_rect_; |
59 | 97 |
60 if (strict_) { | 98 if (strict_) { |
61 gfx::Rect rect = rects_.front(); | 99 gfx::Rect rect = rects_.front(); |
62 rects_.pop_front(); | 100 rects_.pop_front(); |
63 EXPECT_EQ(rect.x(), packet->format().x()); | 101 EXPECT_EQ(rect.x(), message->update_stream_packet().begin_rect().x()); |
64 EXPECT_EQ(rect.y(), packet->format().y()); | 102 EXPECT_EQ(rect.y(), message->update_stream_packet().begin_rect().y()); |
65 EXPECT_EQ(rect.width(), packet->format().width()); | 103 EXPECT_EQ(rect.width(), |
66 EXPECT_EQ(rect.height(), packet->format().height()); | 104 message->update_stream_packet().begin_rect().width()); |
| 105 EXPECT_EQ(rect.height(), |
| 106 message->update_stream_packet().begin_rect().height()); |
67 } | 107 } |
68 } else { | 108 } else { |
69 EXPECT_FALSE((packet->flags() & VideoPacket::FIRST_PACKET) != 0); | 109 EXPECT_FALSE(message->update_stream_packet().has_begin_rect()); |
70 } | 110 } |
71 | 111 |
72 if (state_ == kWaitingForRectData) { | 112 if (state_ == kWaitingForRectData) { |
73 if (packet->has_data()) { | 113 if (message->update_stream_packet().has_rect_data()) { |
74 ++rect_data_; | 114 ++rect_data_; |
75 } | 115 } |
76 | 116 |
77 if ((packet->flags() & VideoPacket::LAST_PACKET) != 0) { | 117 if (message->update_stream_packet().has_end_rect()) { |
78 // Expect that we have received some data. | 118 // Expect that we have received some data. |
79 EXPECT_GT(rect_data_, 0); | 119 EXPECT_GT(rect_data_, 0); |
80 rect_data_ = 0; | 120 rect_data_ = 0; |
81 state_ = kWaitingForBeginRect; | 121 state_ = kWaitingForBeginRect; |
82 ++end_rect_; | 122 ++end_rect_; |
83 } | 123 } |
84 } | 124 } |
85 } | 125 } |
86 | 126 |
87 void set_strict(bool strict) { | 127 void set_strict(bool strict) { |
(...skipping 20 matching lines...) Expand all Loading... |
108 | 148 |
109 std::deque<gfx::Rect> rects_; | 149 std::deque<gfx::Rect> rects_; |
110 | 150 |
111 DISALLOW_COPY_AND_ASSIGN(EncoderMessageTester); | 151 DISALLOW_COPY_AND_ASSIGN(EncoderMessageTester); |
112 }; | 152 }; |
113 | 153 |
114 class DecoderTester { | 154 class DecoderTester { |
115 public: | 155 public: |
116 DecoderTester(Decoder* decoder) | 156 DecoderTester(Decoder* decoder) |
117 : strict_(false), | 157 : strict_(false), |
118 decoder_(decoder) { | 158 decoder_(decoder), |
| 159 decode_done_(false) { |
119 media::VideoFrame::CreateFrame(media::VideoFrame::RGB32, | 160 media::VideoFrame::CreateFrame(media::VideoFrame::RGB32, |
120 kWidth, kHeight, | 161 kWidth, kHeight, |
121 base::TimeDelta(), | 162 base::TimeDelta(), |
122 base::TimeDelta(), &frame_); | 163 base::TimeDelta(), &frame_); |
123 EXPECT_TRUE(frame_.get()); | 164 EXPECT_TRUE(frame_.get()); |
124 decoder_->Initialize(frame_); | |
125 } | 165 } |
126 | 166 |
127 void Reset() { | 167 void ReceivedMessage(ChromotingHostMessage* message) { |
128 rects_.clear(); | 168 if (message->has_update_stream_packet()) { |
129 update_rects_.clear(); | 169 EXPECT_TRUE(decoder_->PartialDecode(message)); |
130 } | 170 return; |
| 171 } |
131 | 172 |
132 void ReceivedPacket(VideoPacket* packet) { | 173 if (message->has_begin_update_stream()) { |
133 Decoder::DecodeResult result = decoder_->DecodePacket(packet); | 174 EXPECT_TRUE(decoder_->BeginDecode( |
| 175 frame_, &update_rects_, |
| 176 NewRunnableMethod(this, &DecoderTester::OnPartialDecodeDone), |
| 177 NewRunnableMethod(this, &DecoderTester::OnDecodeDone))); |
| 178 } |
134 | 179 |
135 ASSERT_NE(Decoder::DECODE_ERROR, result); | 180 if (message->has_end_update_stream()) { |
136 | 181 decoder_->EndDecode(); |
137 if (result == Decoder::DECODE_DONE) { | |
138 decoder_->GetUpdatedRects(&update_rects_); | |
139 } | 182 } |
| 183 delete message; |
140 } | 184 } |
141 | 185 |
142 void set_strict(bool strict) { | 186 void set_strict(bool strict) { |
143 strict_ = strict; | 187 strict_ = strict; |
144 } | 188 } |
145 | 189 |
146 void set_capture_data(scoped_refptr<CaptureData> data) { | 190 void set_capture_data(scoped_refptr<CaptureData> data) { |
147 capture_data_ = data; | 191 capture_data_ = data; |
148 } | 192 } |
149 | 193 |
150 void AddRects(const gfx::Rect* rects, int count) { | 194 void AddRects(const gfx::Rect* rects, int count) { |
151 rects_.insert(rects_.begin() + rects_.size(), rects, rects + count); | 195 rects_.insert(rects_.begin() + rects_.size(), rects, rects + count); |
152 } | 196 } |
153 | 197 |
154 void VerifyResults() { | 198 bool decode_done() const { return decode_done_; } |
| 199 void reset_decode_done() { decode_done_ = false; } |
| 200 |
| 201 private: |
| 202 void OnPartialDecodeDone() { |
155 if (!strict_) | 203 if (!strict_) |
156 return; | 204 return; |
157 | 205 |
158 ASSERT_TRUE(capture_data_.get()); | |
159 | |
160 // Test the content of the update rect. | 206 // Test the content of the update rect. |
161 ASSERT_EQ(rects_.size(), update_rects_.size()); | |
162 for (size_t i = 0; i < update_rects_.size(); ++i) { | 207 for (size_t i = 0; i < update_rects_.size(); ++i) { |
163 gfx::Rect rect = rects_[i]; | 208 EXPECT_FALSE(rects_.empty()); |
| 209 gfx::Rect rect = rects_.front(); |
| 210 rects_.pop_front(); |
164 EXPECT_EQ(rect, update_rects_[i]); | 211 EXPECT_EQ(rect, update_rects_[i]); |
165 | 212 |
166 EXPECT_EQ(frame_->stride(0), capture_data_->data_planes().strides[0]); | 213 EXPECT_EQ(frame_->stride(0), capture_data_->data_planes().strides[0]); |
167 const int stride = frame_->stride(0); | 214 const int stride = frame_->stride(0); |
168 const int offset = stride * update_rects_[i].y() + | 215 const int offset = stride * update_rects_[i].y() + |
169 kBytesPerPixel * update_rects_[i].x(); | 216 kBytesPerPixel * update_rects_[i].x(); |
170 const uint8* original = capture_data_->data_planes().data[0] + offset; | 217 const uint8* original = capture_data_->data_planes().data[0] + offset; |
171 const uint8* decoded = frame_->data(0) + offset; | 218 const uint8* decoded = frame_->data(0) + offset; |
172 const int row_size = kBytesPerPixel * update_rects_[i].width(); | 219 const int row_size = kBytesPerPixel * update_rects_[i].width(); |
173 for (int y = 0; y < update_rects_[i].height(); ++y) { | 220 for (int y = 0; y < update_rects_[i].height(); ++y) { |
174 EXPECT_EQ(0, memcmp(original, decoded, row_size)) | 221 EXPECT_EQ(0, memcmp(original, decoded, row_size)) |
175 << "Row " << y << " is different"; | 222 << "Row " << y << " is different"; |
176 original += stride; | 223 original += stride; |
177 decoded += stride; | 224 decoded += stride; |
178 } | 225 } |
179 } | 226 } |
180 } | 227 } |
181 | 228 |
182 private: | 229 void OnDecodeDone() { |
| 230 decode_done_ = true; |
| 231 if (!strict_) |
| 232 return; |
| 233 |
| 234 EXPECT_TRUE(capture_data_.get()); |
| 235 for (int i = 0; i < DataPlanes::kPlaneCount; ++i) { |
| 236 if (!frame_->data(i) || !capture_data_->data_planes().data[i]) |
| 237 continue; |
| 238 // TODO(hclam): HAndle YUV. |
| 239 int size = capture_data_->data_planes().strides[i] * kHeight; |
| 240 EXPECT_EQ(0, memcmp(capture_data_->data_planes().data[i], |
| 241 frame_->data(i), size)); |
| 242 } |
| 243 } |
| 244 |
183 bool strict_; | 245 bool strict_; |
184 std::deque<gfx::Rect> rects_; | 246 std::deque<gfx::Rect> rects_; |
185 UpdatedRects update_rects_; | 247 UpdatedRects update_rects_; |
186 Decoder* decoder_; | 248 Decoder* decoder_; |
187 scoped_refptr<media::VideoFrame> frame_; | 249 scoped_refptr<media::VideoFrame> frame_; |
188 scoped_refptr<CaptureData> capture_data_; | 250 scoped_refptr<CaptureData> capture_data_; |
| 251 bool decode_done_; |
189 | 252 |
190 DISALLOW_COPY_AND_ASSIGN(DecoderTester); | 253 DISALLOW_COPY_AND_ASSIGN(DecoderTester); |
191 }; | 254 }; |
192 | 255 |
193 // The EncoderTester provides a hook for retrieving the data, and passing the | 256 // The EncoderTester provides a hook for retrieving the data, and passing the |
194 // message to other subprograms for validaton. | 257 // message to other subprograms for validaton. |
195 class EncoderTester { | 258 class EncoderTester { |
196 public: | 259 public: |
197 EncoderTester(EncoderMessageTester* message_tester) | 260 EncoderTester(EncoderMessageTester* message_tester, |
| 261 EncoderStateTester* state_tester) |
198 : message_tester_(message_tester), | 262 : message_tester_(message_tester), |
| 263 state_tester_(state_tester), |
199 decoder_tester_(NULL), | 264 decoder_tester_(NULL), |
200 data_available_(0) { | 265 data_available_(0) { |
201 } | 266 } |
202 | 267 |
203 ~EncoderTester() { | 268 ~EncoderTester() { |
204 EXPECT_GT(data_available_, 0); | 269 EXPECT_GT(data_available_, 0); |
205 } | 270 } |
206 | 271 |
207 void DataAvailable(VideoPacket *packet) { | 272 void DataAvailable(ChromotingHostMessage* message, |
| 273 Encoder::EncodingState state) { |
208 ++data_available_; | 274 ++data_available_; |
209 message_tester_->ReceivedPacket(packet); | 275 message_tester_->ReceivedMessage(message); |
| 276 state_tester_->ReceivedState(state); |
210 | 277 |
211 // Send the message to the DecoderTester. | 278 // Send the message to the DecoderTester. |
212 if (decoder_tester_) { | 279 if (decoder_tester_) { |
213 decoder_tester_->ReceivedPacket(packet); | 280 if (state & Encoder::EncodingStarting) { |
| 281 ChromotingHostMessage* begin_update = new ChromotingHostMessage(); |
| 282 begin_update->mutable_begin_update_stream(); |
| 283 decoder_tester_->ReceivedMessage(begin_update); |
| 284 } |
| 285 |
| 286 if (state & Encoder::EncodingInProgress) { |
| 287 decoder_tester_->ReceivedMessage(message); |
| 288 } |
| 289 |
| 290 if (state & Encoder::EncodingEnded) { |
| 291 ChromotingHostMessage* end_update = new ChromotingHostMessage(); |
| 292 end_update->mutable_end_update_stream(); |
| 293 decoder_tester_->ReceivedMessage(end_update); |
| 294 } |
| 295 } else { |
| 296 delete message; |
214 } | 297 } |
215 | |
216 delete packet; | |
217 } | 298 } |
218 | 299 |
219 void AddRects(const gfx::Rect* rects, int count) { | 300 void AddRects(const gfx::Rect* rects, int count) { |
220 message_tester_->AddRects(rects, count); | 301 message_tester_->AddRects(rects, count); |
221 } | 302 } |
222 | 303 |
223 void set_decoder_tester(DecoderTester* decoder_tester) { | 304 void set_decoder_tester(DecoderTester* decoder_tester) { |
224 decoder_tester_ = decoder_tester; | 305 decoder_tester_ = decoder_tester; |
225 } | 306 } |
226 | 307 |
227 private: | 308 private: |
228 EncoderMessageTester* message_tester_; | 309 EncoderMessageTester* message_tester_; |
| 310 EncoderStateTester* state_tester_; |
229 DecoderTester* decoder_tester_; | 311 DecoderTester* decoder_tester_; |
230 int data_available_; | 312 int data_available_; |
231 | 313 |
232 DISALLOW_COPY_AND_ASSIGN(EncoderTester); | 314 DISALLOW_COPY_AND_ASSIGN(EncoderTester); |
233 }; | 315 }; |
234 | 316 |
235 scoped_refptr<CaptureData> PrepareEncodeData(media::VideoFrame::Format format, | 317 scoped_refptr<CaptureData> PrepareEncodeData(PixelFormat format, |
236 uint8** memory) { | 318 uint8** memory) { |
237 // TODO(hclam): Support also YUV format. | 319 // TODO(hclam): Support also YUV format. |
238 CHECK_EQ(format, media::VideoFrame::RGB32); | 320 CHECK(format == PIXEL_FORMAT_RGB32); |
239 int size = kWidth * kHeight * kBytesPerPixel; | 321 int size = kWidth * kHeight * kBytesPerPixel; |
240 | 322 |
241 *memory = new uint8[size]; | 323 *memory = new uint8[size]; |
242 srand(0); | 324 srand(0); |
243 for (int i = 0; i < size; ++i) { | 325 for (int i = 0; i < size; ++i) { |
244 (*memory)[i] = rand() % 256; | 326 (*memory)[i] = rand() % 256; |
245 } | 327 } |
246 | 328 |
247 DataPlanes planes; | 329 DataPlanes planes; |
248 memset(planes.data, 0, sizeof(planes.data)); | 330 memset(planes.data, 0, sizeof(planes.data)); |
(...skipping 17 matching lines...) Expand all Loading... |
266 tester->AddRects(rects, count); | 348 tester->AddRects(rects, count); |
267 | 349 |
268 encoder->Encode(data, true, | 350 encoder->Encode(data, true, |
269 NewCallback(tester, &EncoderTester::DataAvailable)); | 351 NewCallback(tester, &EncoderTester::DataAvailable)); |
270 } | 352 } |
271 | 353 |
272 void TestEncoder(Encoder* encoder, bool strict) { | 354 void TestEncoder(Encoder* encoder, bool strict) { |
273 EncoderMessageTester message_tester; | 355 EncoderMessageTester message_tester; |
274 message_tester.set_strict(strict); | 356 message_tester.set_strict(strict); |
275 | 357 |
276 EncoderTester tester(&message_tester); | 358 EncoderStateTester state_tester; |
| 359 EncoderTester tester(&message_tester, &state_tester); |
277 | 360 |
278 uint8* memory; | 361 uint8* memory; |
279 scoped_refptr<CaptureData> data = | 362 scoped_refptr<CaptureData> data = |
280 PrepareEncodeData(media::VideoFrame::RGB32, &memory); | 363 PrepareEncodeData(PIXEL_FORMAT_RGB32, &memory); |
281 | 364 |
282 TestEncodingRects(encoder, &tester, data, kTestRects, 1); | 365 TestEncodingRects(encoder, &tester, data, kTestRects, 1); |
283 TestEncodingRects(encoder, &tester, data, kTestRects + 1, 1); | 366 TestEncodingRects(encoder, &tester, data, kTestRects + 1, 1); |
284 TestEncodingRects(encoder, &tester, data, kTestRects + 2, 1); | 367 TestEncodingRects(encoder, &tester, data, kTestRects + 2, 1); |
285 TestEncodingRects(encoder, &tester, data, kTestRects + 3, 2); | 368 TestEncodingRects(encoder, &tester, data, kTestRects + 3, 2); |
286 delete [] memory; | 369 delete [] memory; |
287 } | 370 } |
288 | 371 |
289 static void TestEncodingRects(Encoder* encoder, | 372 static void TestEncodingRects(Encoder* encoder, |
290 EncoderTester* encoder_tester, | 373 EncoderTester* encoder_tester, |
291 DecoderTester* decoder_tester, | 374 DecoderTester* decoder_tester, |
292 scoped_refptr<CaptureData> data, | 375 scoped_refptr<CaptureData> data, |
293 const gfx::Rect* rects, int count) { | 376 const gfx::Rect* rects, int count) { |
294 data->mutable_dirty_rects().clear(); | 377 data->mutable_dirty_rects().clear(); |
295 for (int i = 0; i < count; ++i) { | 378 for (int i = 0; i < count; ++i) { |
296 data->mutable_dirty_rects().insert(rects[i]); | 379 data->mutable_dirty_rects().insert(rects[i]); |
297 } | 380 } |
298 encoder_tester->AddRects(rects, count); | 381 encoder_tester->AddRects(rects, count); |
299 decoder_tester->AddRects(rects, count); | 382 decoder_tester->AddRects(rects, count); |
| 383 decoder_tester->reset_decode_done(); |
300 | 384 |
301 // Generate random data for the updated rects. | 385 // Generate random data for the updated rects. |
302 srand(0); | 386 srand(0); |
303 for (int i = 0; i < count; ++i) { | 387 for (int i = 0; i < count; ++i) { |
304 const gfx::Rect rect = rects[i]; | 388 const gfx::Rect rect = rects[i]; |
305 const int bytes_per_pixel = GetBytesPerPixel(data->pixel_format()); | 389 const int bytes_per_pixel = GetBytesPerPixel(data->pixel_format()); |
306 const int row_size = bytes_per_pixel * rect.width(); | 390 const int row_size = bytes_per_pixel * rect.width(); |
307 uint8* memory = data->data_planes().data[0] + | 391 uint8* memory = data->data_planes().data[0] + |
308 data->data_planes().strides[0] * rect.y() + | 392 data->data_planes().strides[0] * rect.y() + |
309 bytes_per_pixel * rect.x(); | 393 bytes_per_pixel * rect.x(); |
310 for (int y = 0; y < rect.height(); ++y) { | 394 for (int y = 0; y < rect.height(); ++y) { |
311 for (int x = 0; x < row_size; ++x) | 395 for (int x = 0; x < row_size; ++x) |
312 memory[x] = rand() % 256; | 396 memory[x] = rand() % 256; |
313 memory += data->data_planes().strides[0]; | 397 memory += data->data_planes().strides[0]; |
314 } | 398 } |
315 } | 399 } |
316 | 400 |
317 encoder->Encode(data, true, | 401 encoder->Encode(data, true, |
318 NewCallback(encoder_tester, &EncoderTester::DataAvailable)); | 402 NewCallback(encoder_tester, &EncoderTester::DataAvailable)); |
319 decoder_tester->VerifyResults(); | 403 EXPECT_TRUE(decoder_tester->decode_done()); |
320 decoder_tester->Reset(); | |
321 } | 404 } |
322 | 405 |
323 void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict) { | 406 void TestEncoderDecoder(Encoder* encoder, Decoder* decoder, bool strict) { |
324 EncoderMessageTester message_tester; | 407 EncoderMessageTester message_tester; |
325 message_tester.set_strict(strict); | 408 message_tester.set_strict(strict); |
326 | 409 |
327 EncoderTester encoder_tester(&message_tester); | 410 EncoderStateTester state_tester; |
| 411 EncoderTester encoder_tester(&message_tester, &state_tester); |
328 | 412 |
329 uint8* memory; | 413 uint8* memory; |
330 scoped_refptr<CaptureData> data = | 414 scoped_refptr<CaptureData> data = |
331 PrepareEncodeData(media::VideoFrame::RGB32, &memory); | 415 PrepareEncodeData(PIXEL_FORMAT_RGB32, &memory); |
332 DecoderTester decoder_tester(decoder); | 416 DecoderTester decoder_tester(decoder); |
333 decoder_tester.set_strict(strict); | 417 decoder_tester.set_strict(strict); |
334 decoder_tester.set_capture_data(data); | 418 decoder_tester.set_capture_data(data); |
335 encoder_tester.set_decoder_tester(&decoder_tester); | 419 encoder_tester.set_decoder_tester(&decoder_tester); |
336 | 420 |
337 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 421 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, |
338 kTestRects, 1); | 422 kTestRects, 1); |
339 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 423 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, |
340 kTestRects + 1, 1); | 424 kTestRects + 1, 1); |
341 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 425 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, |
342 kTestRects + 2, 1); | 426 kTestRects + 2, 1); |
343 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, | 427 TestEncodingRects(encoder, &encoder_tester, &decoder_tester, data, |
344 kTestRects + 3, 2); | 428 kTestRects + 3, 2); |
345 delete [] memory; | 429 delete [] memory; |
346 } | 430 } |
347 | 431 |
348 } // namespace remoting | 432 } // namespace remoting |
349 | 433 |
350 DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::DecoderTester); | 434 DISABLE_RUNNABLE_METHOD_REFCOUNT(remoting::DecoderTester); |
OLD | NEW |