OLD | NEW |
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 253 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
264 return sqrt(error_sum_squares / 3.0); | 264 return sqrt(error_sum_squares / 3.0); |
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_ptr<uint8[]> image_data_; |
275 scoped_refptr<media::ScreenCaptureData> 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) |
(...skipping 27 matching lines...) Expand all Loading... |
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<media::ScreenCaptureData> PrepareEncodeData( | 320 scoped_refptr<media::ScreenCaptureData> PrepareEncodeData( |
321 const SkISize& size, | 321 const SkISize& size, |
322 scoped_array<uint8>* memory) { | 322 scoped_ptr<uint8[]>* memory) { |
323 int memory_size = size.width() * size.height() * kBytesPerPixel; | 323 int memory_size = size.width() * size.height() * kBytesPerPixel; |
324 | 324 |
325 memory->reset(new uint8[memory_size]); | 325 memory->reset(new uint8[memory_size]); |
326 | 326 |
327 srand(0); | 327 srand(0); |
328 for (int i = 0; i < memory_size; ++i) { | 328 for (int i = 0; i < memory_size; ++i) { |
329 (*memory)[i] = rand() % 256; | 329 (*memory)[i] = rand() % 256; |
330 } | 330 } |
331 | 331 |
332 scoped_refptr<media::ScreenCaptureData> data = new media::ScreenCaptureData( | 332 scoped_refptr<media::ScreenCaptureData> data = new media::ScreenCaptureData( |
(...skipping 16 matching lines...) Expand all Loading... |
349 } | 349 } |
350 | 350 |
351 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { | 351 void TestVideoEncoder(VideoEncoder* encoder, bool strict) { |
352 const int kSizes[] = {320, 319, 317, 150}; | 352 const int kSizes[] = {320, 319, 317, 150}; |
353 | 353 |
354 VideoEncoderMessageTester message_tester; | 354 VideoEncoderMessageTester message_tester; |
355 message_tester.set_strict(strict); | 355 message_tester.set_strict(strict); |
356 | 356 |
357 VideoEncoderTester tester(&message_tester); | 357 VideoEncoderTester tester(&message_tester); |
358 | 358 |
359 scoped_array<uint8> memory; | 359 scoped_ptr<uint8[]> memory; |
360 | 360 |
361 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { | 361 for (size_t xi = 0; xi < arraysize(kSizes); ++xi) { |
362 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { | 362 for (size_t yi = 0; yi < arraysize(kSizes); ++yi) { |
363 SkISize size = SkISize::Make(kSizes[xi], kSizes[yi]); | 363 SkISize size = SkISize::Make(kSizes[xi], kSizes[yi]); |
364 scoped_refptr<media::ScreenCaptureData> data = | 364 scoped_refptr<media::ScreenCaptureData> data = |
365 PrepareEncodeData(size, &memory); | 365 PrepareEncodeData(size, &memory); |
366 std::vector<std::vector<SkIRect> > test_rect_lists = | 366 std::vector<std::vector<SkIRect> > test_rect_lists = |
367 MakeTestRectLists(size); | 367 MakeTestRectLists(size); |
368 for (size_t i = 0; i < test_rect_lists.size(); ++i) { | 368 for (size_t i = 0; i < test_rect_lists.size(); ++i) { |
369 const std::vector<SkIRect>& test_rects = test_rect_lists[i]; | 369 const std::vector<SkIRect>& test_rects = test_rect_lists[i]; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 | 406 |
407 void TestVideoEncoderDecoder( | 407 void TestVideoEncoderDecoder( |
408 VideoEncoder* encoder, VideoDecoder* decoder, bool strict) { | 408 VideoEncoder* encoder, VideoDecoder* decoder, bool strict) { |
409 SkISize kSize = SkISize::Make(320, 240); | 409 SkISize kSize = SkISize::Make(320, 240); |
410 | 410 |
411 VideoEncoderMessageTester message_tester; | 411 VideoEncoderMessageTester message_tester; |
412 message_tester.set_strict(strict); | 412 message_tester.set_strict(strict); |
413 | 413 |
414 VideoEncoderTester encoder_tester(&message_tester); | 414 VideoEncoderTester encoder_tester(&message_tester); |
415 | 415 |
416 scoped_array<uint8> memory; | 416 scoped_ptr<uint8[]> memory; |
417 scoped_refptr<media::ScreenCaptureData> data = | 417 scoped_refptr<media::ScreenCaptureData> data = |
418 PrepareEncodeData(kSize, &memory); | 418 PrepareEncodeData(kSize, &memory); |
419 | 419 |
420 VideoDecoderTester decoder_tester(decoder, kSize, kSize); | 420 VideoDecoderTester decoder_tester(decoder, kSize, kSize); |
421 decoder_tester.set_strict(strict); | 421 decoder_tester.set_strict(strict); |
422 decoder_tester.set_capture_data(data); | 422 decoder_tester.set_capture_data(data); |
423 encoder_tester.set_decoder_tester(&decoder_tester); | 423 encoder_tester.set_decoder_tester(&decoder_tester); |
424 | 424 |
425 std::vector<std::vector<SkIRect> > test_rect_lists = MakeTestRectLists(kSize); | 425 std::vector<std::vector<SkIRect> > test_rect_lists = MakeTestRectLists(kSize); |
426 for (size_t i = 0; i < test_rect_lists.size(); ++i) { | 426 for (size_t i = 0; i < test_rect_lists.size(); ++i) { |
(...skipping 17 matching lines...) Expand all Loading... |
444 } | 444 } |
445 } | 445 } |
446 | 446 |
447 void TestVideoEncoderDecoderGradient(VideoEncoder* encoder, | 447 void TestVideoEncoderDecoderGradient(VideoEncoder* encoder, |
448 VideoDecoder* decoder, | 448 VideoDecoder* decoder, |
449 const SkISize& screen_size, | 449 const SkISize& screen_size, |
450 const SkISize& view_size, | 450 const SkISize& view_size, |
451 double max_error_limit, | 451 double max_error_limit, |
452 double mean_error_limit) { | 452 double mean_error_limit) { |
453 SkIRect screen_rect = SkIRect::MakeSize(screen_size); | 453 SkIRect screen_rect = SkIRect::MakeSize(screen_size); |
454 scoped_array<uint8> screen_data(new uint8[ | 454 scoped_ptr<uint8[]> screen_data(new uint8[ |
455 screen_size.width() * screen_size.height() * kBytesPerPixel]); | 455 screen_size.width() * screen_size.height() * kBytesPerPixel]); |
456 FillWithGradient(screen_data.get(), screen_size, screen_rect); | 456 FillWithGradient(screen_data.get(), screen_size, screen_rect); |
457 | 457 |
458 SkIRect view_rect = SkIRect::MakeSize(view_size); | 458 SkIRect view_rect = SkIRect::MakeSize(view_size); |
459 scoped_array<uint8> expected_view_data(new uint8[ | 459 scoped_ptr<uint8[]> expected_view_data(new uint8[ |
460 view_size.width() * view_size.height() * kBytesPerPixel]); | 460 view_size.width() * view_size.height() * kBytesPerPixel]); |
461 FillWithGradient(expected_view_data.get(), view_size, view_rect); | 461 FillWithGradient(expected_view_data.get(), view_size, view_rect); |
462 | 462 |
463 scoped_refptr<media::ScreenCaptureData> capture_data = | 463 scoped_refptr<media::ScreenCaptureData> capture_data = |
464 new media::ScreenCaptureData( | 464 new media::ScreenCaptureData( |
465 screen_data.get(), screen_size.width() * kBytesPerPixel, screen_size); | 465 screen_data.get(), screen_size.width() * kBytesPerPixel, screen_size); |
466 capture_data->mutable_dirty_region().op(screen_rect, SkRegion::kUnion_Op); | 466 capture_data->mutable_dirty_region().op(screen_rect, SkRegion::kUnion_Op); |
467 | 467 |
468 VideoDecoderTester decoder_tester(decoder, screen_size, view_size); | 468 VideoDecoderTester decoder_tester(decoder, screen_size, view_size); |
469 decoder_tester.set_capture_data(capture_data); | 469 decoder_tester.set_capture_data(capture_data); |
470 decoder_tester.AddRegion(capture_data->dirty_region()); | 470 decoder_tester.AddRegion(capture_data->dirty_region()); |
471 | 471 |
472 encoder->Encode(capture_data, true, | 472 encoder->Encode(capture_data, true, |
473 base::Bind(&VideoDecoderTester::ReceivedScopedPacket, | 473 base::Bind(&VideoDecoderTester::ReceivedScopedPacket, |
474 base::Unretained(&decoder_tester))); | 474 base::Unretained(&decoder_tester))); |
475 | 475 |
476 decoder_tester.VerifyResultsApprox(expected_view_data.get(), | 476 decoder_tester.VerifyResultsApprox(expected_view_data.get(), |
477 max_error_limit, mean_error_limit); | 477 max_error_limit, mean_error_limit); |
478 | 478 |
479 // 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 |
480 // invalidates the frame. | 480 // invalidates the frame. |
481 decoder_tester.ResetRenderedData(); | 481 decoder_tester.ResetRenderedData(); |
482 decoder->Invalidate(view_size, SkRegion(view_rect)); | 482 decoder->Invalidate(view_size, SkRegion(view_rect)); |
483 decoder_tester.RenderFrame(); | 483 decoder_tester.RenderFrame(); |
484 decoder_tester.VerifyResultsApprox(expected_view_data.get(), | 484 decoder_tester.VerifyResultsApprox(expected_view_data.get(), |
485 max_error_limit, mean_error_limit); | 485 max_error_limit, mean_error_limit); |
486 } | 486 } |
487 | 487 |
488 } // namespace remoting | 488 } // namespace remoting |
OLD | NEW |