(Auto)update libjingle 81063831-> 81073932

git-svn-id: http://webrtc.googlecode.com/svn/trunk@7774 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
buildbot@webrtc.org 2014-12-01 17:57:36 +00:00
parent 7f722492f1
commit 32ec0dd032
2 changed files with 54 additions and 10 deletions

View File

@ -3216,6 +3216,10 @@ bool WebRtcVideoMediaChannel::SendFrame(
if (!send_channel) {
return false;
}
bool changed;
send_channel->SetLastCapturedFrameInfo(frame, is_screencast, &changed);
if (!send_codec_) {
// Send codec has not been set. No reason to process the frame any further.
return false;
@ -3229,8 +3233,6 @@ bool WebRtcVideoMediaChannel::SendFrame(
return true;
}
bool changed;
send_channel->SetLastCapturedFrameInfo(frame, is_screencast, &changed);
if (changed) {
// If the last captured frame info changed, then calling
// SetSendParams will update to the latest resolution.
@ -3877,20 +3879,32 @@ bool WebRtcVideoMediaChannel::SetSendParams(
MaybeRegisterExternalEncoder(send_channel, send_params.codec);
CapturedFrameInfo frame;
send_channel->last_captured_frame_info().Get(&frame);
if (!send_channel->last_captured_frame_info().Get(&frame)) {
// When we don't have a frame yet, configure the encoder with a
// 2x2 frame (the smallest possible I420 frame). This gives us
// low memory usage but also makes it so configuration errors are
// discovered at the time we apply the settings rather than when
// we get the first frame (waiting for the first frame to know
// that you gave a bad codec parameter could make debugging hard).
frame.width = 2;
frame.height = 2;
// TODO(pthatcher): Evaluate the risk of not setting up an encoder
// at all until we have a frame. Once we feel it's worth the
// risk, we can do something like this:
// send_channel->set_send_params(send_params);
// return true;
}
// 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<size_t>(max.width);
size_t max_height = static_cast<size_t>(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;
if ((!frame.screencast &&
(frame.width > max.width || frame.height > max.height))) {
frame.width = max.width;
frame.height = max.height;
}
webrtc::VideoCodec codec;

View File

@ -371,6 +371,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecs) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(vie_.GetHybridNackFecStatus(channel_num));
@ -379,12 +380,21 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecs) {
// TODO(juberti): Check RTCP, PLI, TMMBR.
}
TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsBeforeFrameRegistersTinyFormat) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(channel_num, 2, 2);
}
// Test that ViE Channel doesn't call SetSendCodec again if same codec is tried
// to apply.
TEST_F(WebRtcVideoEngineTestFake, DontResetSetSendCodec) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(vie_.GetHybridNackFecStatus(channel_num));
@ -403,6 +413,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithMinMaxBitrate) {
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMinBitrate] = "10";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "20";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(
@ -419,6 +430,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithStartBitrate) {
int channel_num = vie_.GetLastChannel();
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamStartBitrate] = "450";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(channel_num,
@ -441,6 +453,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithMinMaxStartBitrate) {
codecs[0].params[cricket::kCodecParamMinBitrate] = "10";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "20";
codecs[0].params[cricket::kCodecParamStartBitrate] = "14";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(
@ -458,6 +471,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithMinMaxBitrateInvalid) {
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMinBitrate] = "30";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "20";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_FALSE(channel_->SetSendCodecs(codecs));
}
@ -467,6 +481,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithLargeMinMaxBitrate) {
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMinBitrate] = "1000";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "3000";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(
@ -479,6 +494,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithMaxQuantization) {
int channel_num = vie_.GetLastChannel();
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMaxQuantization] = "21";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(channel_num,
@ -502,6 +518,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetOptionsWithMaxBitrate) {
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMinBitrate] = "10";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "20";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(
@ -527,6 +544,7 @@ TEST_F(WebRtcVideoEngineTestFake, MaxBitrateResetWithConferenceMode) {
std::vector<cricket::VideoCodec> codecs(engine_.codecs());
codecs[0].params[cricket::kCodecParamMinBitrate] = "10";
codecs[0].params[cricket::kCodecParamMaxBitrate] = "20";
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codecs));
VerifyVP8SendCodec(
@ -552,6 +570,7 @@ TEST_F(WebRtcVideoEngineTestFake, StartSendBitrate) {
cricket::VideoCodec codec(kVP8Codec);
std::vector<cricket::VideoCodec> codec_list;
codec_list.push_back(codec);
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codec_list));
VerifyVP8SendCodec(send_channel, kVP8Codec.width, kVP8Codec.height, 0,
kMaxBandwidthKbps, kMinBandwidthKbps,
@ -601,6 +620,7 @@ TEST_F(WebRtcVideoEngineTestFake, ConstrainSendCodecs) {
codec_list.push_back(codec);
// Set send codec and verify codec has been constrained.
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codec_list));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height);
}
@ -617,6 +637,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsRejectBadFormat) {
codec_list.push_back(codec);
// Verify SetSendCodecs failed and send codec is not changed on engine.
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_FALSE(channel_->SetSendCodecs(codec_list));
webrtc::VideoCodec gcodec;
// Set plType to something other than the value to test against ensuring
@ -650,6 +671,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsRejectBadCodec) {
codec_list.push_back(codec);
// Verify SetSendCodecs failed and send codec is not changed on engine.
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_FALSE(channel_->SetSendCodecs(codec_list));
webrtc::VideoCodec gcodec;
// Set plType to something other than the value to test against ensuring
@ -667,6 +689,7 @@ TEST_F(WebRtcVideoEngineTestFake, ResetVieSendCodecOnNewFrameSize) {
// Set send codec.
std::vector<cricket::VideoCodec> codec_list;
codec_list.push_back(kVP8Codec);
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(codec_list));
EXPECT_TRUE(channel_->AddSendStream(
cricket::StreamParams::CreateLegacy(123)));
@ -1019,6 +1042,7 @@ TEST_F(WebRtcVideoEngineTestFake, BufferedModeLatency) {
TEST_F(WebRtcVideoEngineTestFake, AdditiveVideoOptions) {
EXPECT_TRUE(SetupEngine());
EXPECT_TRUE(channel_->AddSendStream(cricket::StreamParams::CreateLegacy(1)));
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
channel_->SetSendCodecs(engine_.codecs());
int first_send_channel = vie_.GetLastChannel();
@ -1428,6 +1452,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetSend) {
TEST_F(WebRtcVideoEngineTestFake, SetBandwidthAuto) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
EXPECT_TRUE(channel_->SetMaxSendBandwidth(cricket::kAutoBandwidth));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height);
@ -1437,6 +1462,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetBandwidthAuto) {
TEST_F(WebRtcVideoEngineTestFake, SetBandwidthCapped) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
EXPECT_TRUE(channel_->SetMaxSendBandwidth(768000));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height, 0, 768U);
@ -1447,6 +1473,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetBandwidthCapped) {
TEST_F(WebRtcVideoEngineTestFake, SetMaxBandwidthBelowDefaultStart) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
int max_bandwidth_kbps = (kMinBandwidthKbps + kStartBandwidthKbps) / 2;
EXPECT_TRUE(channel_->SetMaxSendBandwidth(max_bandwidth_kbps * 1000));
@ -1459,6 +1486,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetMaxBandwidthBelowDefaultStart) {
TEST_F(WebRtcVideoEngineTestFake, SetMaxBandwidthBelowMin) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
int max_bandwidth_kbps = kMinBandwidthKbps / 2;
EXPECT_TRUE(channel_->SetMaxSendBandwidth(max_bandwidth_kbps * 1000));
@ -1471,6 +1499,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetStartBandwidthOption) {
EXPECT_TRUE(SetupEngine());
int channel_num = vie_.GetLastChannel();
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height, 0,
kMaxBandwidthKbps, kMinBandwidthKbps, kStartBandwidthKbps);
@ -1493,6 +1522,7 @@ TEST_F(WebRtcVideoEngineTestFake, SetBandwidthInConference) {
cricket::VideoOptions options;
options.conference_mode.Set(true);
EXPECT_TRUE(channel_->SetOptions(options));
SendI420Frame(kVP8Codec.width, kVP8Codec.height);
EXPECT_TRUE(channel_->SetSendCodecs(engine_.codecs()));
VerifyVP8SendCodec(channel_num, kVP8Codec.width, kVP8Codec.height);