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 "media/capture/video/video_capture_device.h" | 5 #include "media/capture/video/video_capture_device.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <memory> | 10 #include <memory> |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
94 class MockVideoCaptureClient : public VideoCaptureDevice::Client { | 94 class MockVideoCaptureClient : public VideoCaptureDevice::Client { |
95 public: | 95 public: |
96 MOCK_METHOD0(DoReserveOutputBuffer, void(void)); | 96 MOCK_METHOD0(DoReserveOutputBuffer, void(void)); |
97 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void)); | 97 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void)); |
98 MOCK_METHOD0(DoOnIncomingCapturedVideoFrame, void(void)); | 98 MOCK_METHOD0(DoOnIncomingCapturedVideoFrame, void(void)); |
99 MOCK_METHOD0(DoResurrectLastOutputBuffer, void(void)); | 99 MOCK_METHOD0(DoResurrectLastOutputBuffer, void(void)); |
100 MOCK_METHOD2(OnError, | 100 MOCK_METHOD2(OnError, |
101 void(const tracked_objects::Location& from_here, | 101 void(const tracked_objects::Location& from_here, |
102 const std::string& reason)); | 102 const std::string& reason)); |
103 MOCK_CONST_METHOD0(GetBufferPoolUtilization, double(void)); | 103 MOCK_CONST_METHOD0(GetBufferPoolUtilization, double(void)); |
| 104 MOCK_METHOD0(OnStarted, void(void)); |
104 | 105 |
105 explicit MockVideoCaptureClient( | 106 explicit MockVideoCaptureClient( |
106 base::Callback<void(const VideoCaptureFormat&)> frame_cb) | 107 base::Callback<void(const VideoCaptureFormat&)> frame_cb) |
107 : main_thread_(base::ThreadTaskRunnerHandle::Get()), frame_cb_(frame_cb) { | 108 : main_thread_(base::ThreadTaskRunnerHandle::Get()), frame_cb_(frame_cb) { |
108 ON_CALL(*this, OnError(_, _)).WillByDefault(Invoke(DumpError)); | 109 ON_CALL(*this, OnError(_, _)).WillByDefault(Invoke(DumpError)); |
109 } | 110 } |
110 | 111 |
111 void OnIncomingCapturedData(const uint8_t* data, | 112 void OnIncomingCapturedData(const uint8_t* data, |
112 int length, | 113 int length, |
113 const VideoCaptureFormat& format, | 114 const VideoCaptureFormat& format, |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 return; | 400 return; |
400 const int width = size.width(); | 401 const int width = size.width(); |
401 const int height = size.height(); | 402 const int height = size.height(); |
402 | 403 |
403 std::unique_ptr<VideoCaptureDevice> device( | 404 std::unique_ptr<VideoCaptureDevice> device( |
404 video_capture_device_factory_->CreateDevice( | 405 video_capture_device_factory_->CreateDevice( |
405 device_descriptors_->front())); | 406 device_descriptors_->front())); |
406 ASSERT_TRUE(device); | 407 ASSERT_TRUE(device); |
407 | 408 |
408 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); | 409 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); |
| 410 EXPECT_CALL(*video_capture_client_, OnStarted()); |
409 | 411 |
410 VideoCaptureParams capture_params; | 412 VideoCaptureParams capture_params; |
411 capture_params.requested_format.frame_size.SetSize(width, height); | 413 capture_params.requested_format.frame_size.SetSize(width, height); |
412 capture_params.requested_format.frame_rate = 30.0f; | 414 capture_params.requested_format.frame_rate = 30.0f; |
413 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; | 415 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; |
414 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); | 416 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); |
415 | 417 |
416 WaitForCapturedFrame(); | 418 WaitForCapturedFrame(); |
417 EXPECT_EQ(last_format().frame_size.width(), width); | 419 EXPECT_EQ(last_format().frame_size.width(), width); |
418 EXPECT_EQ(last_format().frame_size.height(), height); | 420 EXPECT_EQ(last_format().frame_size.height(), height); |
(...skipping 14 matching lines...) Expand all Loading... |
433 TEST_F(VideoCaptureDeviceTest, MAYBE_AllocateBadSize) { | 435 TEST_F(VideoCaptureDeviceTest, MAYBE_AllocateBadSize) { |
434 if (!EnumerateAndFindUsableDevices()) | 436 if (!EnumerateAndFindUsableDevices()) |
435 return; | 437 return; |
436 | 438 |
437 std::unique_ptr<VideoCaptureDevice> device( | 439 std::unique_ptr<VideoCaptureDevice> device( |
438 video_capture_device_factory_->CreateDevice( | 440 video_capture_device_factory_->CreateDevice( |
439 device_descriptors_->front())); | 441 device_descriptors_->front())); |
440 ASSERT_TRUE(device); | 442 ASSERT_TRUE(device); |
441 | 443 |
442 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); | 444 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); |
| 445 EXPECT_CALL(*video_capture_client_, OnStarted()); |
443 | 446 |
444 const gfx::Size input_size(640, 480); | 447 const gfx::Size input_size(640, 480); |
445 VideoCaptureParams capture_params; | 448 VideoCaptureParams capture_params; |
446 capture_params.requested_format.frame_size.SetSize(637, 472); | 449 capture_params.requested_format.frame_size.SetSize(637, 472); |
447 capture_params.requested_format.frame_rate = 35; | 450 capture_params.requested_format.frame_rate = 35; |
448 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; | 451 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; |
449 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); | 452 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); |
450 WaitForCapturedFrame(); | 453 WaitForCapturedFrame(); |
451 device->StopAndDeAllocate(); | 454 device->StopAndDeAllocate(); |
452 EXPECT_EQ(last_format().frame_size.width(), input_size.width()); | 455 EXPECT_EQ(last_format().frame_size.width(), input_size.width()); |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 VLOG(1) << "Skipped on Win10: http://crbug.com/570604, current: " | 516 VLOG(1) << "Skipped on Win10: http://crbug.com/570604, current: " |
514 << static_cast<int>(version); | 517 << static_cast<int>(version); |
515 return; | 518 return; |
516 } | 519 } |
517 #endif | 520 #endif |
518 std::unique_ptr<VideoCaptureDevice> device( | 521 std::unique_ptr<VideoCaptureDevice> device( |
519 video_capture_device_factory_->CreateDevice(*device_descriptor)); | 522 video_capture_device_factory_->CreateDevice(*device_descriptor)); |
520 ASSERT_TRUE(device); | 523 ASSERT_TRUE(device); |
521 | 524 |
522 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); | 525 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); |
| 526 EXPECT_CALL(*video_capture_client_, OnStarted()); |
523 | 527 |
524 VideoCaptureParams capture_params; | 528 VideoCaptureParams capture_params; |
525 capture_params.requested_format.frame_size.SetSize(1280, 720); | 529 capture_params.requested_format.frame_size.SetSize(1280, 720); |
526 capture_params.requested_format.frame_rate = 30; | 530 capture_params.requested_format.frame_rate = 30; |
527 capture_params.requested_format.pixel_format = PIXEL_FORMAT_MJPEG; | 531 capture_params.requested_format.pixel_format = PIXEL_FORMAT_MJPEG; |
528 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); | 532 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); |
529 | 533 |
530 WaitForCapturedFrame(); | 534 WaitForCapturedFrame(); |
531 // Verify we get MJPEG from the device. Not all devices can capture 1280x720 | 535 // Verify we get MJPEG from the device. Not all devices can capture 1280x720 |
532 // @ 30 fps, so we don't care about the exact resolution we get. | 536 // @ 30 fps, so we don't care about the exact resolution we get. |
(...skipping 26 matching lines...) Expand all Loading... |
559 return; | 563 return; |
560 } | 564 } |
561 #endif | 565 #endif |
562 | 566 |
563 std::unique_ptr<VideoCaptureDevice> device( | 567 std::unique_ptr<VideoCaptureDevice> device( |
564 video_capture_device_factory_->CreateDevice( | 568 video_capture_device_factory_->CreateDevice( |
565 device_descriptors_->front())); | 569 device_descriptors_->front())); |
566 ASSERT_TRUE(device); | 570 ASSERT_TRUE(device); |
567 | 571 |
568 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); | 572 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); |
| 573 EXPECT_CALL(*video_capture_client_, OnStarted()); |
569 | 574 |
570 VideoCaptureParams capture_params; | 575 VideoCaptureParams capture_params; |
571 capture_params.requested_format.frame_size.SetSize(320, 240); | 576 capture_params.requested_format.frame_size.SetSize(320, 240); |
572 capture_params.requested_format.frame_rate = 30; | 577 capture_params.requested_format.frame_rate = 30; |
573 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; | 578 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; |
574 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); | 579 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); |
575 | 580 |
576 VideoCaptureDevice::TakePhotoCallback scoped_callback( | 581 VideoCaptureDevice::TakePhotoCallback scoped_callback( |
577 base::Bind(&MockImageCaptureClient::DoOnPhotoTaken, | 582 base::Bind(&MockImageCaptureClient::DoOnPhotoTaken, |
578 image_capture_client_), | 583 image_capture_client_), |
(...skipping 24 matching lines...) Expand all Loading... |
603 return; | 608 return; |
604 } | 609 } |
605 #endif | 610 #endif |
606 | 611 |
607 std::unique_ptr<VideoCaptureDevice> device( | 612 std::unique_ptr<VideoCaptureDevice> device( |
608 video_capture_device_factory_->CreateDevice( | 613 video_capture_device_factory_->CreateDevice( |
609 device_descriptors_->front())); | 614 device_descriptors_->front())); |
610 ASSERT_TRUE(device); | 615 ASSERT_TRUE(device); |
611 | 616 |
612 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); | 617 EXPECT_CALL(*video_capture_client_, OnError(_, _)).Times(0); |
| 618 EXPECT_CALL(*video_capture_client_, OnStarted()); |
613 | 619 |
614 VideoCaptureParams capture_params; | 620 VideoCaptureParams capture_params; |
615 capture_params.requested_format.frame_size.SetSize(320, 240); | 621 capture_params.requested_format.frame_size.SetSize(320, 240); |
616 capture_params.requested_format.frame_rate = 30; | 622 capture_params.requested_format.frame_rate = 30; |
617 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; | 623 capture_params.requested_format.pixel_format = PIXEL_FORMAT_I420; |
618 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); | 624 device->AllocateAndStart(capture_params, std::move(video_capture_client_)); |
619 | 625 |
620 VideoCaptureDevice::GetPhotoCapabilitiesCallback scoped_get_callback( | 626 VideoCaptureDevice::GetPhotoCapabilitiesCallback scoped_get_callback( |
621 base::Bind(&MockImageCaptureClient::DoOnGetPhotoCapabilities, | 627 base::Bind(&MockImageCaptureClient::DoOnGetPhotoCapabilities, |
622 image_capture_client_), | 628 image_capture_client_), |
623 media::BindToCurrentLoop( | 629 media::BindToCurrentLoop( |
624 base::Bind(&MockImageCaptureClient::OnGetPhotoCapabilitiesFailure, | 630 base::Bind(&MockImageCaptureClient::OnGetPhotoCapabilitiesFailure, |
625 image_capture_client_))); | 631 image_capture_client_))); |
626 | 632 |
627 base::RunLoop run_loop; | 633 base::RunLoop run_loop; |
628 base::Closure quit_closure = media::BindToCurrentLoop(run_loop.QuitClosure()); | 634 base::Closure quit_closure = media::BindToCurrentLoop(run_loop.QuitClosure()); |
629 EXPECT_CALL(*image_capture_client_.get(), OnCorrectGetPhotoCapabilities()) | 635 EXPECT_CALL(*image_capture_client_.get(), OnCorrectGetPhotoCapabilities()) |
630 .Times(1) | 636 .Times(1) |
631 .WillOnce(RunClosure(quit_closure)); | 637 .WillOnce(RunClosure(quit_closure)); |
632 | 638 |
633 device->GetPhotoCapabilities(std::move(scoped_get_callback)); | 639 device->GetPhotoCapabilities(std::move(scoped_get_callback)); |
634 run_loop.Run(); | 640 run_loop.Run(); |
635 | 641 |
636 ASSERT_TRUE(image_capture_client_->capabilities()); | 642 ASSERT_TRUE(image_capture_client_->capabilities()); |
637 | 643 |
638 device->StopAndDeAllocate(); | 644 device->StopAndDeAllocate(); |
639 } | 645 } |
640 | 646 |
641 }; // namespace media | 647 }; // namespace media |
OLD | NEW |