| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "content/browser/media/capture/desktop_capture_device.h" | 5 #include "content/browser/media/capture/desktop_capture_device.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 68 const uint8* v_data, | 68 const uint8* v_data, |
| 69 size_t y_stride, | 69 size_t y_stride, |
| 70 size_t u_stride, | 70 size_t u_stride, |
| 71 size_t v_stride, | 71 size_t v_stride, |
| 72 const media::VideoCaptureFormat& frame_format, | 72 const media::VideoCaptureFormat& frame_format, |
| 73 int clockwise_rotation, | 73 int clockwise_rotation, |
| 74 const base::TimeTicks& timestamp)); | 74 const base::TimeTicks& timestamp)); |
| 75 MOCK_METHOD0(DoReserveOutputBuffer, void(void)); | 75 MOCK_METHOD0(DoReserveOutputBuffer, void(void)); |
| 76 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void)); | 76 MOCK_METHOD0(DoOnIncomingCapturedBuffer, void(void)); |
| 77 MOCK_METHOD0(DoOnIncomingCapturedVideoFrame, void(void)); | 77 MOCK_METHOD0(DoOnIncomingCapturedVideoFrame, void(void)); |
| 78 MOCK_METHOD1(OnError, void(const std::string& reason)); | 78 MOCK_METHOD2(OnError, |
| 79 void(const tracked_objects::Location& from_here, |
| 80 const std::string& reason)); |
| 79 | 81 |
| 80 // Trampoline methods to workaround GMOCK problems with scoped_ptr<>. | 82 // Trampoline methods to workaround GMOCK problems with scoped_ptr<>. |
| 81 scoped_ptr<Buffer> ReserveOutputBuffer( | 83 scoped_ptr<Buffer> ReserveOutputBuffer( |
| 82 const gfx::Size& dimensions, | 84 const gfx::Size& dimensions, |
| 83 media::VideoPixelFormat format, | 85 media::VideoPixelFormat format, |
| 84 media::VideoPixelStorage storage) override { | 86 media::VideoPixelStorage storage) override { |
| 85 EXPECT_TRUE(format == media::PIXEL_FORMAT_I420 && | 87 EXPECT_TRUE(format == media::PIXEL_FORMAT_I420 && |
| 86 storage == media::PIXEL_STORAGE_CPU); | 88 storage == media::PIXEL_STORAGE_CPU); |
| 87 DoReserveOutputBuffer(); | 89 DoReserveOutputBuffer(); |
| 88 return scoped_ptr<Buffer>(); | 90 return scoped_ptr<Buffer>(); |
| (...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 276 scoped_ptr<webrtc::DesktopCapturer> capturer( | 278 scoped_ptr<webrtc::DesktopCapturer> capturer( |
| 277 webrtc::ScreenCapturer::Create( | 279 webrtc::ScreenCapturer::Create( |
| 278 webrtc::DesktopCaptureOptions::CreateDefault())); | 280 webrtc::DesktopCaptureOptions::CreateDefault())); |
| 279 CreateScreenCaptureDevice(capturer.Pass()); | 281 CreateScreenCaptureDevice(capturer.Pass()); |
| 280 | 282 |
| 281 media::VideoCaptureFormat format; | 283 media::VideoCaptureFormat format; |
| 282 base::WaitableEvent done_event(false, false); | 284 base::WaitableEvent done_event(false, false); |
| 283 int frame_size; | 285 int frame_size; |
| 284 | 286 |
| 285 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 287 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 286 EXPECT_CALL(*client, OnError(_)).Times(0); | 288 EXPECT_CALL(*client, OnError(_, _)).Times(0); |
| 287 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 289 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 288 DoAll(SaveArg<1>(&frame_size), | 290 DoAll(SaveArg<1>(&frame_size), |
| 289 SaveArg<2>(&format), | 291 SaveArg<2>(&format), |
| 290 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 292 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 291 | 293 |
| 292 media::VideoCaptureParams capture_params; | 294 media::VideoCaptureParams capture_params; |
| 293 capture_params.requested_format.frame_size.SetSize(640, 480); | 295 capture_params.requested_format.frame_size.SetSize(640, 480); |
| 294 capture_params.requested_format.frame_rate = kFrameRate; | 296 capture_params.requested_format.frame_rate = kFrameRate; |
| 295 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; | 297 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; |
| 296 capture_device_->AllocateAndStart(capture_params, client.Pass()); | 298 capture_device_->AllocateAndStart(capture_params, client.Pass()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 310 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeConstantResolution) { | 312 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeConstantResolution) { |
| 311 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); | 313 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); |
| 312 | 314 |
| 313 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); | 315 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); |
| 314 | 316 |
| 315 FormatChecker format_checker(gfx::Size(kTestFrameWidth1, kTestFrameHeight1), | 317 FormatChecker format_checker(gfx::Size(kTestFrameWidth1, kTestFrameHeight1), |
| 316 gfx::Size(kTestFrameWidth1, kTestFrameHeight1)); | 318 gfx::Size(kTestFrameWidth1, kTestFrameHeight1)); |
| 317 base::WaitableEvent done_event(false, false); | 319 base::WaitableEvent done_event(false, false); |
| 318 | 320 |
| 319 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 321 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 320 EXPECT_CALL(*client, OnError(_)).Times(0); | 322 EXPECT_CALL(*client, OnError(_, _)).Times(0); |
| 321 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 323 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 322 DoAll(WithArg<2>(Invoke(&format_checker, | 324 DoAll(WithArg<2>(Invoke(&format_checker, |
| 323 &FormatChecker::ExpectAcceptableSize)), | 325 &FormatChecker::ExpectAcceptableSize)), |
| 324 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 326 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 325 | 327 |
| 326 media::VideoCaptureParams capture_params; | 328 media::VideoCaptureParams capture_params; |
| 327 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, | 329 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, |
| 328 kTestFrameHeight1); | 330 kTestFrameHeight1); |
| 329 capture_params.requested_format.frame_rate = kFrameRate; | 331 capture_params.requested_format.frame_rate = kFrameRate; |
| 330 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; | 332 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 350 // the same aspect ratio. | 352 // the same aspect ratio. |
| 351 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeFixedAspectRatio) { | 353 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeFixedAspectRatio) { |
| 352 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); | 354 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); |
| 353 | 355 |
| 354 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); | 356 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); |
| 355 | 357 |
| 356 FormatChecker format_checker(gfx::Size(888, 500), gfx::Size(532, 300)); | 358 FormatChecker format_checker(gfx::Size(888, 500), gfx::Size(532, 300)); |
| 357 base::WaitableEvent done_event(false, false); | 359 base::WaitableEvent done_event(false, false); |
| 358 | 360 |
| 359 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 361 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 360 EXPECT_CALL(*client, OnError(_)).Times(0); | 362 EXPECT_CALL(*client, OnError(_,_)).Times(0); |
| 361 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 363 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 362 DoAll(WithArg<2>(Invoke(&format_checker, | 364 DoAll(WithArg<2>(Invoke(&format_checker, |
| 363 &FormatChecker::ExpectAcceptableSize)), | 365 &FormatChecker::ExpectAcceptableSize)), |
| 364 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 366 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 365 | 367 |
| 366 media::VideoCaptureParams capture_params; | 368 media::VideoCaptureParams capture_params; |
| 367 const gfx::Size high_def_16_by_9(1920, 1080); | 369 const gfx::Size high_def_16_by_9(1920, 1080); |
| 368 ASSERT_GE(high_def_16_by_9.width(), | 370 ASSERT_GE(high_def_16_by_9.width(), |
| 369 std::max(kTestFrameWidth1, kTestFrameWidth2)); | 371 std::max(kTestFrameWidth1, kTestFrameWidth2)); |
| 370 ASSERT_GE(high_def_16_by_9.height(), | 372 ASSERT_GE(high_def_16_by_9.height(), |
| (...skipping 24 matching lines...) Expand all Loading... |
| 395 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeVariableResolution) { | 397 TEST_F(DesktopCaptureDeviceTest, ScreenResolutionChangeVariableResolution) { |
| 396 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); | 398 FakeScreenCapturer* mock_capturer = new FakeScreenCapturer(); |
| 397 | 399 |
| 398 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); | 400 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); |
| 399 | 401 |
| 400 FormatChecker format_checker(gfx::Size(kTestFrameWidth1, kTestFrameHeight1), | 402 FormatChecker format_checker(gfx::Size(kTestFrameWidth1, kTestFrameHeight1), |
| 401 gfx::Size(kTestFrameWidth2, kTestFrameHeight2)); | 403 gfx::Size(kTestFrameWidth2, kTestFrameHeight2)); |
| 402 base::WaitableEvent done_event(false, false); | 404 base::WaitableEvent done_event(false, false); |
| 403 | 405 |
| 404 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 406 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 405 EXPECT_CALL(*client, OnError(_)).Times(0); | 407 EXPECT_CALL(*client, OnError(_,_)).Times(0); |
| 406 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 408 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 407 DoAll(WithArg<2>(Invoke(&format_checker, | 409 DoAll(WithArg<2>(Invoke(&format_checker, |
| 408 &FormatChecker::ExpectAcceptableSize)), | 410 &FormatChecker::ExpectAcceptableSize)), |
| 409 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 411 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 410 | 412 |
| 411 media::VideoCaptureParams capture_params; | 413 media::VideoCaptureParams capture_params; |
| 412 const gfx::Size high_def_16_by_9(1920, 1080); | 414 const gfx::Size high_def_16_by_9(1920, 1080); |
| 413 ASSERT_GE(high_def_16_by_9.width(), | 415 ASSERT_GE(high_def_16_by_9.width(), |
| 414 std::max(kTestFrameWidth1, kTestFrameWidth2)); | 416 std::max(kTestFrameWidth1, kTestFrameWidth2)); |
| 415 ASSERT_GE(high_def_16_by_9.height(), | 417 ASSERT_GE(high_def_16_by_9.height(), |
| (...skipping 26 matching lines...) Expand all Loading... |
| 442 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); | 444 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); |
| 443 | 445 |
| 444 media::VideoCaptureFormat format; | 446 media::VideoCaptureFormat format; |
| 445 base::WaitableEvent done_event(false, false); | 447 base::WaitableEvent done_event(false, false); |
| 446 | 448 |
| 447 int frame_size = 0; | 449 int frame_size = 0; |
| 448 output_frame_.reset(new webrtc::BasicDesktopFrame( | 450 output_frame_.reset(new webrtc::BasicDesktopFrame( |
| 449 webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1))); | 451 webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1))); |
| 450 | 452 |
| 451 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 453 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 452 EXPECT_CALL(*client, OnError(_)).Times(0); | 454 EXPECT_CALL(*client, OnError(_,_)).Times(0); |
| 453 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 455 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 454 DoAll(Invoke(this, &DesktopCaptureDeviceTest::CopyFrame), | 456 DoAll(Invoke(this, &DesktopCaptureDeviceTest::CopyFrame), |
| 455 SaveArg<1>(&frame_size), | 457 SaveArg<1>(&frame_size), |
| 456 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 458 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 457 | 459 |
| 458 media::VideoCaptureParams capture_params; | 460 media::VideoCaptureParams capture_params; |
| 459 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, | 461 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, |
| 460 kTestFrameHeight1); | 462 kTestFrameHeight1); |
| 461 capture_params.requested_format.frame_rate = kFrameRate; | 463 capture_params.requested_format.frame_rate = kFrameRate; |
| 462 capture_params.requested_format.pixel_format = | 464 capture_params.requested_format.pixel_format = |
| (...skipping 22 matching lines...) Expand all Loading... |
| 485 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); | 487 CreateScreenCaptureDevice(scoped_ptr<webrtc::DesktopCapturer>(mock_capturer)); |
| 486 | 488 |
| 487 media::VideoCaptureFormat format; | 489 media::VideoCaptureFormat format; |
| 488 base::WaitableEvent done_event(false, false); | 490 base::WaitableEvent done_event(false, false); |
| 489 | 491 |
| 490 int frame_size = 0; | 492 int frame_size = 0; |
| 491 output_frame_.reset(new webrtc::BasicDesktopFrame( | 493 output_frame_.reset(new webrtc::BasicDesktopFrame( |
| 492 webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1))); | 494 webrtc::DesktopSize(kTestFrameWidth1, kTestFrameHeight1))); |
| 493 | 495 |
| 494 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); | 496 scoped_ptr<MockDeviceClient> client(new MockDeviceClient()); |
| 495 EXPECT_CALL(*client, OnError(_)).Times(0); | 497 EXPECT_CALL(*client, OnError(_,_)).Times(0); |
| 496 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( | 498 EXPECT_CALL(*client, OnIncomingCapturedData(_, _, _, _, _)).WillRepeatedly( |
| 497 DoAll(Invoke(this, &DesktopCaptureDeviceTest::CopyFrame), | 499 DoAll(Invoke(this, &DesktopCaptureDeviceTest::CopyFrame), |
| 498 SaveArg<1>(&frame_size), | 500 SaveArg<1>(&frame_size), |
| 499 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); | 501 InvokeWithoutArgs(&done_event, &base::WaitableEvent::Signal))); |
| 500 | 502 |
| 501 media::VideoCaptureParams capture_params; | 503 media::VideoCaptureParams capture_params; |
| 502 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, | 504 capture_params.requested_format.frame_size.SetSize(kTestFrameWidth1, |
| 503 kTestFrameHeight1); | 505 kTestFrameHeight1); |
| 504 capture_params.requested_format.frame_rate = kFrameRate; | 506 capture_params.requested_format.frame_rate = kFrameRate; |
| 505 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; | 507 capture_params.requested_format.pixel_format = media::PIXEL_FORMAT_I420; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 519 frame_size); | 521 frame_size); |
| 520 for (int i = 0; i < output_frame_->size().height(); ++i) { | 522 for (int i = 0; i < output_frame_->size().height(); ++i) { |
| 521 EXPECT_EQ(0, | 523 EXPECT_EQ(0, |
| 522 memcmp(inverted_frame->data() + i * inverted_frame->stride(), | 524 memcmp(inverted_frame->data() + i * inverted_frame->stride(), |
| 523 output_frame_->data() + i * output_frame_->stride(), | 525 output_frame_->data() + i * output_frame_->stride(), |
| 524 output_frame_->stride())); | 526 output_frame_->stride())); |
| 525 } | 527 } |
| 526 } | 528 } |
| 527 | 529 |
| 528 } // namespace content | 530 } // namespace content |
| OLD | NEW |