| 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 |