From 3bb6f6d4e872b7e8558f695c49841aef53b1089b Mon Sep 17 00:00:00 2001 From: philipel Date: Mon, 2 Jan 2023 16:39:04 +0100 Subject: [PATCH] Add RtpPacket::SetRawExtension function. Bug: webrtc:14801 Change-Id: I1ce9361250a7ad2d932ee9ae5b8f93415d0ea7b7 Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/289980 Reviewed-by: Danil Chapovalov Commit-Queue: Philip Eliasson Cr-Commit-Position: refs/heads/main@{#38974} --- modules/rtp_rtcp/source/rtp_packet.h | 14 ++++++++++++++ modules/rtp_rtcp/source/rtp_packet_unittest.cc | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/modules/rtp_rtcp/source/rtp_packet.h b/modules/rtp_rtcp/source/rtp_packet.h index aba4975b7a..3401a462be 100644 --- a/modules/rtp_rtcp/source/rtp_packet.h +++ b/modules/rtp_rtcp/source/rtp_packet.h @@ -136,6 +136,9 @@ class RtpPacket { template bool SetExtension(const Values&...); + template + bool SetRawExtension(rtc::ArrayView data); + template bool ReserveExtension(); @@ -252,6 +255,17 @@ bool RtpPacket::SetExtension(const Values&... values) { return Extension::Write(buffer, values...); } +template +bool RtpPacket::SetRawExtension(rtc::ArrayView data) { + rtc::ArrayView buffer = + AllocateExtension(Extension::kId, data.size()); + if (buffer.empty()) { + return false; + } + std::memcpy(buffer.data(), data.data(), data.size()); + return true; +} + template bool RtpPacket::ReserveExtension() { auto buffer = AllocateExtension(Extension::kId, Extension::kValueSizeBytes); diff --git a/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/modules/rtp_rtcp/source/rtp_packet_unittest.cc index 8a82e98d76..1d51d75662 100644 --- a/modules/rtp_rtcp/source/rtp_packet_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_packet_unittest.cc @@ -9,6 +9,7 @@ */ #include "common_video/test/utilities.h" #include "modules/rtp_rtcp/include/rtp_header_extension_map.h" +#include "modules/rtp_rtcp/source/rtp_dependency_descriptor_extension.h" #include "modules/rtp_rtcp/source/rtp_header_extensions.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "modules/rtp_rtcp/source/rtp_packet_to_send.h" @@ -31,6 +32,7 @@ constexpr uint8_t kSeqNumFirstByte = kSeqNum >> 8; constexpr uint8_t kSeqNumSecondByte = kSeqNum & 0xff; constexpr uint32_t kTimestamp = 0x65431278; constexpr uint8_t kTransmissionOffsetExtensionId = 1; +constexpr uint8_t kDependencyDescriptorExtensionId = 2; constexpr uint8_t kAudioLevelExtensionId = 9; constexpr uint8_t kRtpStreamIdExtensionId = 0xa; constexpr uint8_t kRtpMidExtensionId = 0xb; @@ -1238,5 +1240,16 @@ TEST(RtpPacketTest, RemoveExtensionFailure) { EXPECT_THAT(kPacketWithTO, ElementsAreArray(packet.data(), packet.size())); } +TEST(RtpPacketTest, SetExtensionWithArray) { + RtpPacketToSend::ExtensionManager extensions; + extensions.Register( + kDependencyDescriptorExtensionId); + RtpPacketToSend packet(&extensions); + const uint8_t extension_data[] = {1, 2, 3, 4, 5}; + packet.SetRawExtension(extension_data); + EXPECT_THAT(packet.GetRawExtension(), + ElementsAreArray(extension_data)); +} + } // namespace } // namespace webrtc