diff --git a/talk/media/base/fakevideocapturer.h b/talk/media/base/fakevideocapturer.h index ffd8d51843..e8d49c0e83 100644 --- a/talk/media/base/fakevideocapturer.h +++ b/talk/media/base/fakevideocapturer.h @@ -59,16 +59,10 @@ 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 286a510907..1760d8a848 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 = 320; + desired.height = 270; // 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 67b983eeab..88acc3f5a9 100644 --- a/talk/media/webrtc/webrtcvideoengine.cc +++ b/talk/media/webrtc/webrtcvideoengine.cc @@ -3872,10 +3872,18 @@ bool WebRtcVideoMediaChannel::SetSendParams( CapturedFrameInfo frame; send_channel->last_captured_frame_info().Get(&frame); - 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); + // 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; } webrtc::VideoCodec codec; diff --git a/talk/media/webrtc/webrtcvideoengine_unittest.cc b/talk/media/webrtc/webrtcvideoengine_unittest.cc index 5617d313bf..00d6e4b1ed 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 bigger frame and verify vie send codec has been reset to - // the new size. + // Capture a frame bigger than send_codec_ and verify vie send codec has been + // reset (and clipped) to send_codec_. SendI420Frame(kVP8Codec.width * 2, kVP8Codec.height * 2); - VerifyVP8SendCodec(channel_num, kVP8Codec.width * 2, kVP8Codec.height * 2); + VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height); } // 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 88cd327da4..4c6f4ab037 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 16:10 (based on the fake video capture impl). + // set aspect ratio, so it'll be 4:3 (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(400u, size.height); + EXPECT_EQ(480u, size.height); delete capturer; // Try again, but with the encoder config set to 16:9. EXPECT_TRUE(cm_->SetDefaultVideoEncoderConfig(config));