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:
parent
87f5c5a4d3
commit
26e3abbb40
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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: [";
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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.";
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user