Upstream commit: https://webrtc.googlesource.com/src/+/888fb5647ce3fe5740a33500eaf731ec8c6b1b0d Use StrongAlias for RTP header extension identification. This change introduces RtpHeaderExtensionId as a StrongAlias to improve type safety for RTP header extension IDs. The type is used throughout the RTP stack. The code previous to this change has many different places where it defines what a valid ID is (between 1 and 255) by checking it - having a separate type allows us to centralize that check for validity. IDs need to be allocated at an RTP transport level. Manufacturing your own ID is a footgun - sooner or later the ID you manufacture will be used by the allocator, leading to an unexpected error situation. Having a separate type allows the reader to easily figure out where IDs are being created, and verify that it's either in an unit test or in the allocator. Key changes: - RtpHeaderExtensionId defined in api/rtp_header_extension_id.h - Backwards compatible overloads (taking int) added to public APIs in api/ and modules/rtp_rtcp/ to ensure no breaking changes for downstream projects. - RtpPacket, RtpHeaderExtensionPicker, and other internal components updated to use the new type. - Updated SRTP components to handle RtpHeaderExtensionId. - Fixed naming conflict in fake_rtp.h by renaming kRtcpReport to kFakeRtcpReport. - Updated numerous tests to comply with the new explicit type. Bug: webrtc:514817938 Change-Id: I79eb728f2ebd5c1fe5a1711eae2162c742fd029c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/473880 Auto-Submit: Harald Alvestrand <hta@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Harald Alvestrand <hta@webrtc.org> Cr-Commit-Position: refs/heads/main@{#47832}
172 lines
6.0 KiB
Diff
172 lines
6.0 KiB
Diff
From: Andreas Pehrson <apehrson@mozilla.com>
|
|
Date: Mon, 18 Jan 2021 11:07:00 +0100
|
|
Subject: Bug 1766646 - (fix-ae0d117d51) ifdef our Csrc impl vs upstream's
|
|
impl, see Bug 1771332.
|
|
|
|
---
|
|
modules/rtp_rtcp/source/rtp_header_extensions.cc | 4 ++++
|
|
modules/rtp_rtcp/source/rtp_header_extensions.h | 4 ++++
|
|
modules/rtp_rtcp/source/rtp_packet.cc | 4 ++++
|
|
modules/rtp_rtcp/source/rtp_sender.cc | 4 ++++
|
|
test/fuzzers/rtp_packet_fuzzer.cc | 4 ++++
|
|
5 files changed, 20 insertions(+)
|
|
|
|
diff --git a/modules/rtp_rtcp/source/rtp_header_extensions.cc b/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
|
index 4dd236f58d..6c30b519f8 100644
|
|
--- a/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
|
+++ b/modules/rtp_rtcp/source/rtp_header_extensions.cc
|
|
@@ -182,6 +182,7 @@ bool AudioLevelExtension::Write(std::span<uint8_t> data,
|
|
return true;
|
|
}
|
|
|
|
+#if !defined(WEBRTC_MOZILLA_BUILD)
|
|
// An RTP Header Extension for Mixer-to-Client Audio Level Indication
|
|
//
|
|
// https://tools.ietf.org/html/rfc6465
|
|
@@ -230,6 +231,7 @@ bool CsrcAudioLevel::Write(std::span<uint8_t> data,
|
|
}
|
|
return true;
|
|
}
|
|
+#endif
|
|
|
|
// From RFC 5450: Transmission Time Offsets in RTP Streams.
|
|
//
|
|
@@ -422,6 +424,7 @@ bool PlayoutDelayLimits::Write(std::span<uint8_t> data,
|
|
return true;
|
|
}
|
|
|
|
+#if defined(WEBRTC_MOZILLA_BUILD)
|
|
// CSRCAudioLevel
|
|
// Sample Audio Level Encoding Using the One-Byte Header Format
|
|
// Note that the range of len is 1 to 15 which is encoded as 0 to 14
|
|
@@ -460,6 +463,7 @@ bool CsrcAudioLevel::Write(std::span<uint8_t> data,
|
|
// This extension if used must have at least one audio level
|
|
return csrcAudioLevels.numAudioLevels;
|
|
}
|
|
+#endif
|
|
|
|
// Video Content Type.
|
|
//
|
|
diff --git a/modules/rtp_rtcp/source/rtp_header_extensions.h b/modules/rtp_rtcp/source/rtp_header_extensions.h
|
|
index 12405e1646..b5148dff8c 100644
|
|
--- a/modules/rtp_rtcp/source/rtp_header_extensions.h
|
|
+++ b/modules/rtp_rtcp/source/rtp_header_extensions.h
|
|
@@ -110,6 +110,7 @@ class AudioLevelExtension {
|
|
static bool Write(std::span<uint8_t> data, const AudioLevel& extension);
|
|
};
|
|
|
|
+#if !defined(WEBRTC_MOZILLA_BUILD)
|
|
class CsrcAudioLevel {
|
|
public:
|
|
static constexpr RTPExtensionType kId = kRtpExtensionCsrcAudioLevel;
|
|
@@ -124,6 +125,7 @@ class CsrcAudioLevel {
|
|
static bool Write(std::span<uint8_t> data,
|
|
std::span<const uint8_t> csrc_audio_levels);
|
|
};
|
|
+#endif
|
|
|
|
class TransmissionOffset {
|
|
public:
|
|
@@ -309,6 +311,7 @@ class ColorSpaceExtension {
|
|
static size_t WriteLuminance(uint8_t* data, float f, int denominator);
|
|
};
|
|
|
|
+#if defined(WEBRTC_MOZILLA_BUILD)
|
|
class CsrcAudioLevel {
|
|
public:
|
|
static constexpr RTPExtensionType kId = kRtpExtensionCsrcAudioLevel;
|
|
@@ -324,6 +327,7 @@ class CsrcAudioLevel {
|
|
static bool Write(std::span<uint8_t> data,
|
|
const CsrcAudioLevelList& csrcAudioLevels);
|
|
};
|
|
+#endif
|
|
|
|
// Base extension class for RTP header extensions which are strings.
|
|
// Subclasses must defined kId and kUri static constexpr members.
|
|
diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc
|
|
index 234b8e9c59..f76fc11b20 100644
|
|
--- a/modules/rtp_rtcp/source/rtp_packet.cc
|
|
+++ b/modules/rtp_rtcp/source/rtp_packet.cc
|
|
@@ -194,7 +194,9 @@ void RtpPacket::ZeroMutableExtensions() {
|
|
break;
|
|
}
|
|
case RTPExtensionType::kRtpExtensionAudioLevel:
|
|
+#if !defined(WEBRTC_MOZILLA_BUILD)
|
|
case RTPExtensionType::kRtpExtensionCsrcAudioLevel:
|
|
+#endif
|
|
case RTPExtensionType::kRtpExtensionAbsoluteCaptureTime:
|
|
case RTPExtensionType::kRtpExtensionColorSpace:
|
|
case RTPExtensionType::kRtpExtensionCorruptionDetection:
|
|
@@ -213,10 +215,12 @@ void RtpPacket::ZeroMutableExtensions() {
|
|
// Non-mutable extension. Don't change it.
|
|
break;
|
|
}
|
|
+#if defined(WEBRTC_MOZILLA_BUILD)
|
|
case RTPExtensionType::kRtpExtensionCsrcAudioLevel: {
|
|
// TODO: This is a Mozilla addition, we need to add a handler for this.
|
|
RTC_CHECK(false);
|
|
}
|
|
+#endif
|
|
}
|
|
}
|
|
}
|
|
diff --git a/modules/rtp_rtcp/source/rtp_sender.cc b/modules/rtp_rtcp/source/rtp_sender.cc
|
|
index 7293a99aee..5de673c258 100644
|
|
--- a/modules/rtp_rtcp/source/rtp_sender.cc
|
|
+++ b/modules/rtp_rtcp/source/rtp_sender.cc
|
|
@@ -115,7 +115,9 @@ bool IsNonVolatile(RTPExtensionType type) {
|
|
switch (type) {
|
|
case kRtpExtensionTransmissionTimeOffset:
|
|
case kRtpExtensionAudioLevel:
|
|
+#if !defined(WEBRTC_MOZILLA_BUILD)
|
|
case kRtpExtensionCsrcAudioLevel:
|
|
+#endif
|
|
case kRtpExtensionAbsoluteSendTime:
|
|
case kRtpExtensionTransportSequenceNumber:
|
|
case kRtpExtensionTransportSequenceNumber02:
|
|
@@ -140,10 +142,12 @@ bool IsNonVolatile(RTPExtensionType type) {
|
|
case kRtpExtensionNumberOfExtensions:
|
|
RTC_DCHECK_NOTREACHED();
|
|
return false;
|
|
+#if defined(WEBRTC_MOZILLA_BUILD)
|
|
case kRtpExtensionCsrcAudioLevel:
|
|
// TODO: Mozilla implement for CsrcAudioLevel
|
|
RTC_CHECK(false);
|
|
return false;
|
|
+#endif
|
|
}
|
|
RTC_CHECK_NOTREACHED();
|
|
}
|
|
diff --git a/test/fuzzers/rtp_packet_fuzzer.cc b/test/fuzzers/rtp_packet_fuzzer.cc
|
|
index a49bf15938..81c7a5428e 100644
|
|
--- a/test/fuzzers/rtp_packet_fuzzer.cc
|
|
+++ b/test/fuzzers/rtp_packet_fuzzer.cc
|
|
@@ -88,11 +88,13 @@ void FuzzOneInput(FuzzDataHelper fuzz_data) {
|
|
packet.GetExtension<AudioLevelExtension>(&audio_level);
|
|
break;
|
|
}
|
|
+#if !defined(WEBRTC_MOZILLA_BUILD)
|
|
case kRtpExtensionCsrcAudioLevel: {
|
|
std::vector<uint8_t> audio_levels;
|
|
packet.GetExtension<CsrcAudioLevel>(&audio_levels);
|
|
break;
|
|
}
|
|
+#endif
|
|
case kRtpExtensionAbsoluteSendTime:
|
|
uint32_t sendtime;
|
|
packet.GetExtension<AbsoluteSendTime>(&sendtime);
|
|
@@ -182,11 +184,13 @@ void FuzzOneInput(FuzzDataHelper fuzz_data) {
|
|
CorruptionDetectionMessage message;
|
|
packet.GetExtension<CorruptionDetectionExtension>(&message);
|
|
break;
|
|
+#if defined(WEBRTC_MOZILLA_BUILD)
|
|
case kRtpExtensionCsrcAudioLevel: {
|
|
CsrcAudioLevelList levels;
|
|
packet.GetExtension<CsrcAudioLevel>(&levels);
|
|
break;
|
|
}
|
|
+#endif
|
|
}
|
|
}
|
|
|