Chromium Code Reviews| Index: content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
| diff --git a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
| index 45c52dd9fa8a8b1ed3fd11b96b5eba7b48c98613..bf3a2804a2660af9d7ffc648a08363b40c2aee53 100644 |
| --- a/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
| +++ b/content/renderer/media/webrtc/webrtc_video_capturer_adapter_unittest.cc |
| @@ -24,13 +24,15 @@ class WebRtcVideoCapturerAdapterTest |
| public ::testing::Test { |
| public: |
| WebRtcVideoCapturerAdapterTest() |
| - : adapter_(false), |
| + : adapter_(new WebRtcVideoCapturerAdapter( |
| + false, |
| + blink::WebMediaStreamTrack::ContentHintType::None)), |
| output_frame_width_(0), |
| output_frame_height_(0) { |
| - adapter_.AddOrUpdateSink(this, rtc::VideoSinkWants()); |
| + adapter_->AddOrUpdateSink(this, rtc::VideoSinkWants()); |
| } |
| ~WebRtcVideoCapturerAdapterTest() override { |
| - adapter_.RemoveSink(this); |
| + adapter_->RemoveSink(this); |
| } |
| void TestSourceCropFrame(int capture_width, |
| @@ -48,7 +50,7 @@ class WebRtcVideoCapturerAdapterTest |
| scoped_refptr<media::VideoFrame> frame = media::VideoFrame::CreateFrame( |
| media::PIXEL_FORMAT_I420, coded_size, view_rect, natural_size, |
| base::TimeDelta()); |
| - adapter_.OnFrameCaptured(frame); |
| + adapter_->OnFrameCaptured(frame); |
| EXPECT_EQ(natural_width, output_frame_width_); |
| EXPECT_EQ(natural_height, output_frame_height_); |
| } |
| @@ -62,7 +64,7 @@ class WebRtcVideoCapturerAdapterTest |
| media::PIXEL_FORMAT_ARGB, holders, base::Bind(&ReleaseMailboxCB), |
| gfx::Size(10, 10), gfx::Rect(10, 10), gfx::Size(10, 10), |
| base::TimeDelta()); |
| - adapter_.OnFrameCaptured(frame); |
| + adapter_->OnFrameCaptured(frame); |
| ASSERT_TRUE(output_frame_); |
| rtc::scoped_refptr<webrtc::VideoFrameBuffer> texture_frame = |
| output_frame_->video_frame_buffer(); |
| @@ -85,11 +87,54 @@ class WebRtcVideoCapturerAdapterTest |
| output_frame_height_ = frame.height(); |
| } |
| + void TestContentHintResolutionAdaptation( |
| + bool is_screencast, |
| + blink::WebMediaStreamTrack::ContentHintType construction_content_hint, |
| + bool expect_initial_downscale, |
| + blink::WebMediaStreamTrack::ContentHintType set_content_hint, |
| + bool expect_final_downscale) { |
| + // Reset and configure adapter to the test. |
| + adapter_->RemoveSink(this); |
| + adapter_.reset(new WebRtcVideoCapturerAdapter(is_screencast, |
| + construction_content_hint)); |
| + |
| + const int kInputWidth = 1280; |
| + const int kInputHeight = 720; |
| + gfx::Size size(kInputWidth, kInputHeight); |
|
emircan
2016/12/19 21:14:27
const
pbos
2016/12/19 21:42:26
Done.
|
| + scoped_refptr<media::VideoFrame> frame = media::VideoFrame::CreateFrame( |
| + media::PIXEL_FORMAT_I420, size, gfx::Rect(size), size, |
| + base::TimeDelta()); |
| + |
| + // Request smaller scale to make sure scaling normally kicks in. |
| + rtc::VideoSinkWants wants; |
| + wants.max_pixel_count = rtc::Optional<int>(kInputWidth * kInputHeight / 2); |
| + adapter_->AddOrUpdateSink(this, wants); |
| + |
| + adapter_->OnFrameCaptured(frame); |
| + if (expect_initial_downscale) { |
| + EXPECT_LT(output_frame_width_, kInputWidth); |
| + EXPECT_LT(output_frame_height_, kInputHeight); |
| + } else { |
| + EXPECT_EQ(kInputWidth, output_frame_width_); |
| + EXPECT_EQ(kInputHeight, output_frame_height_); |
| + } |
| + |
| + adapter_->SetContentHint(set_content_hint); |
| + adapter_->OnFrameCaptured(frame); |
| + if (expect_final_downscale) { |
| + EXPECT_LT(output_frame_width_, kInputWidth); |
| + EXPECT_LT(output_frame_height_, kInputHeight); |
| + } else { |
| + EXPECT_EQ(kInputWidth, output_frame_width_); |
| + EXPECT_EQ(kInputHeight, output_frame_height_); |
| + } |
| + } |
| + |
| private: |
| const base::MessageLoopForIO message_loop_; |
| const ChildProcess child_process_; |
| - WebRtcVideoCapturerAdapter adapter_; |
| + std::unique_ptr<WebRtcVideoCapturerAdapter> adapter_; |
| base::Optional<webrtc::VideoFrame> output_frame_; |
| int output_frame_width_; |
| int output_frame_height_; |
| @@ -111,4 +156,28 @@ TEST_F(WebRtcVideoCapturerAdapterTest, SendsWithCopyTextureFrameCallback) { |
| TestSourceTextureFrame(); |
| } |
| +TEST_F(WebRtcVideoCapturerAdapterTest, DoesNotAdaptContentHintDetail) { |
| + // Non-screenshare adapter should not adapt frames when detailed is set. |
|
emircan
2016/12/19 21:14:27
Can you parameterize these tests using GetParam()
pbos
2016/12/19 21:42:26
I added the corresponding transitions instead, hop
emircan
2016/12/19 22:37:53
I would highly recommend it because you can easily
pbos
2016/12/19 22:44:27
Ack, will go with this now be because 2/5 paramete
|
| + TestContentHintResolutionAdaptation( |
| + false, blink::WebMediaStreamTrack::ContentHintType::None, true, |
| + blink::WebMediaStreamTrack::ContentHintType::VideoDetailed, false); |
| +} |
| + |
| +TEST_F(WebRtcVideoCapturerAdapterTest, |
| + DoesAdaptScreencastWithFluidContentHint) { |
| + // Screenshare adapter should adapt frames when fluid is set. |
| + TestContentHintResolutionAdaptation( |
| + true, blink::WebMediaStreamTrack::ContentHintType::None, false, |
| + blink::WebMediaStreamTrack::ContentHintType::VideoFluid, true); |
| +} |
| + |
| +TEST_F(WebRtcVideoCapturerAdapterTest, |
| + RespectsConstructionTimeContentHint) { |
| + // Non-screenshare adapter constructed with detailed content hint should not |
| + // adapt before SetContentHint is run. |
| + TestContentHintResolutionAdaptation( |
| + false, blink::WebMediaStreamTrack::ContentHintType::VideoDetailed, false, |
| + blink::WebMediaStreamTrack::ContentHintType::VideoFluid, true); |
| +} |
| + |
| } // namespace content |