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