Add RtpPacket::SetRawExtension function.

Bug: webrtc:14801
Change-Id: I1ce9361250a7ad2d932ee9ae5b8f93415d0ea7b7
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/289980
Reviewed-by: Danil Chapovalov <danilchap@webrtc.org>
Commit-Queue: Philip Eliasson <philipel@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38974}
This commit is contained in:
philipel 2023-01-02 16:39:04 +01:00 committed by WebRTC LUCI CQ
parent ef90964b83
commit 3bb6f6d4e8
2 changed files with 27 additions and 0 deletions

View File

@ -136,6 +136,9 @@ class RtpPacket {
template <typename Extension, typename... Values>
bool SetExtension(const Values&...);
template <typename Extension>
bool SetRawExtension(rtc::ArrayView<const uint8_t> data);
template <typename Extension>
bool ReserveExtension();
@ -252,6 +255,17 @@ bool RtpPacket::SetExtension(const Values&... values) {
return Extension::Write(buffer, values...);
}
template <typename Extension>
bool RtpPacket::SetRawExtension(rtc::ArrayView<const uint8_t> data) {
rtc::ArrayView<uint8_t> buffer =
AllocateExtension(Extension::kId, data.size());
if (buffer.empty()) {
return false;
}
std::memcpy(buffer.data(), data.data(), data.size());
return true;
}
template <typename Extension>
bool RtpPacket::ReserveExtension() {
auto buffer = AllocateExtension(Extension::kId, Extension::kValueSizeBytes);

View File

@ -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<RtpDependencyDescriptorExtension>(
kDependencyDescriptorExtensionId);
RtpPacketToSend packet(&extensions);
const uint8_t extension_data[] = {1, 2, 3, 4, 5};
packet.SetRawExtension<RtpDependencyDescriptorExtension>(extension_data);
EXPECT_THAT(packet.GetRawExtension<RtpDependencyDescriptorExtension>(),
ElementsAreArray(extension_data));
}
} // namespace
} // namespace webrtc