From 52da44b7e61bb6cf3f36c8c4f8de1a888e2814bb Mon Sep 17 00:00:00 2001 From: "magjed@webrtc.org" Date: Thu, 13 Nov 2014 15:43:11 +0000 Subject: [PATCH] WebRtcVideoMediaChannel::SetSendParams: Don't cap resolution BUG=3936 R=pthatcher@webrtc.org Review URL: https://webrtc-codereview.appspot.com/30039004 git-svn-id: http://webrtc.googlecode.com/svn/trunk@7698 4adac7df-926f-26a2-2b94-8c16560cd09d --- talk/media/base/fakevideocapturer.h | 6 ++++++ talk/media/base/videocapturer_unittest.cc | 2 +- talk/media/webrtc/webrtcvideoengine.cc | 16 ++++------------ talk/media/webrtc/webrtcvideoengine_unittest.cc | 6 +++--- talk/session/media/channelmanager_unittest.cc | 4 ++-- 5 files changed, 16 insertions(+), 18 deletions(-) diff --git a/talk/media/base/fakevideocapturer.h b/talk/media/base/fakevideocapturer.h index e8d49c0e8..ffd8d5184 100644 --- a/talk/media/base/fakevideocapturer.h +++ b/talk/media/base/fakevideocapturer.h @@ -59,10 +59,16 @@ class FakeVideoCapturer : public cricket::VideoCapturer { cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); formats.push_back(cricket::VideoFormat(640, 480, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); + formats.push_back(cricket::VideoFormat(640, 400, + cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); formats.push_back(cricket::VideoFormat(320, 240, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); + formats.push_back(cricket::VideoFormat(320, 200, + cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); formats.push_back(cricket::VideoFormat(160, 120, cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); + formats.push_back(cricket::VideoFormat(160, 100, + cricket::VideoFormat::FpsToInterval(30), cricket::FOURCC_I420)); ResetSupportedFormats(formats); } ~FakeVideoCapturer() { diff --git a/talk/media/base/videocapturer_unittest.cc b/talk/media/base/videocapturer_unittest.cc index 1760d8a84..286a51090 100644 --- a/talk/media/base/videocapturer_unittest.cc +++ b/talk/media/base/videocapturer_unittest.cc @@ -341,7 +341,7 @@ TEST_F(VideoCapturerTest, TestResolutionMatch) { EXPECT_EQ(cricket::VideoFormat::FpsToInterval(30), best.interval); desired.width = 480; - desired.height = 270; + desired.height = 320; // Ask for HVGA. Get VGA. EXPECT_TRUE(capturer_.GetBestCaptureFormat(desired, &best)); EXPECT_EQ(640, best.width); diff --git a/talk/media/webrtc/webrtcvideoengine.cc b/talk/media/webrtc/webrtcvideoengine.cc index 88acc3f5a..67b983eea 100644 --- a/talk/media/webrtc/webrtcvideoengine.cc +++ b/talk/media/webrtc/webrtcvideoengine.cc @@ -3872,18 +3872,10 @@ bool WebRtcVideoMediaChannel::SetSendParams( CapturedFrameInfo frame; send_channel->last_captured_frame_info().Get(&frame); - // TODO(pthatcher): This checking of the max height and width is - // only needed because some unit tests bypass the VideoAdapter, and - // others expect behavior from the adapter different than what it - // actually does. We should fix the tests and remove this block. - VideoFormat max = send_channel->adapt_format(); - size_t max_width = static_cast(max.width); - size_t max_height = static_cast(max.height); - if (!send_channel->last_captured_frame_info().IsSet() || - (!frame.screencast && - (frame.width > max_width || frame.height > max_height))) { - frame.width = max_width; - frame.height = max_height; + const VideoFormat max = send_channel->adapt_format(); + if (!send_channel->last_captured_frame_info().IsSet()) { + frame.width = static_cast(max.width); + frame.height = static_cast(max.height); } webrtc::VideoCodec codec; diff --git a/talk/media/webrtc/webrtcvideoengine_unittest.cc b/talk/media/webrtc/webrtcvideoengine_unittest.cc index 00d6e4b1e..5617d313b 100644 --- a/talk/media/webrtc/webrtcvideoengine_unittest.cc +++ b/talk/media/webrtc/webrtcvideoengine_unittest.cc @@ -677,10 +677,10 @@ TEST_F(WebRtcVideoEngineTestFake, ResetVieSendCodecOnNewFrameSize) { SendI420Frame(kVP8Codec.width / 2, kVP8Codec.height / 2); VerifyVP8SendCodec(channel_num, kVP8Codec.width / 2, kVP8Codec.height / 2); - // Capture a frame bigger than send_codec_ and verify vie send codec has been - // reset (and clipped) to send_codec_. + // Capture a bigger frame and verify vie send codec has been reset to + // the new size. SendI420Frame(kVP8Codec.width * 2, kVP8Codec.height * 2); - VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height); + VerifyVP8SendCodec(channel_num, kVP8Codec.width * 2, kVP8Codec.height * 2); } // Test that we set our inbound codecs properly. diff --git a/talk/session/media/channelmanager_unittest.cc b/talk/session/media/channelmanager_unittest.cc index 4c6f4ab03..88cd327da 100644 --- a/talk/session/media/channelmanager_unittest.cc +++ b/talk/session/media/channelmanager_unittest.cc @@ -215,13 +215,13 @@ TEST_F(ChannelManagerTest, DefaultCapturerAspectRatio) { VideoEncoderConfig config(codec, 1, 2); EXPECT_TRUE(cm_->Init()); // A capturer created before the default encoder config is set will have no - // set aspect ratio, so it'll be 4:3 (based on the fake video capture impl). + // set aspect ratio, so it'll be 16:10 (based on the fake video capture impl). VideoCapturer* capturer = cm_->CreateVideoCapturer(); ASSERT_TRUE(capturer != NULL); EXPECT_EQ(CS_RUNNING, capturer->Start(format)); GetCapturerFrameSize size(capturer); EXPECT_EQ(640u, size.width); - EXPECT_EQ(480u, size.height); + EXPECT_EQ(400u, size.height); delete capturer; // Try again, but with the encoder config set to 16:9. EXPECT_TRUE(cm_->SetDefaultVideoEncoderConfig(config));