Reverse |rtx_payload_types| map, and rename.

New name is |rtx_associated_payload_types|.

BUG=webrtc:7135

Review-Url: https://codereview.webrtc.org/3000273002
Cr-Commit-Position: refs/heads/master@{#19514}
This commit is contained in:
nisse 2017-08-25 04:44:25 -07:00 committed by Commit Bot
parent 87f5c5a4d3
commit 26e3abbb40
10 changed files with 74 additions and 48 deletions

View File

@ -86,6 +86,14 @@ bool UseSendSideBwe(const FlexfecReceiveStream::Config& config) {
return UseSendSideBwe(config.rtp_header_extensions, config.transport_cc);
}
const int* FindKeyByValue(const std::map<int, int>& m, int v) {
for (const auto& kv : m) {
if (kv.second == v)
return &kv.first;
}
return nullptr;
}
rtclog::StreamConfig CreateRtcLogStreamConfig(
const VideoReceiveStream::Config& config) {
rtclog::StreamConfig rtclog_config;
@ -97,10 +105,10 @@ rtclog::StreamConfig CreateRtcLogStreamConfig(
rtclog_config.rtp_extensions = config.rtp.extensions;
for (const auto& d : config.decoders) {
auto search = config.rtp.rtx_payload_types.find(d.payload_type);
rtclog_config.codecs.emplace_back(
d.payload_name, d.payload_type,
search != config.rtp.rtx_payload_types.end() ? search->second : 0);
const int* search =
FindKeyByValue(config.rtp.rtx_associated_payload_types, d.payload_type);
rtclog_config.codecs.emplace_back(d.payload_name, d.payload_type,
search ? *search : 0);
}
return rtclog_config;
}

View File

@ -215,8 +215,8 @@ void RampUpTester::ModifyVideoConfigs(
if (rtx_) {
recv_config.rtp.rtx_ssrc = video_rtx_ssrcs_[i];
recv_config.rtp
.rtx_payload_types[send_config->encoder_settings.payload_type] =
send_config->rtp.rtx.payload_type;
.rtx_associated_payload_types[send_config->rtp.rtx.payload_type] =
send_config->encoder_settings.payload_type;
}
++i;
}

View File

@ -113,8 +113,8 @@ std::string VideoReceiveStream::Config::Rtp::ToString() const {
ss << ", ulpfec: " << ulpfec.ToString();
ss << ", rtx_ssrc: " << rtx_ssrc;
ss << ", rtx_payload_types: {";
for (auto& kv : rtx_payload_types) {
ss << kv.first << " (apt) -> " << kv.second << " (pt), ";
for (auto& kv : rtx_associated_payload_types) {
ss << kv.first << " (pt) -> " << kv.second << " (apt), ";
}
ss << '}';
ss << ", extensions: [";

View File

@ -168,14 +168,15 @@ class VideoReceiveStream {
// Set if the stream is protected using FlexFEC.
bool protected_by_flexfec = false;
// Map from video payload type (apt) -> RTX payload type (pt).
// Map from rtx payload type -> media payload type.
// For RTX to be enabled, both an SSRC and this mapping are needed.
std::map<int, int> rtx_payload_types;
std::map<int, int> rtx_associated_payload_types;
// TODO(nisse): This is a temporary accessor function to enable
// reversing and renaming of the rtx_payload_types mapping.
void AddRtxBinding(int rtx_payload_type, int media_payload_type) {
rtx_payload_types[media_payload_type] = rtx_payload_type;
rtx_associated_payload_types[rtx_payload_type] = media_payload_type;
}
// RTP header extensions used for the received stream.
std::vector<RtpExtension> extensions;
} rtp;

View File

@ -2219,10 +2219,10 @@ void WebRtcVideoChannel::WebRtcVideoReceiveStream::ConfigureCodecs(
config_.decoders.push_back(decoder);
}
config_.rtp.rtx_payload_types.clear();
config_.rtp.rtx_associated_payload_types.clear();
for (const VideoCodecSettings& recv_codec : recv_codecs) {
config_.rtp.rtx_payload_types[recv_codec.codec.id] =
recv_codec.rtx_payload_type;
config_.rtp.rtx_associated_payload_types[recv_codec.rtx_payload_type] =
recv_codec.codec.id;
}
config_.rtp.ulpfec = recv_codecs.front().ulpfec;

View File

@ -111,6 +111,16 @@ cricket::MediaConfig GetMediaConfig() {
media_config.video.enable_cpu_overuse_detection = false;
return media_config;
}
// TODO(nisse): Duplicated in call.cc.
const int* FindKeyByValue(const std::map<int, int>& m, int v) {
for (const auto& kv : m) {
if (kv.second == v)
return &kv.first;
}
return nullptr;
}
} // namespace
namespace cricket {
@ -1304,9 +1314,10 @@ TEST_F(WebRtcVideoChannelTest, RecvStreamWithSimAndRtx) {
// Receiver side.
FakeVideoReceiveStream* recv_stream = AddRecvStream(
cricket::CreateSimWithRtxStreamParams("cname", ssrcs, rtx_ssrcs));
EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
EXPECT_FALSE(
recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty());
EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
recv_stream->GetConfig().rtp.rtx_payload_types.size())
recv_stream->GetConfig().rtp.rtx_associated_payload_types.size())
<< "RTX should be mapped for all decoders/payload types.";
EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
}
@ -3142,11 +3153,11 @@ TEST_F(WebRtcVideoChannelTest, SetRecvCodecsWithChangedRtxPayloadType) {
ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
const webrtc::VideoReceiveStream::Config& config_before =
fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
EXPECT_EQ(1U, config_before.rtp.rtx_payload_types.size());
auto it_before =
config_before.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
ASSERT_NE(it_before, config_before.rtp.rtx_payload_types.end());
EXPECT_EQ(kUnusedPayloadType1, it_before->second);
EXPECT_EQ(1U, config_before.rtp.rtx_associated_payload_types.size());
const int* payload_type_before = FindKeyByValue(
config_before.rtp.rtx_associated_payload_types, GetEngineCodec("VP8").id);
ASSERT_NE(payload_type_before, nullptr);
EXPECT_EQ(kUnusedPayloadType1, *payload_type_before);
EXPECT_EQ(kRtxSsrcs1[0], config_before.rtp.rtx_ssrc);
// Change payload type for RTX.
@ -3155,11 +3166,11 @@ TEST_F(WebRtcVideoChannelTest, SetRecvCodecsWithChangedRtxPayloadType) {
ASSERT_EQ(1U, fake_call_->GetVideoReceiveStreams().size());
const webrtc::VideoReceiveStream::Config& config_after =
fake_call_->GetVideoReceiveStreams()[0]->GetConfig();
EXPECT_EQ(1U, config_after.rtp.rtx_payload_types.size());
auto it_after =
config_after.rtp.rtx_payload_types.find(GetEngineCodec("VP8").id);
ASSERT_NE(it_after, config_after.rtp.rtx_payload_types.end());
EXPECT_EQ(kUnusedPayloadType2, it_after->second);
EXPECT_EQ(1U, config_after.rtp.rtx_associated_payload_types.size());
const int* payload_type_after = FindKeyByValue(
config_after.rtp.rtx_associated_payload_types, GetEngineCodec("VP8").id);
ASSERT_NE(payload_type_after, nullptr);
EXPECT_EQ(kUnusedPayloadType2, *payload_type_after);
EXPECT_EQ(kRtxSsrcs1[0], config_after.rtp.rtx_ssrc);
}
@ -3783,9 +3794,10 @@ TEST_F(WebRtcVideoChannelTest, DefaultReceiveStreamReconfiguresToUseRtx) {
ASSERT_EQ(1u, fake_call_->GetVideoReceiveStreams().size())
<< "AddRecvStream should have reconfigured, not added a new receiver.";
recv_stream = fake_call_->GetVideoReceiveStreams()[0];
EXPECT_FALSE(recv_stream->GetConfig().rtp.rtx_payload_types.empty());
EXPECT_FALSE(
recv_stream->GetConfig().rtp.rtx_associated_payload_types.empty());
EXPECT_EQ(recv_stream->GetConfig().decoders.size(),
recv_stream->GetConfig().rtp.rtx_payload_types.size())
recv_stream->GetConfig().rtp.rtx_associated_payload_types.size())
<< "RTX should be mapped for all decoders/payload types.";
EXPECT_EQ(rtx_ssrcs[0], recv_stream->GetConfig().rtp.rtx_ssrc);
}

View File

@ -865,8 +865,9 @@ class FlexfecRenderObserver : public test::EndToEndTest,
(*receive_configs)[0].rtp.rtx_ssrc = test::CallTest::kSendRtxSsrcs[0];
(*receive_configs)[0]
.rtp.rtx_payload_types[test::CallTest::kVideoSendPayloadType] =
test::CallTest::kSendRtxPayloadType;
.rtp
.rtx_associated_payload_types[test::CallTest::kSendRtxPayloadType] =
test::CallTest::kVideoSendPayloadType;
}
}
@ -1182,8 +1183,9 @@ void EndToEndTest::DecodesRetransmittedFrame(bool enable_rtx, bool enable_red) {
send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
(*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0];
(*receive_configs)[0].rtp.rtx_payload_types[payload_type_] =
kSendRtxPayloadType;
(*receive_configs)[0]
.rtp.rtx_associated_payload_types[kSendRtxPayloadType] =
payload_type_;
}
// Configure encoding and decoding with VP8, since generic packetization
// doesn't support FEC with NACK.
@ -2773,8 +2775,9 @@ void EndToEndTest::VerifyHistogramStats(bool use_rtx,
send_config->rtp.rtx.ssrcs.push_back(kSendRtxSsrcs[0]);
send_config->rtp.rtx.payload_type = kSendRtxPayloadType;
(*receive_configs)[0].rtp.rtx_ssrc = kSendRtxSsrcs[0];
(*receive_configs)[0].rtp.rtx_payload_types[kFakeVideoSendPayloadType] =
kSendRtxPayloadType;
(*receive_configs)[0]
.rtp.rtx_associated_payload_types[kSendRtxPayloadType] =
kFakeVideoSendPayloadType;
}
// RTT needed for RemoteNtpTimeEstimator for the receive stream.
(*receive_configs)[0].rtp.rtcp_xr.receiver_reference_time_report = true;
@ -3540,8 +3543,9 @@ TEST_F(EndToEndTest, GetStats) {
(*receive_configs)[i].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
(*receive_configs)[i].rtp.rtx_ssrc = kSendRtxSsrcs[i];
(*receive_configs)[i].rtp.rtx_payload_types[kFakeVideoSendPayloadType] =
kSendRtxPayloadType;
(*receive_configs)[i]
.rtp.rtx_associated_payload_types[kSendRtxPayloadType] =
kFakeVideoSendPayloadType;
}
for (size_t i = 0; i < kNumSsrcs; ++i)
@ -4323,8 +4327,9 @@ TEST_F(EndToEndTest, MAYBE_TestFlexfecRtpStatePreservation) {
CreateMatchingReceiveConfigs(receive_transport.get());
video_receive_configs_[0].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
video_receive_configs_[0].rtp.rtx_ssrc = kSendRtxSsrcs[0];
video_receive_configs_[0].rtp.rtx_payload_types[kVideoSendPayloadType] =
kSendRtxPayloadType;
video_receive_configs_[0]
.rtp.rtx_associated_payload_types[kSendRtxPayloadType] =
kVideoSendPayloadType;
// The matching FlexFEC receive config is not created by
// CreateMatchingReceiveConfigs since this is not a test::BaseTest.
@ -4824,7 +4829,7 @@ TEST_F(EndToEndTest, VerifyDefaultVideoReceiveConfigParameters) {
<< "RTCP XR settings require rtcp-xr to be negotiated.";
EXPECT_EQ(0U, default_receive_config.rtp.rtx_ssrc)
<< "Enabling RTX requires ssrc-group: FID negotiation";
EXPECT_TRUE(default_receive_config.rtp.rtx_payload_types.empty())
EXPECT_TRUE(default_receive_config.rtp.rtx_associated_payload_types.empty())
<< "Enabling RTX requires rtpmap: rtx negotiation.";
EXPECT_TRUE(default_receive_config.rtp.extensions.empty())
<< "Enabling RTP extensions require negotiation.";

View File

@ -238,8 +238,8 @@ void RtpReplay() {
receive_config.rtp.remote_ssrc = flags::Ssrc();
receive_config.rtp.local_ssrc = kReceiverLocalSsrc;
receive_config.rtp.rtx_ssrc = flags::SsrcRtx();
receive_config.rtp.rtx_payload_types[flags::PayloadType()] =
flags::PayloadTypeRtx();
receive_config.rtp.rtx_associated_payload_types[flags::PayloadTypeRtx()] =
flags::PayloadType();
receive_config.rtp.ulpfec.ulpfec_payload_type = flags::FecPayloadType();
receive_config.rtp.ulpfec.red_payload_type = flags::RedPayloadType();
receive_config.rtp.nack.rtp_history_ms = 1000;

View File

@ -148,9 +148,9 @@ RtpVideoStreamReceiver::RtpVideoStreamReceiver(
if (config_.rtp.rtx_ssrc) {
rtp_payload_registry_.SetRtxSsrc(config_.rtp.rtx_ssrc);
for (const auto& kv : config_.rtp.rtx_payload_types) {
RTC_DCHECK(kv.second != 0);
rtp_payload_registry_.SetRtxPayloadType(kv.second, kv.first);
for (const auto& kv : config_.rtp.rtx_associated_payload_types) {
RTC_DCHECK_NE(kv.first, 0);
rtp_payload_registry_.SetRtxPayloadType(kv.first, kv.second);
}
}

View File

@ -1484,8 +1484,8 @@ void VideoQualityTest::SetupVideo(Transport* send_transport,
for (size_t i = 0; i < num_video_streams; ++i) {
video_receive_configs_[i].rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
video_receive_configs_[i].rtp.rtx_ssrc = kSendRtxSsrcs[i];
video_receive_configs_[i].rtp.rtx_payload_types[payload_type] =
kSendRtxPayloadType;
video_receive_configs_[i]
.rtp.rtx_associated_payload_types[kSendRtxPayloadType] = payload_type;
video_receive_configs_[i].rtp.transport_cc = params_.call.send_side_bwe;
video_receive_configs_[i].rtp.remb = !params_.call.send_side_bwe;
// Enable RTT calculation so NTP time estimator will work.
@ -1627,8 +1627,8 @@ void VideoQualityTest::SetupThumbnails(Transport* send_transport,
thumbnail_receive_config.rtp.nack.rtp_history_ms = kNackRtpHistoryMs;
thumbnail_receive_config.rtp.rtx_ssrc = kThumbnailRtxSsrcStart + i;
thumbnail_receive_config.rtp.rtx_payload_types[kPayloadTypeVP8] =
kSendRtxPayloadType;
thumbnail_receive_config.rtp
.rtx_associated_payload_types[kSendRtxPayloadType] = kPayloadTypeVP8;
thumbnail_receive_config.rtp.transport_cc = params_.call.send_side_bwe;
thumbnail_receive_config.rtp.remb = !params_.call.send_side_bwe;