Enable corruption detection when the encrypted extension is present

Credit: https://webrtc-review.googlesource.com/c/src/+/365584 with ASAN issue solved.

Bug: webrtc:358039777
Change-Id: If609d9dfe5de3d53970490a87cd71bbc884e680b
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/365680
Commit-Queue: Emil Vardar (xWF) <vardar@google.com>
Reviewed-by: Erik Språng <sprang@webrtc.org>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#43244}
This commit is contained in:
Emil Vardar 2024-10-15 12:46:03 +00:00 committed by WebRTC LUCI CQ
parent e486aedc16
commit 183a522bdc
2 changed files with 45 additions and 7 deletions

View File

@ -1532,13 +1532,6 @@ bool WebRtcVideoSendChannel::AddSendStream(const StreamParams& sp) {
bitrate_allocator_factory_;
config.encoder_settings.encoder_switch_request_callback = this;
// TODO: bugs.webrtc.org/358039777 - Add test when this effectively does
// something.
if (webrtc::RtpExtension::FindHeaderExtensionByUri(
config.rtp.extensions, webrtc::RtpExtension::kCorruptionDetectionUri,
webrtc::RtpExtension::kRequireEncryptedExtension)) {
config.encoder_settings.enable_frame_instrumentation_generator = true;
}
config.crypto_options = crypto_options_;
config.rtp.extmap_allow_mixed = ExtmapAllowMixed();
config.rtcp_report_interval_ms = video_config_.rtcp_report_interval_ms;
@ -2621,6 +2614,13 @@ void WebRtcVideoSendChannel::WebRtcVideoSendStream::RecreateWebRtcStream() {
}
}
}
if (webrtc::RtpExtension::FindHeaderExtensionByUri(
config.rtp.extensions, webrtc::RtpExtension::kCorruptionDetectionUri,
webrtc::RtpExtension::kRequireEncryptedExtension)) {
config.encoder_settings.enable_frame_instrumentation_generator = true;
}
stream_ = call_->CreateVideoSendStream(std::move(config),
parameters_.encoder_config.Copy());

View File

@ -3173,6 +3173,44 @@ TEST_F(WebRtcVideoChannelTest, RecvVideoRotationHeaderExtensions) {
TestSetRecvRtpHeaderExtensions(RtpExtension::kVideoRotationUri);
}
TEST_F(WebRtcVideoChannelTest, SendCorruptionDetectionHeaderExtensions) {
TestSetSendRtpHeaderExtensions(RtpExtension::kCorruptionDetectionUri);
}
TEST_F(WebRtcVideoChannelTest, DisableFrameInstrumentationByDefault) {
EXPECT_TRUE(send_channel_->SetSenderParameters(send_parameters_));
FakeVideoSendStream* send_stream =
AddSendStream(cricket::StreamParams::CreateLegacy(123));
EXPECT_FALSE(send_stream->GetConfig()
.encoder_settings.enable_frame_instrumentation_generator);
}
TEST_F(WebRtcVideoChannelTest,
EnableFrameInstrumentationWhenEncryptedExtensionIsPresent) {
cricket::VideoSenderParameters parameters = send_parameters_;
parameters.extensions.push_back(RtpExtension(
RtpExtension::kCorruptionDetectionUri, /*id=*/1, /*encrypt=*/true));
EXPECT_TRUE(send_channel_->SetSenderParameters(parameters));
FakeVideoSendStream* send_stream =
AddSendStream(cricket::StreamParams::CreateLegacy(123));
EXPECT_TRUE(send_stream->GetConfig()
.encoder_settings.enable_frame_instrumentation_generator);
}
TEST_F(WebRtcVideoChannelTest,
DisableFrameInstrumentationWhenNoEncryptedExtensionIsPresent) {
cricket::VideoSenderParameters parameters = send_parameters_;
parameters.extensions.push_back(RtpExtension(
RtpExtension::kCorruptionDetectionUri, /*id=*/1, /*encrypt=*/false));
EXPECT_TRUE(send_channel_->SetSenderParameters(parameters));
FakeVideoSendStream* send_stream =
AddSendStream(cricket::StreamParams::CreateLegacy(123));
EXPECT_FALSE(send_stream->GetConfig()
.encoder_settings.enable_frame_instrumentation_generator);
}
TEST_F(WebRtcVideoChannelTest, IdenticalSendExtensionsDoesntRecreateStream) {
const int kAbsSendTimeId = 1;
const int kVideoRotationId = 2;