Rename AudioLevel to AudioLevelExtension in rtp_header_extensions.h

To prepare for a new AudioLevel struct to be added to the public WebRTC API, rename the internal RTP extension reader/writer class to AudioLevelExtension. A temporary alias is provided to avoid breaking downstream projects.

Bug: webrtc:15788
Change-Id: Ie231668f25932fd9b539229114128b1d0b949a6e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/339887
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#41787}
This commit is contained in:
Joachim Reiersen 2024-02-22 11:26:04 -08:00 committed by WebRTC LUCI CQ
parent b2f827cb79
commit 4a97488714
18 changed files with 94 additions and 73 deletions

View file

@ -109,7 +109,7 @@ TEST_F(AudioSendStreamCallTest, SupportsAudioLevel) {
class AudioLevelObserver : public AudioSendTest { class AudioLevelObserver : public AudioSendTest {
public: public:
AudioLevelObserver() : AudioSendTest() { AudioLevelObserver() : AudioSendTest() {
extensions_.Register<AudioLevel>(kAudioLevelExtensionId); extensions_.Register<AudioLevelExtension>(kAudioLevelExtensionId);
} }
Action OnSendRtp(rtc::ArrayView<const uint8_t> packet) override { Action OnSendRtp(rtc::ArrayView<const uint8_t> packet) override {
@ -118,7 +118,8 @@ TEST_F(AudioSendStreamCallTest, SupportsAudioLevel) {
uint8_t audio_level = 0; uint8_t audio_level = 0;
bool voice = false; bool voice = false;
EXPECT_TRUE(rtp_packet.GetExtension<AudioLevel>(&voice, &audio_level)); EXPECT_TRUE(
rtp_packet.GetExtension<AudioLevelExtension>(&voice, &audio_level));
if (audio_level != 0) { if (audio_level != 0) {
// Wait for at least one packet with a non-zero level. // Wait for at least one packet with a non-zero level.
observation_complete_.Set(); observation_complete_.Set();

View file

@ -643,9 +643,9 @@ void ChannelSend::SetSendAudioLevelIndicationStatus(bool enable, int id) {
RTC_DCHECK_RUN_ON(&worker_thread_checker_); RTC_DCHECK_RUN_ON(&worker_thread_checker_);
include_audio_level_indication_.store(enable); include_audio_level_indication_.store(enable);
if (enable) { if (enable) {
rtp_rtcp_->RegisterRtpHeaderExtension(AudioLevel::Uri(), id); rtp_rtcp_->RegisterRtpHeaderExtension(AudioLevelExtension::Uri(), id);
} else { } else {
rtp_rtcp_->DeregisterSendRtpHeaderExtension(AudioLevel::Uri()); rtp_rtcp_->DeregisterSendRtpHeaderExtension(AudioLevelExtension::Uri());
} }
} }

View file

@ -449,7 +449,7 @@ void RtcEventLogEncoderNewFormat::EncodeRtpPacket(const Batch& batch,
{ {
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
if (base_event->template GetExtension<AudioLevel>(&voice_activity, if (base_event->template GetExtension<AudioLevelExtension>(&voice_activity,
&audio_level)) { &audio_level)) {
RTC_DCHECK_LE(audio_level, 0x7Fu); RTC_DCHECK_LE(audio_level, 0x7Fu);
base_audio_level = audio_level; base_audio_level = audio_level;
@ -646,7 +646,7 @@ void RtcEventLogEncoderNewFormat::EncodeRtpPacket(const Batch& batch,
const EventType* event = batch[i + 1]; const EventType* event = batch[i + 1];
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
if (event->template GetExtension<AudioLevel>(&voice_activity, if (event->template GetExtension<AudioLevelExtension>(&voice_activity,
&audio_level)) { &audio_level)) {
RTC_DCHECK_LE(audio_level, 0x7Fu); RTC_DCHECK_LE(audio_level, 0x7Fu);
values[i] = audio_level; values[i] = audio_level;
@ -664,7 +664,7 @@ void RtcEventLogEncoderNewFormat::EncodeRtpPacket(const Batch& batch,
const EventType* event = batch[i + 1]; const EventType* event = batch[i + 1];
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
if (event->template GetExtension<AudioLevel>(&voice_activity, if (event->template GetExtension<AudioLevelExtension>(&voice_activity,
&audio_level)) { &audio_level)) {
RTC_DCHECK_LE(audio_level, 0x7Fu); RTC_DCHECK_LE(audio_level, 0x7Fu);
values[i] = voice_activity; values[i] = voice_activity;

View file

@ -136,7 +136,7 @@ void ConvertRtpPacket(
reconstructed_packet.SetExtension<webrtc::TransportSequenceNumber>( reconstructed_packet.SetExtension<webrtc::TransportSequenceNumber>(
incoming.rtp.header.extension.transportSequenceNumber); incoming.rtp.header.extension.transportSequenceNumber);
if (incoming.rtp.header.extension.hasAudioLevel) if (incoming.rtp.header.extension.hasAudioLevel)
reconstructed_packet.SetExtension<webrtc::AudioLevel>( reconstructed_packet.SetExtension<webrtc::AudioLevelExtension>(
incoming.rtp.header.extension.voiceActivity, incoming.rtp.header.extension.voiceActivity,
incoming.rtp.header.extension.audioLevel); incoming.rtp.header.extension.audioLevel);
if (incoming.rtp.header.extension.hasVideoRotation) if (incoming.rtp.header.extension.hasVideoRotation)

View file

@ -1036,7 +1036,7 @@ ParsedRtcEventLog::GetDefaultHeaderExtensionMap() {
constexpr int kDependencyDescriptorDefaultId = 9; constexpr int kDependencyDescriptorDefaultId = 9;
webrtc::RtpHeaderExtensionMap default_map(/*extmap_allow_mixed=*/true); webrtc::RtpHeaderExtensionMap default_map(/*extmap_allow_mixed=*/true);
default_map.Register<AudioLevel>(kAudioLevelDefaultId); default_map.Register<AudioLevelExtension>(kAudioLevelDefaultId);
default_map.Register<TransmissionOffset>(kTimestampOffsetDefaultId); default_map.Register<TransmissionOffset>(kTimestampOffsetDefaultId);
default_map.Register<AbsoluteSendTime>(kAbsSendTimeDefaultId); default_map.Register<AbsoluteSendTime>(kAbsSendTimeDefaultId);
default_map.Register<VideoOrientation>(kVideoRotationDefaultId); default_map.Register<VideoOrientation>(kVideoRotationDefaultId);

View file

@ -616,9 +616,10 @@ void EventGenerator::RandomizeRtpPacket(
rtp_packet->SetExtension<TransmissionOffset>(prng_.Rand(0x00ffffff)); rtp_packet->SetExtension<TransmissionOffset>(prng_.Rand(0x00ffffff));
} }
if (extension_map.IsRegistered(AudioLevel::kId) && if (extension_map.IsRegistered(AudioLevelExtension::kId) &&
(all_configured_exts || prng_.Rand<bool>())) { (all_configured_exts || prng_.Rand<bool>())) {
rtp_packet->SetExtension<AudioLevel>(prng_.Rand<bool>(), prng_.Rand(127)); rtp_packet->SetExtension<AudioLevelExtension>(prng_.Rand<bool>(),
prng_.Rand(127));
} }
if (extension_map.IsRegistered(AbsoluteSendTime::kId) && if (extension_map.IsRegistered(AbsoluteSendTime::kId) &&
@ -728,8 +729,9 @@ RtpHeaderExtensionMap EventGenerator::NewRtpHeaderExtensionMap(
return !absl::c_linear_search(excluded_extensions, type); return !absl::c_linear_search(excluded_extensions, type);
}; };
if (not_excluded(AudioLevel::kId) && (configure_all || prng_.Rand<bool>())) { if (not_excluded(AudioLevelExtension::kId) &&
extension_map.Register<AudioLevel>(id[0]); (configure_all || prng_.Rand<bool>())) {
extension_map.Register<AudioLevelExtension>(id[0]);
} }
if (not_excluded(TransmissionOffset::kId) && if (not_excluded(TransmissionOffset::kId) &&
(configure_all || prng_.Rand<bool>())) { (configure_all || prng_.Rand<bool>())) {
@ -1026,12 +1028,12 @@ void VerifyLoggedRtpHeader(const Event& original_header,
} }
// AudioLevel header extension. // AudioLevel header extension.
ASSERT_EQ(original_header.template HasExtension<AudioLevel>(), ASSERT_EQ(original_header.template HasExtension<AudioLevelExtension>(),
logged_header.extension.hasAudioLevel); logged_header.extension.hasAudioLevel);
if (logged_header.extension.hasAudioLevel) { if (logged_header.extension.hasAudioLevel) {
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
ASSERT_TRUE(original_header.template GetExtension<AudioLevel>( ASSERT_TRUE(original_header.template GetExtension<AudioLevelExtension>(
&voice_activity, &audio_level)); &voice_activity, &audio_level));
EXPECT_EQ(voice_activity, logged_header.extension.voiceActivity); EXPECT_EQ(voice_activity, logged_header.extension.voiceActivity);
EXPECT_EQ(audio_level, logged_header.extension.audioLevel); EXPECT_EQ(audio_level, logged_header.extension.audioLevel);

View file

@ -1560,8 +1560,8 @@ TEST_P(WebRtcVoiceEngineTestFake, OnPacketReceivedIdentifiesExtensions) {
webrtc::RtpHeaderExtensionMap extension_map(parameters.extensions); webrtc::RtpHeaderExtensionMap extension_map(parameters.extensions);
webrtc::RtpPacketReceived reference_packet(&extension_map); webrtc::RtpPacketReceived reference_packet(&extension_map);
constexpr uint8_t kAudioLevel = 123; constexpr uint8_t kAudioLevel = 123;
reference_packet.SetExtension<webrtc::AudioLevel>(/*voice_activity=*/true, reference_packet.SetExtension<webrtc::AudioLevelExtension>(
kAudioLevel); /*voice_activity=*/true, kAudioLevel);
// Create a packet without the extension map but with the same content. // Create a packet without the extension map but with the same content.
webrtc::RtpPacketReceived received_packet; webrtc::RtpPacketReceived received_packet;
ASSERT_TRUE(received_packet.Parse(reference_packet.Buffer())); ASSERT_TRUE(received_packet.Parse(reference_packet.Buffer()));
@ -1571,8 +1571,9 @@ TEST_P(WebRtcVoiceEngineTestFake, OnPacketReceivedIdentifiesExtensions) {
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
EXPECT_TRUE(call_.last_received_rtp_packet().GetExtension<webrtc::AudioLevel>( EXPECT_TRUE(call_.last_received_rtp_packet()
&voice_activity, &audio_level)); .GetExtension<webrtc::AudioLevelExtension>(&voice_activity,
&audio_level));
EXPECT_EQ(audio_level, kAudioLevel); EXPECT_EQ(audio_level, kAudioLevel);
} }

View file

@ -34,7 +34,7 @@ constexpr ExtensionInfo CreateExtensionInfo() {
constexpr ExtensionInfo kExtensions[] = { constexpr ExtensionInfo kExtensions[] = {
CreateExtensionInfo<TransmissionOffset>(), CreateExtensionInfo<TransmissionOffset>(),
CreateExtensionInfo<AudioLevel>(), CreateExtensionInfo<AudioLevelExtension>(),
CreateExtensionInfo<CsrcAudioLevel>(), CreateExtensionInfo<CsrcAudioLevel>(),
CreateExtensionInfo<AbsoluteSendTime>(), CreateExtensionInfo<AbsoluteSendTime>(),
CreateExtensionInfo<AbsoluteCaptureTimeExtension>(), CreateExtensionInfo<AbsoluteCaptureTimeExtension>(),

View file

@ -85,8 +85,8 @@ TEST(RtpHeaderExtensionTest, NonUniqueId) {
RtpHeaderExtensionMap map; RtpHeaderExtensionMap map;
EXPECT_TRUE(map.Register<TransmissionOffset>(3)); EXPECT_TRUE(map.Register<TransmissionOffset>(3));
EXPECT_FALSE(map.Register<AudioLevel>(3)); EXPECT_FALSE(map.Register<AudioLevelExtension>(3));
EXPECT_TRUE(map.Register<AudioLevel>(4)); EXPECT_TRUE(map.Register<AudioLevelExtension>(4));
} }
TEST(RtpHeaderExtensionTest, GetType) { TEST(RtpHeaderExtensionTest, GetType) {

View file

@ -160,7 +160,7 @@ bool AbsoluteCaptureTimeExtension::Write(rtc::ArrayView<uint8_t> data,
// | ID | len=1 |V| level | // | ID | len=1 |V| level |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// Sample Audio Level Encoding Using the Two-Byte Header Format // Sample Audio Level Encoding Using the Two-Byte Header Format
bool AudioLevel::Parse(rtc::ArrayView<const uint8_t> data, bool AudioLevelExtension::Parse(rtc::ArrayView<const uint8_t> data,
bool* voice_activity, bool* voice_activity,
uint8_t* audio_level) { uint8_t* audio_level) {
// One-byte and two-byte format share the same data definition. // One-byte and two-byte format share the same data definition.
@ -171,7 +171,7 @@ bool AudioLevel::Parse(rtc::ArrayView<const uint8_t> data,
return true; return true;
} }
bool AudioLevel::Write(rtc::ArrayView<uint8_t> data, bool AudioLevelExtension::Write(rtc::ArrayView<uint8_t> data,
bool voice_activity, bool voice_activity,
uint8_t audio_level) { uint8_t audio_level) {
// One-byte and two-byte format share the same data definition. // One-byte and two-byte format share the same data definition.

View file

@ -28,6 +28,13 @@
#include "api/video/video_timing.h" #include "api/video/video_timing.h"
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
// This file contains class definitions for reading/writing each RTP header
// extension. Each class must be defined such that it is compatible with being
// an argument to the templated RtpPacket::GetExtension and
// RtpPacketToSend::SetExtension methods. New header extensions must have class
// names ending with "Extension", for the purpose of avoiding collisions with
// RTP extension information exposed in the public API of WebRTC.
namespace webrtc { namespace webrtc {
class AbsoluteSendTime { class AbsoluteSendTime {
@ -75,7 +82,7 @@ class AbsoluteCaptureTimeExtension {
const AbsoluteCaptureTime& extension); const AbsoluteCaptureTime& extension);
}; };
class AudioLevel { class AudioLevelExtension {
public: public:
static constexpr RTPExtensionType kId = kRtpExtensionAudioLevel; static constexpr RTPExtensionType kId = kRtpExtensionAudioLevel;
static constexpr uint8_t kValueSizeBytes = 1; static constexpr uint8_t kValueSizeBytes = 1;
@ -93,6 +100,9 @@ class AudioLevel {
bool voice_activity, bool voice_activity,
uint8_t audio_level); uint8_t audio_level);
}; };
// TODO: bugs.webrtc.org/15788 - In two weeks remove this alias and put new
// meaning into AudioLevel class.
using AudioLevel [[deprecated]] = AudioLevelExtension;
class CsrcAudioLevel { class CsrcAudioLevel {
public: public:

View file

@ -61,7 +61,7 @@ void RtpPacketReceived::GetHeader(RTPHeader* header) const {
&header->extension.feedback_request) || &header->extension.feedback_request) ||
GetExtension<TransportSequenceNumber>( GetExtension<TransportSequenceNumber>(
&header->extension.transportSequenceNumber); &header->extension.transportSequenceNumber);
header->extension.hasAudioLevel = GetExtension<AudioLevel>( header->extension.hasAudioLevel = GetExtension<AudioLevelExtension>(
&header->extension.voiceActivity, &header->extension.audioLevel); &header->extension.voiceActivity, &header->extension.audioLevel);
header->extension.hasVideoRotation = header->extension.hasVideoRotation =
GetExtension<VideoOrientation>(&header->extension.videoRotation); GetExtension<VideoOrientation>(&header->extension.videoRotation);

View file

@ -230,14 +230,14 @@ TEST(RtpPacketTest, CreateWithExtension) {
TEST(RtpPacketTest, CreateWith2Extensions) { TEST(RtpPacketTest, CreateWith2Extensions) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
packet.SetSequenceNumber(kSeqNum); packet.SetSequenceNumber(kSeqNum);
packet.SetTimestamp(kTimestamp); packet.SetTimestamp(kTimestamp);
packet.SetSsrc(kSsrc); packet.SetSsrc(kSsrc);
packet.SetExtension<TransmissionOffset>(kTimeOffset); packet.SetExtension<TransmissionOffset>(kTimeOffset);
packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel); packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel);
EXPECT_THAT(kPacketWithTOAndAL, EXPECT_THAT(kPacketWithTOAndAL,
ElementsAreArray(packet.data(), packet.size())); ElementsAreArray(packet.data(), packet.size()));
} }
@ -245,7 +245,7 @@ TEST(RtpPacketTest, CreateWith2Extensions) {
TEST(RtpPacketTest, CreateWithTwoByteHeaderExtensionFirst) { TEST(RtpPacketTest, CreateWithTwoByteHeaderExtensionFirst) {
RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true); RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true);
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
extensions.Register<PlayoutDelayLimits>(kTwoByteExtensionId); extensions.Register<PlayoutDelayLimits>(kTwoByteExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
@ -257,7 +257,7 @@ TEST(RtpPacketTest, CreateWithTwoByteHeaderExtensionFirst) {
TimeDelta::Millis(340)); TimeDelta::Millis(340));
ASSERT_TRUE(packet.SetExtension<PlayoutDelayLimits>(playout_delay)); ASSERT_TRUE(packet.SetExtension<PlayoutDelayLimits>(playout_delay));
packet.SetExtension<TransmissionOffset>(kTimeOffset); packet.SetExtension<TransmissionOffset>(kTimeOffset);
packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel); packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel);
EXPECT_THAT(kPacketWithTwoByteExtensionIdFirst, EXPECT_THAT(kPacketWithTwoByteExtensionIdFirst,
ElementsAreArray(packet.data(), packet.size())); ElementsAreArray(packet.data(), packet.size()));
} }
@ -266,7 +266,7 @@ TEST(RtpPacketTest, CreateWithTwoByteHeaderExtensionLast) {
// This test will trigger RtpPacket::PromoteToTwoByteHeaderExtension(). // This test will trigger RtpPacket::PromoteToTwoByteHeaderExtension().
RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true); RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true);
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
extensions.Register<PlayoutDelayLimits>(kTwoByteExtensionId); extensions.Register<PlayoutDelayLimits>(kTwoByteExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
@ -274,7 +274,7 @@ TEST(RtpPacketTest, CreateWithTwoByteHeaderExtensionLast) {
packet.SetTimestamp(kTimestamp); packet.SetTimestamp(kTimestamp);
packet.SetSsrc(kSsrc); packet.SetSsrc(kSsrc);
packet.SetExtension<TransmissionOffset>(kTimeOffset); packet.SetExtension<TransmissionOffset>(kTimeOffset);
packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel); packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel);
EXPECT_THAT(kPacketWithTOAndAL, EXPECT_THAT(kPacketWithTOAndAL,
ElementsAreArray(packet.data(), packet.size())); ElementsAreArray(packet.data(), packet.size()));
// Set extension that requires two-byte header. // Set extension that requires two-byte header.
@ -331,18 +331,20 @@ TEST(RtpPacketTest, TryToCreateWithLongMid) {
TEST(RtpPacketTest, TryToCreateTwoByteHeaderNotSupported) { TEST(RtpPacketTest, TryToCreateTwoByteHeaderNotSupported) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<AudioLevel>(kTwoByteExtensionId); extensions.Register<AudioLevelExtension>(kTwoByteExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
// Set extension that requires two-byte header. // Set extension that requires two-byte header.
EXPECT_FALSE(packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel)); EXPECT_FALSE(
packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel));
} }
TEST(RtpPacketTest, CreateTwoByteHeaderSupportedIfExtmapAllowMixed) { TEST(RtpPacketTest, CreateTwoByteHeaderSupportedIfExtmapAllowMixed) {
RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true); RtpPacketToSend::ExtensionManager extensions(/*extmap_allow_mixed=*/true);
extensions.Register<AudioLevel>(kTwoByteExtensionId); extensions.Register<AudioLevelExtension>(kTwoByteExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
// Set extension that requires two-byte header. // Set extension that requires two-byte header.
EXPECT_TRUE(packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel)); EXPECT_TRUE(
packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel));
} }
TEST(RtpPacketTest, CreateWithMaxSizeHeaderExtension) { TEST(RtpPacketTest, CreateWithMaxSizeHeaderExtension) {
@ -401,13 +403,14 @@ TEST(RtpPacketTest, SetReservedExtensionsAfterPayload) {
const size_t kPayloadSize = 4; const size_t kPayloadSize = 4;
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
EXPECT_TRUE(packet.ReserveExtension<TransmissionOffset>()); EXPECT_TRUE(packet.ReserveExtension<TransmissionOffset>());
packet.SetPayloadSize(kPayloadSize); packet.SetPayloadSize(kPayloadSize);
// Can't set extension after payload. // Can't set extension after payload.
EXPECT_FALSE(packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel)); EXPECT_FALSE(
packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel));
// Unless reserved. // Unless reserved.
EXPECT_TRUE(packet.SetExtension<TransmissionOffset>(kTimeOffset)); EXPECT_TRUE(packet.SetExtension<TransmissionOffset>(kTimeOffset));
} }
@ -679,7 +682,7 @@ TEST(RtpPacketTest, ParseWithOverSizedExtension) {
TEST(RtpPacketTest, ParseWith2Extensions) { TEST(RtpPacketTest, ParseWith2Extensions) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL))); EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL)));
int32_t time_offset; int32_t time_offset;
@ -687,7 +690,8 @@ TEST(RtpPacketTest, ParseWith2Extensions) {
EXPECT_EQ(kTimeOffset, time_offset); EXPECT_EQ(kTimeOffset, time_offset);
bool voice_active; bool voice_active;
uint8_t audio_level; uint8_t audio_level;
EXPECT_TRUE(packet.GetExtension<AudioLevel>(&voice_active, &audio_level)); EXPECT_TRUE(
packet.GetExtension<AudioLevelExtension>(&voice_active, &audio_level));
EXPECT_EQ(kVoiceActive, voice_active); EXPECT_EQ(kVoiceActive, voice_active);
EXPECT_EQ(kAudioLevel, audio_level); EXPECT_EQ(kAudioLevel, audio_level);
} }
@ -695,22 +699,22 @@ TEST(RtpPacketTest, ParseWith2Extensions) {
TEST(RtpPacketTest, ParseSecondPacketWithFewerExtensions) { TEST(RtpPacketTest, ParseSecondPacketWithFewerExtensions) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL))); EXPECT_TRUE(packet.Parse(kPacketWithTOAndAL, sizeof(kPacketWithTOAndAL)));
EXPECT_TRUE(packet.HasExtension<TransmissionOffset>()); EXPECT_TRUE(packet.HasExtension<TransmissionOffset>());
EXPECT_TRUE(packet.HasExtension<AudioLevel>()); EXPECT_TRUE(packet.HasExtension<AudioLevelExtension>());
// Second packet without audio level. // Second packet without audio level.
EXPECT_TRUE(packet.Parse(kPacketWithTO, sizeof(kPacketWithTO))); EXPECT_TRUE(packet.Parse(kPacketWithTO, sizeof(kPacketWithTO)));
EXPECT_TRUE(packet.HasExtension<TransmissionOffset>()); EXPECT_TRUE(packet.HasExtension<TransmissionOffset>());
EXPECT_FALSE(packet.HasExtension<AudioLevel>()); EXPECT_FALSE(packet.HasExtension<AudioLevelExtension>());
} }
TEST(RtpPacketTest, ParseWith2ExtensionsInvalidPadding) { TEST(RtpPacketTest, ParseWith2ExtensionsInvalidPadding) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
EXPECT_TRUE(packet.Parse(kPacketWithTOAndALInvalidPadding, EXPECT_TRUE(packet.Parse(kPacketWithTOAndALInvalidPadding,
sizeof(kPacketWithTOAndALInvalidPadding))); sizeof(kPacketWithTOAndALInvalidPadding)));
@ -719,13 +723,14 @@ TEST(RtpPacketTest, ParseWith2ExtensionsInvalidPadding) {
EXPECT_EQ(kTimeOffset, time_offset); EXPECT_EQ(kTimeOffset, time_offset);
bool voice_active; bool voice_active;
uint8_t audio_level; uint8_t audio_level;
EXPECT_FALSE(packet.GetExtension<AudioLevel>(&voice_active, &audio_level)); EXPECT_FALSE(
packet.GetExtension<AudioLevelExtension>(&voice_active, &audio_level));
} }
TEST(RtpPacketTest, ParseWith2ExtensionsReservedExtensionId) { TEST(RtpPacketTest, ParseWith2ExtensionsReservedExtensionId) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
EXPECT_TRUE(packet.Parse(kPacketWithTOAndALReservedExtensionId, EXPECT_TRUE(packet.Parse(kPacketWithTOAndALReservedExtensionId,
sizeof(kPacketWithTOAndALReservedExtensionId))); sizeof(kPacketWithTOAndALReservedExtensionId)));
@ -734,7 +739,8 @@ TEST(RtpPacketTest, ParseWith2ExtensionsReservedExtensionId) {
EXPECT_EQ(kTimeOffset, time_offset); EXPECT_EQ(kTimeOffset, time_offset);
bool voice_active; bool voice_active;
uint8_t audio_level; uint8_t audio_level;
EXPECT_FALSE(packet.GetExtension<AudioLevel>(&voice_active, &audio_level)); EXPECT_FALSE(
packet.GetExtension<AudioLevelExtension>(&voice_active, &audio_level));
} }
TEST(RtpPacketTest, ParseWithAllFeatures) { TEST(RtpPacketTest, ParseWithAllFeatures) {
@ -778,7 +784,7 @@ TEST(RtpPacketTest, ParseLongTwoByteHeaderExtension) {
TEST(RtpPacketTest, ParseTwoByteHeaderExtensionWithPadding) { TEST(RtpPacketTest, ParseTwoByteHeaderExtensionWithPadding) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTwoByteExtensionId); extensions.Register<TransmissionOffset>(kTwoByteExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
EXPECT_TRUE( EXPECT_TRUE(
packet.Parse(kPacketWithTwoByteHeaderExtensionWithPadding, packet.Parse(kPacketWithTwoByteHeaderExtensionWithPadding,
@ -788,7 +794,8 @@ TEST(RtpPacketTest, ParseTwoByteHeaderExtensionWithPadding) {
EXPECT_EQ(kTimeOffset, time_offset); EXPECT_EQ(kTimeOffset, time_offset);
bool voice_active; bool voice_active;
uint8_t audio_level; uint8_t audio_level;
EXPECT_TRUE(packet.GetExtension<AudioLevel>(&voice_active, &audio_level)); EXPECT_TRUE(
packet.GetExtension<AudioLevelExtension>(&voice_active, &audio_level));
EXPECT_EQ(kVoiceActive, voice_active); EXPECT_EQ(kVoiceActive, voice_active);
EXPECT_EQ(kAudioLevel, audio_level); EXPECT_EQ(kAudioLevel, audio_level);
} }
@ -1187,7 +1194,7 @@ TEST(RtpPacketTest, ReservedExtensionsCountedAsSetExtension) {
// Register two extensions. // Register two extensions.
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketReceived packet(&extensions); RtpPacketReceived packet(&extensions);
@ -1199,7 +1206,7 @@ TEST(RtpPacketTest, ReservedExtensionsCountedAsSetExtension) {
// Only the extension that is both registered and reserved matches // Only the extension that is both registered and reserved matches
// IsExtensionReserved(). // IsExtensionReserved().
EXPECT_FALSE(packet.HasExtension<VideoContentTypeExtension>()); EXPECT_FALSE(packet.HasExtension<VideoContentTypeExtension>());
EXPECT_FALSE(packet.HasExtension<AudioLevel>()); EXPECT_FALSE(packet.HasExtension<AudioLevelExtension>());
EXPECT_TRUE(packet.HasExtension<TransmissionOffset>()); EXPECT_TRUE(packet.HasExtension<TransmissionOffset>());
} }
@ -1207,14 +1214,14 @@ TEST(RtpPacketTest, ReservedExtensionsCountedAsSetExtension) {
TEST(RtpPacketTest, RemoveMultipleExtensions) { TEST(RtpPacketTest, RemoveMultipleExtensions) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
packet.SetSequenceNumber(kSeqNum); packet.SetSequenceNumber(kSeqNum);
packet.SetTimestamp(kTimestamp); packet.SetTimestamp(kTimestamp);
packet.SetSsrc(kSsrc); packet.SetSsrc(kSsrc);
packet.SetExtension<TransmissionOffset>(kTimeOffset); packet.SetExtension<TransmissionOffset>(kTimeOffset);
packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel); packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel);
EXPECT_THAT(kPacketWithTOAndAL, EXPECT_THAT(kPacketWithTOAndAL,
ElementsAreArray(packet.data(), packet.size())); ElementsAreArray(packet.data(), packet.size()));
@ -1235,21 +1242,21 @@ TEST(RtpPacketTest, RemoveMultipleExtensions) {
TEST(RtpPacketTest, RemoveExtensionPreservesOtherUnregisteredExtensions) { TEST(RtpPacketTest, RemoveExtensionPreservesOtherUnregisteredExtensions) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
packet.SetSequenceNumber(kSeqNum); packet.SetSequenceNumber(kSeqNum);
packet.SetTimestamp(kTimestamp); packet.SetTimestamp(kTimestamp);
packet.SetSsrc(kSsrc); packet.SetSsrc(kSsrc);
packet.SetExtension<TransmissionOffset>(kTimeOffset); packet.SetExtension<TransmissionOffset>(kTimeOffset);
packet.SetExtension<AudioLevel>(kVoiceActive, kAudioLevel); packet.SetExtension<AudioLevelExtension>(kVoiceActive, kAudioLevel);
EXPECT_THAT(kPacketWithTOAndAL, EXPECT_THAT(kPacketWithTOAndAL,
ElementsAreArray(packet.data(), packet.size())); ElementsAreArray(packet.data(), packet.size()));
// "Unregister" kRtpExtensionTransmissionTimeOffset. // "Unregister" kRtpExtensionTransmissionTimeOffset.
RtpPacketToSend::ExtensionManager extensions1; RtpPacketToSend::ExtensionManager extensions1;
extensions1.Register<AudioLevel>(kAudioLevelExtensionId); extensions1.Register<AudioLevelExtension>(kAudioLevelExtensionId);
packet.IdentifyExtensions(extensions1); packet.IdentifyExtensions(extensions1);
// Make sure we can not delete extension which is set but not registered. // Make sure we can not delete extension which is set but not registered.
@ -1266,7 +1273,7 @@ TEST(RtpPacketTest, RemoveExtensionPreservesOtherUnregisteredExtensions) {
TEST(RtpPacketTest, RemoveExtensionFailure) { TEST(RtpPacketTest, RemoveExtensionFailure) {
RtpPacketToSend::ExtensionManager extensions; RtpPacketToSend::ExtensionManager extensions;
extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId); extensions.Register<TransmissionOffset>(kTransmissionOffsetExtensionId);
extensions.Register<AudioLevel>(kAudioLevelExtensionId); extensions.Register<AudioLevelExtension>(kAudioLevelExtensionId);
RtpPacketToSend packet(&extensions); RtpPacketToSend packet(&extensions);
packet.SetPayloadType(kPayloadType); packet.SetPayloadType(kPayloadType);
packet.SetSequenceNumber(kSeqNum); packet.SetSequenceNumber(kSeqNum);

View file

@ -89,7 +89,7 @@ constexpr RtpExtensionSize kVideoExtensionSizes[] = {
constexpr RtpExtensionSize kAudioExtensionSizes[] = { constexpr RtpExtensionSize kAudioExtensionSizes[] = {
CreateExtensionSize<AbsoluteSendTime>(), CreateExtensionSize<AbsoluteSendTime>(),
CreateExtensionSize<AbsoluteCaptureTimeExtension>(), CreateExtensionSize<AbsoluteCaptureTimeExtension>(),
CreateExtensionSize<AudioLevel>(), CreateExtensionSize<AudioLevelExtension>(),
CreateExtensionSize<InbandComfortNoiseExtension>(), CreateExtensionSize<InbandComfortNoiseExtension>(),
CreateExtensionSize<TransmissionOffset>(), CreateExtensionSize<TransmissionOffset>(),
CreateExtensionSize<TransportSequenceNumber>(), CreateExtensionSize<TransportSequenceNumber>(),

View file

@ -261,7 +261,7 @@ bool RTPSenderAudio::SendAudio(const RtpAudioFrame& frame) {
packet->SetTimestamp(frame.rtp_timestamp); packet->SetTimestamp(frame.rtp_timestamp);
packet->set_capture_time(clock_->CurrentTime()); packet->set_capture_time(clock_->CurrentTime());
// Set audio level extension, if included. // Set audio level extension, if included.
packet->SetExtension<AudioLevel>( packet->SetExtension<AudioLevelExtension>(
frame.type == AudioFrameType::kAudioFrameSpeech, frame.type == AudioFrameType::kAudioFrameSpeech,
frame.audio_level_dbov.value_or(127)); frame.audio_level_dbov.value_or(127));

View file

@ -39,7 +39,7 @@ using ::testing::ElementsAreArray;
class LoopbackTransportTest : public webrtc::Transport { class LoopbackTransportTest : public webrtc::Transport {
public: public:
LoopbackTransportTest() { LoopbackTransportTest() {
receivers_extensions_.Register<AudioLevel>(kAudioLevelExtensionId); receivers_extensions_.Register<AudioLevelExtension>(kAudioLevelExtensionId);
receivers_extensions_.Register<AbsoluteCaptureTimeExtension>( receivers_extensions_.Register<AbsoluteCaptureTimeExtension>(
kAbsoluteCaptureTimeExtensionId); kAbsoluteCaptureTimeExtensionId);
} }
@ -102,7 +102,7 @@ TEST_F(RtpSenderAudioTest, SendAudio) {
TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) { TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
const uint8_t kAudioLevel = 0x5a; const uint8_t kAudioLevel = 0x5a;
rtp_module_->RegisterRtpHeaderExtension(AudioLevel::Uri(), rtp_module_->RegisterRtpHeaderExtension(AudioLevelExtension::Uri(),
kAudioLevelExtensionId); kAudioLevelExtensionId);
const char payload_name[] = "PAYLOAD_NAME"; const char payload_name[] = "PAYLOAD_NAME";
@ -123,7 +123,7 @@ TEST_F(RtpSenderAudioTest, SendAudioWithAudioLevelExtension) {
// Verify AudioLevel extension. // Verify AudioLevel extension.
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevel>( EXPECT_TRUE(transport_.last_sent_packet().GetExtension<AudioLevelExtension>(
&voice_activity, &audio_level)); &voice_activity, &audio_level));
EXPECT_EQ(kAudioLevel, audio_level); EXPECT_EQ(kAudioLevel, audio_level);
EXPECT_FALSE(voice_activity); EXPECT_FALSE(voice_activity);

View file

@ -290,8 +290,8 @@ TEST_F(RtpSenderTest, AllocatePacketReserveExtensions) {
TransmissionOffset::Uri(), kTransmissionTimeOffsetExtensionId)); TransmissionOffset::Uri(), kTransmissionTimeOffsetExtensionId));
ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension( ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension(
AbsoluteSendTime::Uri(), kAbsoluteSendTimeExtensionId)); AbsoluteSendTime::Uri(), kAbsoluteSendTimeExtensionId));
ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension(AudioLevel::Uri(), ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension(
kAudioLevelExtensionId)); AudioLevelExtension::Uri(), kAudioLevelExtensionId));
ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension( ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension(
TransportSequenceNumber::Uri(), kTransportSequenceNumberExtensionId)); TransportSequenceNumber::Uri(), kTransportSequenceNumberExtensionId));
ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension( ASSERT_TRUE(rtp_sender_->RegisterRtpHeaderExtension(
@ -305,7 +305,7 @@ TEST_F(RtpSenderTest, AllocatePacketReserveExtensions) {
EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>()); EXPECT_TRUE(packet->HasExtension<AbsoluteSendTime>());
EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>()); EXPECT_TRUE(packet->HasExtension<TransportSequenceNumber>());
// Do not allocate media specific extensions. // Do not allocate media specific extensions.
EXPECT_FALSE(packet->HasExtension<AudioLevel>()); EXPECT_FALSE(packet->HasExtension<AudioLevelExtension>());
EXPECT_FALSE(packet->HasExtension<VideoOrientation>()); EXPECT_FALSE(packet->HasExtension<VideoOrientation>());
} }

View file

@ -75,7 +75,7 @@ void FuzzOneInput(const uint8_t* data, size_t size) {
case kRtpExtensionAudioLevel: case kRtpExtensionAudioLevel:
bool voice_activity; bool voice_activity;
uint8_t audio_level; uint8_t audio_level;
packet.GetExtension<AudioLevel>(&voice_activity, &audio_level); packet.GetExtension<AudioLevelExtension>(&voice_activity, &audio_level);
break; break;
case kRtpExtensionCsrcAudioLevel: { case kRtpExtensionCsrcAudioLevel: {
std::vector<uint8_t> audio_levels; std::vector<uint8_t> audio_levels;