(Auto)update libjingle 72389720-> 72403605
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@6810 4adac7df-926f-26a2-2b94-8c16560cd09d
diff --git a/media/webrtc/webrtcvideoengine.cc b/media/webrtc/webrtcvideoengine.cc
index 7afe5de..1491a9f 100644
--- a/media/webrtc/webrtcvideoengine.cc
+++ b/media/webrtc/webrtcvideoengine.cc
@@ -3786,7 +3786,6 @@
it != receive_codecs_.end(); ++it) {
pt_to_codec[it->plType] = &(*it);
}
- bool rtx_registered = false;
for (std::vector<webrtc::VideoCodec>::iterator it = receive_codecs_.begin();
it != receive_codecs_.end(); ++it) {
if (it->codecType == webrtc::kVideoCodecRED) {
@@ -3797,18 +3796,16 @@
// If this is an RTX codec we have to verify that it is associated with
// a valid video codec which we have RTX support for.
if (_stricmp(it->plName, kRtxCodecName) == 0) {
- // WebRTC only supports one RTX codec at a time.
- if (rtx_registered) {
- LOG(LS_ERROR) << "Only one RTX codec at a time is supported.";
- return false;
- }
std::map<int, int>::iterator apt_it = associated_payload_types_.find(
it->plType);
bool valid_apt = false;
if (apt_it != associated_payload_types_.end()) {
std::map<int, webrtc::VideoCodec*>::iterator codec_it =
pt_to_codec.find(apt_it->second);
- valid_apt = codec_it != pt_to_codec.end();
+ // We currently only support RTX associated with VP8 due to limitations
+ // in webrtc where only one RTX payload type can be registered.
+ valid_apt = codec_it != pt_to_codec.end() &&
+ _stricmp(codec_it->second->plName, kVp8CodecName) == 0;
}
if (!valid_apt) {
LOG(LS_ERROR) << "The RTX codec isn't associated with a known and "
@@ -3820,7 +3817,6 @@
LOG_RTCERR2(SetRtxReceivePayloadType, channel_id, it->plType);
return false;
}
- rtx_registered = true;
continue;
}
if (engine()->vie()->codec()->SetReceiveCodec(channel_id, *it) != 0) {
@@ -3930,13 +3926,10 @@
options_.screencast_min_bitrate.GetWithDefaultIfUnset(0);
bool leaky_bucket = options_.video_leaky_bucket.GetWithDefaultIfUnset(true);
bool reset_send_codec =
- target_width != cur_width || target_height != cur_height;
- if (vie_codec.codecType == webrtc::kVideoCodecVP8) {
- reset_send_codec = reset_send_codec ||
+ target_width != cur_width || target_height != cur_height ||
automatic_resize != vie_codec.codecSpecific.VP8.automaticResizeOn ||
enable_denoising != vie_codec.codecSpecific.VP8.denoisingOn ||
vp8_frame_dropping != vie_codec.codecSpecific.VP8.frameDroppingOn;
- }
if (reset_send_codec) {
// Set the new codec on vie.
@@ -3947,11 +3940,9 @@
vie_codec.minBitrate = target_codec.minBitrate;
vie_codec.maxBitrate = target_codec.maxBitrate;
vie_codec.targetBitrate = 0;
- if (vie_codec.codecType == webrtc::kVideoCodecVP8) {
- vie_codec.codecSpecific.VP8.automaticResizeOn = automatic_resize;
- vie_codec.codecSpecific.VP8.denoisingOn = enable_denoising;
- vie_codec.codecSpecific.VP8.frameDroppingOn = vp8_frame_dropping;
- }
+ vie_codec.codecSpecific.VP8.automaticResizeOn = automatic_resize;
+ vie_codec.codecSpecific.VP8.denoisingOn = enable_denoising;
+ vie_codec.codecSpecific.VP8.frameDroppingOn = vp8_frame_dropping;
MaybeChangeBitrates(channel_id, &vie_codec);
if (engine()->vie()->codec()->SetSendCodec(channel_id, vie_codec) != 0) {
diff --git a/media/webrtc/webrtcvideoengine_unittest.cc b/media/webrtc/webrtcvideoengine_unittest.cc
index 18d90f8..9993a9e 100644
--- a/media/webrtc/webrtcvideoengine_unittest.cc
+++ b/media/webrtc/webrtcvideoengine_unittest.cc
@@ -59,7 +59,6 @@
static const cricket::VideoCodec kVP8Codec180p(100, "VP8", 320, 180, 30, 0);
static const cricket::VideoCodec kVP8Codec(100, "VP8", 640, 400, 30, 0);
-static const cricket::VideoCodec kH264Codec(127, "H264", 640, 400, 30, 0);
static const cricket::VideoCodec kRedCodec(101, "red", 0, 0, 0, 0);
static const cricket::VideoCodec kUlpFecCodec(102, "ulpfec", 0, 0, 0, 0);
static const cricket::VideoCodec* const kVideoCodecs[] = {
@@ -2115,142 +2114,6 @@
EXPECT_TRUE(channel_->RemoveSendStream(kSsrc));
}
-TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithExternalH264) {
- encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
- engine_.SetExternalEncoderFactory(&encoder_factory_);
- EXPECT_TRUE(SetupEngine());
- int channel_num = vie_.GetLastChannel();
-
- std::vector<cricket::VideoCodec> codecs;
- codecs.push_back(kH264Codec);
- cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0);
- rtx_codec.SetParam("apt", kH264Codec.id);
- codecs.push_back(rtx_codec);
- EXPECT_TRUE(channel_->SetSendCodecs(codecs));
-
- EXPECT_EQ(96, vie_.GetRtxSendPayloadType(channel_num));
-
- cricket::StreamParams params =
- cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
- params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
- EXPECT_TRUE(channel_->AddSendStream(params));
-
- EXPECT_EQ(1, vie_.GetNumSsrcs(channel_num));
- EXPECT_EQ(1, vie_.GetNumRtxSsrcs(channel_num));
- EXPECT_EQ(static_cast<int>(kRtxSsrcs1[0]), vie_.GetRtxSsrc(channel_num, 0));
-
- EXPECT_TRUE(vie_.ExternalEncoderRegistered(channel_num, 127));
- EXPECT_EQ(1, vie_.GetNumExternalEncoderRegistered(channel_num));
- EXPECT_EQ(1, encoder_factory_.GetNumCreatedEncoders());
-
- EXPECT_TRUE(channel_->RemoveSendStream(kSsrcs1[0]));
-}
-
-TEST_F(WebRtcVideoEngineTestFake, SetSendCodecsWithVP8AndExternalH264) {
- encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
- engine_.SetExternalEncoderFactory(&encoder_factory_);
- EXPECT_TRUE(SetupEngine());
- int channel_num = vie_.GetLastChannel();
-
- std::vector<cricket::VideoCodec> codecs;
- codecs.push_back(kH264Codec);
- cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0);
- rtx_codec.SetParam("apt", kH264Codec.id);
- codecs.push_back(rtx_codec);
- codecs.push_back(kVP8Codec);
- cricket::VideoCodec rtx_codec2(97, "rtx", 0, 0, 0, 0);
- rtx_codec2.SetParam("apt", kVP8Codec.id);
- codecs.push_back(rtx_codec2);
-
- EXPECT_TRUE(channel_->SetSendCodecs(codecs));
-
- // The first matched codec should be set, i.e., H.264.
-
- EXPECT_EQ(96, vie_.GetRtxSendPayloadType(channel_num));
-
- cricket::StreamParams params =
- cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
- params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
- EXPECT_TRUE(channel_->AddSendStream(params));
-
- EXPECT_EQ(1, vie_.GetNumSsrcs(channel_num));
- EXPECT_EQ(1, vie_.GetNumRtxSsrcs(channel_num));
- EXPECT_EQ(static_cast<int>(kRtxSsrcs1[0]), vie_.GetRtxSsrc(channel_num, 0));
-
- EXPECT_TRUE(vie_.ExternalEncoderRegistered(channel_num, 127));
- EXPECT_EQ(1, vie_.GetNumExternalEncoderRegistered(channel_num));
- EXPECT_EQ(1, encoder_factory_.GetNumCreatedEncoders());
-
- EXPECT_TRUE(channel_->RemoveSendStream(kSsrcs1[0]));
-}
-
-TEST_F(WebRtcVideoEngineTestFake, SetRecvCodecsWithExternalH264) {
- // WebRtcVideoEngine assumes that if we have encode support for a codec, we
- // also have decode support. It doesn't support decode only support. Therefore
- // we here have to register both an encoder and a decoder factory with H264
- // support, to be able to test the decoder factory.
- encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
- decoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264);
- EXPECT_TRUE(SetupEngine());
- engine_.SetExternalEncoderFactory(&encoder_factory_);
- engine_.SetExternalDecoderFactory(&decoder_factory_);
- int channel_num = vie_.GetLastChannel();
-
- std::vector<cricket::VideoCodec> codecs;
- codecs.push_back(kH264Codec);
- cricket::VideoCodec rtx_codec(96, "rtx", 0, 0, 0, 0);
- rtx_codec.SetParam("apt", kH264Codec.id);
- codecs.push_back(rtx_codec);
- EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
-
- EXPECT_EQ(96, vie_.GetRtxRecvPayloadType(channel_num));
-
- cricket::StreamParams params =
- cricket::StreamParams::CreateLegacy(kSsrcs1[0]);
- params.AddFidSsrc(kSsrcs1[0], kRtxSsrcs1[0]);
- EXPECT_TRUE(channel_->AddRecvStream(params));
-
- EXPECT_EQ(1, vie_.GetNumSsrcs(channel_num));
- EXPECT_EQ(static_cast<int>(kRtxSsrcs1[0]),
- vie_.GetRemoteRtxSsrc(channel_num));
-
- EXPECT_TRUE(vie_.ExternalDecoderRegistered(channel_num, 127));
- EXPECT_EQ(1, vie_.GetNumExternalDecoderRegistered(channel_num));
- EXPECT_EQ(1, decoder_factory_.GetNumCreatedDecoders());
-
- EXPECT_TRUE(channel_->RemoveRecvStream(kSsrcs1[0]));
-}
-
-TEST_F(WebRtcVideoEngineTestFake, SetRecvCodecsWithVP8AndExternalH264) {
- encoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264, "H264");
- decoder_factory_.AddSupportedVideoCodecType(webrtc::kVideoCodecH264);
- EXPECT_TRUE(SetupEngine());
- engine_.SetExternalEncoderFactory(&encoder_factory_);
- engine_.SetExternalDecoderFactory(&decoder_factory_);
- int channel_num = vie_.GetLastChannel();
-
- std::vector<cricket::VideoCodec> codecs;
- cricket::VideoCodec rtx_codec(97, "rtx", 0, 0, 0, 0);
- rtx_codec.SetParam("apt", kH264Codec.id);
- codecs.push_back(kH264Codec);
- codecs.push_back(rtx_codec);
-
- cricket::VideoCodec rtx_codec2(96, "rtx", 0, 0, 0, 0);
- rtx_codec2.SetParam("apt", kVP8Codec.id);
- codecs.push_back(kVP8Codec);
- codecs.push_back(rtx_codec);
- // Should fail since WebRTC only supports one RTX codec at a time.
- EXPECT_FALSE(channel_->SetRecvCodecs(codecs));
-
- codecs.pop_back();
-
- // One RTX codec should be fine.
- EXPECT_TRUE(channel_->SetRecvCodecs(codecs));
-
- // The RTX payload type should have been set.
- EXPECT_EQ(rtx_codec.id, vie_.GetRtxRecvPayloadType(channel_num));
-}
-
// Tests that OnReadyToSend will be propagated into ViE.
TEST_F(WebRtcVideoEngineTestFake, OnReadyToSend) {
EXPECT_TRUE(SetupEngine());