Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(250)

Side by Side Diff: remoting/codec/codec_test.cc

Issue 12047101: Move screen capturers from remoting/capturer to media/video/capturer/screen (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « remoting/codec/codec_test.h ('k') | remoting/codec/video_encoder.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/bind.h" 8 #include "base/bind.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 } 173 }
174 174
175 void ReceivedScopedPacket(scoped_ptr<VideoPacket> packet) { 175 void ReceivedScopedPacket(scoped_ptr<VideoPacket> packet) {
176 ReceivedPacket(packet.get()); 176 ReceivedPacket(packet.get());
177 } 177 }
178 178
179 void set_strict(bool strict) { 179 void set_strict(bool strict) {
180 strict_ = strict; 180 strict_ = strict;
181 } 181 }
182 182
183 void set_capture_data(scoped_refptr<CaptureData> data) { 183 void set_capture_data(scoped_refptr<media::ScreenCaptureData> data) {
184 capture_data_ = data; 184 capture_data_ = data;
185 } 185 }
186 186
187 void AddRects(const SkIRect* rects, int count) { 187 void AddRects(const SkIRect* rects, int count) {
188 SkRegion new_rects; 188 SkRegion new_rects;
189 new_rects.setRects(rects, count); 189 new_rects.setRects(rects, count);
190 AddRegion(new_rects); 190 AddRegion(new_rects);
191 } 191 }
192 192
193 void AddRegion(const SkRegion& region) { 193 void AddRegion(const SkRegion& region) {
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 } 265 }
266 266
267 private: 267 private:
268 SkISize screen_size_; 268 SkISize screen_size_;
269 SkISize view_size_; 269 SkISize view_size_;
270 bool strict_; 270 bool strict_;
271 SkRegion expected_region_; 271 SkRegion expected_region_;
272 SkRegion update_region_; 272 SkRegion update_region_;
273 VideoDecoder* decoder_; 273 VideoDecoder* decoder_;
274 scoped_array<uint8> image_data_; 274 scoped_array<uint8> image_data_;
275 scoped_refptr<CaptureData> capture_data_; 275 scoped_refptr<media::ScreenCaptureData> capture_data_;
276 276
277 DISALLOW_COPY_AND_ASSIGN(VideoDecoderTester); 277 DISALLOW_COPY_AND_ASSIGN(VideoDecoderTester);
278 }; 278 };
279 279
280 // The VideoEncoderTester provides a hook for retrieving the data, and passing 280 // The VideoEncoderTester provides a hook for retrieving the data, and passing
281 // the message to other subprograms for validaton. 281 // the message to other subprograms for validaton.
282 class VideoEncoderTester { 282 class VideoEncoderTester {
283 public: 283 public:
284 VideoEncoderTester(VideoEncoderMessageTester* message_tester) 284 VideoEncoderTester(VideoEncoderMessageTester* message_tester)
285 : message_tester_(message_tester), 285 : message_tester_(message_tester),
(...skipping 24 matching lines...) Expand all
310 } 310 }
311 311
312 private: 312 private:
313 VideoEncoderMessageTester* message_tester_; 313 VideoEncoderMessageTester* message_tester_;
314 VideoDecoderTester* decoder_tester_; 314 VideoDecoderTester* decoder_tester_;
315 int data_available_; 315 int data_available_;
316 316
317 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester); 317 DISALLOW_COPY_AND_ASSIGN(VideoEncoderTester);
318 }; 318 };
319 319
320 scoped_refptr<CaptureData> PrepareEncodeData(const SkISize& size, 320 scoped_refptr<media::ScreenCaptureData> PrepareEncodeData(
321 scoped_array<uint8>* memory) { 321 const SkISize& size,
322 scoped_array<uint8>* memory) {
322 int memory_size = size.width() * size.height() * kBytesPerPixel; 323 int memory_size = size.width() * size.height() * kBytesPerPixel;
323 324
324 memory->reset(new uint8[memory_size]); 325 memory->reset(new uint8[memory_size]);
325 326
326 srand(0); 327 srand(0);
327 for (int i = 0; i < memory_size; ++i) { 328 for (int i = 0; i < memory_size; ++i) {
328 (*memory)[i] = rand() % 256; 329 (*memory)[i] = rand() % 256;
329 } 330 }
330 331
331 scoped_refptr<CaptureData> data = 332 scoped_refptr<media::ScreenCaptureData> data = new media::ScreenCaptureData(
332 new CaptureData(memory->get(), size.width() * kBytesPerPixel, size); 333 memory->get(), size.width() * kBytesPerPixel, size);
333 return data; 334 return data;
334 } 335 }
335 336
336 static void TestEncodingRects(VideoEncoder* encoder, 337 static void TestEncodingRects(VideoEncoder* encoder,
337 VideoEncoderTester* tester, 338 VideoEncoderTester* tester,
338 scoped_refptr<CaptureData> data, 339 scoped_refptr<media::ScreenCaptureData> data,
339 const SkIRect* rects, int count) { 340 const SkIRect* rects, int count) {
340 data->mutable_dirty_region().setEmpty(); 341 data->mutable_dirty_region().setEmpty();
341 for (int i = 0; i < count; ++i) { 342 for (int i = 0; i < count; ++i) {
342 data->mutable_dirty_region().op(rects[i], SkRegion::kUnion_Op); 343 data->mutable_dirty_region().op(rects[i], SkRegion::kUnion_Op);
343 } 344 }
344 tester->AddRects(rects, count); 345 tester->AddRects(rects, count);
345 346
346 encoder->Encode(data, true, base::Bind( 347 encoder->Encode(data, true, base::Bind(
347 &VideoEncoderTester::DataAvailable, base::Unretained(tester))); 348 &VideoEncoderTester::DataAvailable, base::Unretained(tester)));
348 } 349 }
349 350
350 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { 351 void TestVideoEncoder(VideoEncoder* encoder, bool strict) {
351 const int kSizes[] = {320, 319, 317, 150}; 352 const int kSizes[] = {320, 319, 317, 150};
352 353
353 VideoEncoderMessageTester message_tester; 354 VideoEncoderMessageTester message_tester;
354 message_tester.set_strict(strict); 355 message_tester.set_strict(strict);
355 356
356 VideoEncoderTester tester(&message_tester); 357 VideoEncoderTester tester(&message_tester);
357 358
358 scoped_array<uint8> memory; 359 scoped_array<uint8> memory;
359 360
360 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { 361 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) {
361 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { 362 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) {
362 SkISize size = SkISize::Make(kSizes[xi], kSizes[yi]); 363 SkISize size = SkISize::Make(kSizes[xi], kSizes[yi]);
363 scoped_refptr<CaptureData> data = 364 scoped_refptr<media::ScreenCaptureData> data =
364 PrepareEncodeData(size, &memory); 365 PrepareEncodeData(size, &memory);
365 std::vector<std::vector<SkIRect> > test_rect_lists = 366 std::vector<std::vector<SkIRect> > test_rect_lists =
366 MakeTestRectLists(size); 367 MakeTestRectLists(size);
367 for (size_t i = 0; i < test_rect_lists.size(); ++i) { 368 for (size_t i = 0; i < test_rect_lists.size(); ++i) {
368 const std::vector<SkIRect>& test_rects = test_rect_lists[i]; 369 const std::vector<SkIRect>& test_rects = test_rect_lists[i];
369 TestEncodingRects(encoder, &tester, data, 370 TestEncodingRects(encoder, &tester, data,
370 &test_rects[0], test_rects.size()); 371 &test_rects[0], test_rects.size());
371 } 372 }
372 } 373 }
373 } 374 }
374 } 375 }
375 376
376 static void TestEncodeDecodeRects(VideoEncoder* encoder, 377 static void TestEncodeDecodeRects(VideoEncoder* encoder,
377 VideoEncoderTester* encoder_tester, 378 VideoEncoderTester* encoder_tester,
378 VideoDecoderTester* decoder_tester, 379 VideoDecoderTester* decoder_tester,
379 scoped_refptr<CaptureData> data, 380 scoped_refptr<media::ScreenCaptureData> data,
380 const SkIRect* rects, int count) { 381 const SkIRect* rects, int count) {
381 data->mutable_dirty_region().setRects(rects, count); 382 data->mutable_dirty_region().setRects(rects, count);
382 encoder_tester->AddRects(rects, count); 383 encoder_tester->AddRects(rects, count);
383 decoder_tester->AddRects(rects, count); 384 decoder_tester->AddRects(rects, count);
384 385
385 // Generate random data for the updated region. 386 // Generate random data for the updated region.
386 srand(0); 387 srand(0);
387 for (int i = 0; i < count; ++i) { 388 for (int i = 0; i < count; ++i) {
388 const int bytes_per_pixel = 4; // Because of RGB32 on previous line. 389 const int bytes_per_pixel = 4; // Because of RGB32 on previous line.
389 const int row_size = bytes_per_pixel * rects[i].width(); 390 const int row_size = bytes_per_pixel * rects[i].width();
(...skipping 16 matching lines...) Expand all
406 void TestVideoEncoderDecoder( 407 void TestVideoEncoderDecoder(
407 VideoEncoder* encoder, VideoDecoder* decoder, bool strict) { 408 VideoEncoder* encoder, VideoDecoder* decoder, bool strict) {
408 SkISize kSize = SkISize::Make(320, 240); 409 SkISize kSize = SkISize::Make(320, 240);
409 410
410 VideoEncoderMessageTester message_tester; 411 VideoEncoderMessageTester message_tester;
411 message_tester.set_strict(strict); 412 message_tester.set_strict(strict);
412 413
413 VideoEncoderTester encoder_tester(&message_tester); 414 VideoEncoderTester encoder_tester(&message_tester);
414 415
415 scoped_array<uint8> memory; 416 scoped_array<uint8> memory;
416 scoped_refptr<CaptureData> data = PrepareEncodeData(kSize, &memory); 417 scoped_refptr<media::ScreenCaptureData> data =
418 PrepareEncodeData(kSize, &memory);
417 419
418 VideoDecoderTester decoder_tester(decoder, kSize, kSize); 420 VideoDecoderTester decoder_tester(decoder, kSize, kSize);
419 decoder_tester.set_strict(strict); 421 decoder_tester.set_strict(strict);
420 decoder_tester.set_capture_data(data); 422 decoder_tester.set_capture_data(data);
421 encoder_tester.set_decoder_tester(&decoder_tester); 423 encoder_tester.set_decoder_tester(&decoder_tester);
422 424
423 std::vector<std::vector<SkIRect> > test_rect_lists = MakeTestRectLists(kSize); 425 std::vector<std::vector<SkIRect> > test_rect_lists = MakeTestRectLists(kSize);
424 for (size_t i = 0; i < test_rect_lists.size(); ++i) { 426 for (size_t i = 0; i < test_rect_lists.size(); ++i) {
425 const std::vector<SkIRect> test_rects = test_rect_lists[i]; 427 const std::vector<SkIRect> test_rects = test_rect_lists[i];
426 TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data, 428 TestEncodeDecodeRects(encoder, &encoder_tester, &decoder_tester, data,
(...skipping 24 matching lines...) Expand all
451 SkIRect screen_rect = SkIRect::MakeSize(screen_size); 453 SkIRect screen_rect = SkIRect::MakeSize(screen_size);
452 scoped_array<uint8> screen_data(new uint8[ 454 scoped_array<uint8> screen_data(new uint8[
453 screen_size.width() * screen_size.height() * kBytesPerPixel]); 455 screen_size.width() * screen_size.height() * kBytesPerPixel]);
454 FillWithGradient(screen_data.get(), screen_size, screen_rect); 456 FillWithGradient(screen_data.get(), screen_size, screen_rect);
455 457
456 SkIRect view_rect = SkIRect::MakeSize(view_size); 458 SkIRect view_rect = SkIRect::MakeSize(view_size);
457 scoped_array<uint8> expected_view_data(new uint8[ 459 scoped_array<uint8> expected_view_data(new uint8[
458 view_size.width() * view_size.height() * kBytesPerPixel]); 460 view_size.width() * view_size.height() * kBytesPerPixel]);
459 FillWithGradient(expected_view_data.get(), view_size, view_rect); 461 FillWithGradient(expected_view_data.get(), view_size, view_rect);
460 462
461 scoped_refptr<CaptureData> capture_data = 463 scoped_refptr<media::ScreenCaptureData> capture_data =
462 new CaptureData(screen_data.get(), screen_size.width() * kBytesPerPixel, 464 new media::ScreenCaptureData(
463 screen_size); 465 screen_data.get(), screen_size.width() * kBytesPerPixel, screen_size);
464 capture_data->mutable_dirty_region().op(screen_rect, SkRegion::kUnion_Op); 466 capture_data->mutable_dirty_region().op(screen_rect, SkRegion::kUnion_Op);
465 467
466 VideoDecoderTester decoder_tester(decoder, screen_size, view_size); 468 VideoDecoderTester decoder_tester(decoder, screen_size, view_size);
467 decoder_tester.set_capture_data(capture_data); 469 decoder_tester.set_capture_data(capture_data);
468 decoder_tester.AddRegion(capture_data->dirty_region()); 470 decoder_tester.AddRegion(capture_data->dirty_region());
469 471
470 encoder->Encode(capture_data, true, 472 encoder->Encode(capture_data, true,
471 base::Bind(&VideoDecoderTester::ReceivedScopedPacket, 473 base::Bind(&VideoDecoderTester::ReceivedScopedPacket,
472 base::Unretained(&decoder_tester))); 474 base::Unretained(&decoder_tester)));
473 475
474 decoder_tester.VerifyResultsApprox(expected_view_data.get(), 476 decoder_tester.VerifyResultsApprox(expected_view_data.get(),
475 max_error_limit, mean_error_limit); 477 max_error_limit, mean_error_limit);
476 478
477 // Check that the decoder correctly re-renders the frame if its client 479 // Check that the decoder correctly re-renders the frame if its client
478 // invalidates the frame. 480 // invalidates the frame.
479 decoder_tester.ResetRenderedData(); 481 decoder_tester.ResetRenderedData();
480 decoder->Invalidate(view_size, SkRegion(view_rect)); 482 decoder->Invalidate(view_size, SkRegion(view_rect));
481 decoder_tester.RenderFrame(); 483 decoder_tester.RenderFrame();
482 decoder_tester.VerifyResultsApprox(expected_view_data.get(), 484 decoder_tester.VerifyResultsApprox(expected_view_data.get(),
483 max_error_limit, mean_error_limit); 485 max_error_limit, mean_error_limit);
484 } 486 }
485 487
486 } // namespace remoting 488 } // namespace remoting
OLDNEW
« no previous file with comments | « remoting/codec/codec_test.h ('k') | remoting/codec/video_encoder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698