commit 0ca94e5589afd25a0b1edf8dd1423de3589d8193 parent de276ceeb412f21f7aa4d30302022868b309f0ee Author: Michael Froman <mfroman@mozilla.com> Date: Thu, 9 Oct 2025 15:02:42 -0500 Bug 1993083 - Vendor libwebrtc from adf7d6e93b Upstream commit: https://webrtc.googlesource.com/src/+/adf7d6e93ba45020a030a07c04df505e50d686ea Add helper RtpPacket::SetPayload For a relatively common case where RTP payload is already pre-built and just need to be copied into an RtpPacket Thus hard to read memcpy can be hidden in those places and code become more readable Bug: None Change-Id: I39e4fec28bc150eb80435ac2b26cd3d4db53ea7a Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/400880 Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org> Reviewed-by: Philip Eliasson <philipel@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#45172} Diffstat:
14 files changed, 31 insertions(+), 38 deletions(-)
diff --git a/third_party/libwebrtc/README.mozilla.last-vendor b/third_party/libwebrtc/README.mozilla.last-vendor @@ -1,4 +1,4 @@ # ./mach python dom/media/webrtc/third_party_build/vendor-libwebrtc.py --from-local /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T20:01:29.528201+00:00. +libwebrtc updated from /home/mfroman/mozilla/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-09T20:02:34.269719+00:00. # base of lastest vendoring -2ae34ea70c +adf7d6e93b diff --git a/third_party/libwebrtc/call/rtx_receive_stream.cc b/third_party/libwebrtc/call/rtx_receive_stream.cc @@ -10,7 +10,6 @@ #include "call/rtx_receive_stream.h" -#include <string.h> #include <cstdint> #include <map> @@ -22,7 +21,6 @@ #include "modules/rtp_rtcp/include/receive_statistics.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" -#include "rtc_base/checks.h" #include "rtc_base/logging.h" namespace webrtc { @@ -79,12 +77,7 @@ void RtxReceiveStream::OnRtpPacket(const RtpPacketReceived& rtx_packet) { media_packet.set_arrival_time(rtx_packet.arrival_time()); // Skip the RTX header. - ArrayView<const uint8_t> rtx_payload = payload.subview(kRtxHeaderSize); - - uint8_t* media_payload = media_packet.AllocatePayload(rtx_payload.size()); - RTC_DCHECK(media_payload != nullptr); - - memcpy(media_payload, rtx_payload.data(), rtx_payload.size()); + media_packet.SetPayload(payload.subview(kRtxHeaderSize)); media_sink_->OnRtpPacket(media_packet); } diff --git a/third_party/libwebrtc/modules/audio_coding/acm2/acm_send_test.cc b/third_party/libwebrtc/modules/audio_coding/acm2/acm_send_test.cc @@ -149,9 +149,7 @@ std::unique_ptr<RtpPacketReceived> AcmSendTestOldApi::CreatePacket() { rtp_packet->SetSsrc(0x12345678); ++sequence_number_; - // Copy the payload data. - memcpy(rtp_packet->AllocatePayload(last_payload_vec_.size()), - last_payload_vec_.data(), last_payload_vec_.size()); + rtp_packet->SetPayload(last_payload_vec_); rtp_packet->set_arrival_time(clock_.CurrentTime()); return rtp_packet; } diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/flexfec_sender.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/flexfec_sender.cc @@ -170,9 +170,7 @@ std::vector<std::unique_ptr<RtpPacketToSend>> FlexfecSender::GetFecPackets() { } // RTP payload. - uint8_t* payload = - fec_packet_to_send->AllocatePayload(fec_packet->data.size()); - memcpy(payload, fec_packet->data.cdata(), fec_packet->data.size()); + fec_packet_to_send->SetPayload(fec_packet->data); total_fec_data_bytes += fec_packet_to_send->size(); fec_packets_to_send.push_back(std::move(fec_packet_to_send)); diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_format_h264.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_format_h264.cc @@ -231,9 +231,7 @@ bool RtpPacketizerH264::NextPacket(RtpPacketToSend* rtp_packet) { PacketUnit packet = packets_.front(); if (packet.first_fragment && packet.last_fragment) { // Single NAL unit packet. - size_t bytes_to_send = packet.source_fragment.size(); - uint8_t* buffer = rtp_packet->AllocatePayload(bytes_to_send); - memcpy(buffer, packet.source_fragment.data(), bytes_to_send); + rtp_packet->SetPayload(packet.source_fragment); packets_.pop(); input_fragments_.pop_front(); } else if (packet.aggregated) { diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet.cc @@ -410,6 +410,10 @@ uint8_t* RtpPacket::AllocatePayload(size_t size_bytes) { return SetPayloadSize(size_bytes); } +void RtpPacket::SetPayload(ArrayView<const uint8_t> payload) { + memcpy(AllocatePayload(payload.size()), payload.data(), payload.size()); +} + uint8_t* RtpPacket::SetPayloadSize(size_t size_bytes) { RTC_DCHECK_EQ(padding_size_, 0); payload_size_ = size_bytes; diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet.h b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet.h @@ -165,6 +165,9 @@ class RtpPacket { // Same as SetPayloadSize but doesn't guarantee to keep current payload. uint8_t* AllocatePayload(size_t size_bytes); + // Sets payload size to `payload.size()` and copies `payload`. + void SetPayload(ArrayView<const uint8_t> payload); + bool SetPadding(size_t padding_size); // Returns debug string of RTP packet (without detailed extension info). diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packet_unittest.cc @@ -465,6 +465,14 @@ TEST(RtpPacketTest, SetReservedExtensionsAfterPayload) { EXPECT_TRUE(packet.SetExtension<TransmissionOffset>(kTimeOffset)); } +TEST(RtpPacketTest, SetPayload) { + const uint8_t payload[] = {1, 2, 3, 4, 2, 0, 42}; + RtpPacket packet; + packet.SetPayload(payload); + + EXPECT_THAT(packet.payload(), ElementsAreArray(payload)); +} + TEST(RtpPacketTest, CreatePurePadding) { const size_t kPaddingSize = kMaxPaddingSize - 1; RtpPacketToSend packet(nullptr, 12 + kPaddingSize); diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packetizer_h265.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_packetizer_h265.cc @@ -210,9 +210,7 @@ bool RtpPacketizerH265::NextPacket(RtpPacketToSend* rtp_packet) { if (packet.first_fragment && packet.last_fragment) { // Single NAL unit packet. Do not support DONL for single NAL unit packets, // DONL field is not present. - size_t bytes_to_send = packet.source_fragment.size(); - uint8_t* buffer = rtp_packet->AllocatePayload(bytes_to_send); - memcpy(buffer, packet.source_fragment.data(), bytes_to_send); + rtp_packet->SetPayload(packet.source_fragment); packets_.pop(); input_fragments_.pop_front(); } else if (packet.aggregated) { diff --git a/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc b/third_party/libwebrtc/modules/rtp_rtcp/source/rtp_sender_audio.cc @@ -256,9 +256,7 @@ bool RTPSenderAudio::SendAudio(const RtpAudioFrame& frame) { packet->SetExtension<AbsoluteCaptureTimeExtension>(*absolute_capture_time); } - uint8_t* payload = packet->AllocatePayload(frame.payload.size()); - RTC_CHECK(payload); - memcpy(payload, frame.payload.data(), frame.payload.size()); + packet->SetPayload(frame.payload); { MutexLock lock(&send_audio_mutex_); diff --git a/third_party/libwebrtc/moz-patch-stack/s0001.patch b/third_party/libwebrtc/moz-patch-stack/s0001.patch @@ -686,7 +686,7 @@ index 8fb26e5522..3416ce8cf3 100644 // Subclasses must defined kId and kUri static constexpr members. class BaseRtpStringExtension { diff --git a/modules/rtp_rtcp/source/rtp_packet.cc b/modules/rtp_rtcp/source/rtp_packet.cc -index fe9d3a7d95..8879feb5ec 100644 +index 66147a2ef0..60e582bf29 100644 --- a/modules/rtp_rtcp/source/rtp_packet.cc +++ b/modules/rtp_rtcp/source/rtp_packet.cc @@ -212,6 +212,10 @@ void RtpPacket::ZeroMutableExtensions() { @@ -701,7 +701,7 @@ index fe9d3a7d95..8879feb5ec 100644 } } diff --git a/modules/rtp_rtcp/source/rtp_packet_unittest.cc b/modules/rtp_rtcp/source/rtp_packet_unittest.cc -index 80fe006c01..b4c274e4f7 100644 +index ab5cc141cc..b37a131947 100644 --- a/modules/rtp_rtcp/source/rtp_packet_unittest.cc +++ b/modules/rtp_rtcp/source/rtp_packet_unittest.cc @@ -140,6 +140,18 @@ constexpr uint8_t kPacketWithMid[] = { diff --git a/third_party/libwebrtc/moz-patch-stack/s0049.patch b/third_party/libwebrtc/moz-patch-stack/s0049.patch @@ -84,7 +84,7 @@ index 3416ce8cf3..cc811cae3a 100644 // 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 8879feb5ec..54341396b3 100644 +index 60e582bf29..30d19e16eb 100644 --- a/modules/rtp_rtcp/source/rtp_packet.cc +++ b/modules/rtp_rtcp/source/rtp_packet.cc @@ -193,7 +193,9 @@ void RtpPacket::ZeroMutableExtensions() { diff --git a/third_party/libwebrtc/video/rtp_video_stream_receiver2_unittest.cc b/third_party/libwebrtc/video/rtp_video_stream_receiver2_unittest.cc @@ -1733,8 +1733,7 @@ TEST_P(RtpVideoStreamReceiver2TestPlayoutDelay, PlayoutDelay) { // Set playout delay on outgoing packet. EXPECT_TRUE(packet_to_send.SetExtension<PlayoutDelayLimits>( TransmittedPlayoutDelay())); - uint8_t* payload = packet_to_send.AllocatePayload(payload_data.size()); - memcpy(payload, payload_data.data(), payload_data.size()); + packet_to_send.SetPayload(payload_data); RtpPacketReceived received_packet(&extension_map); received_packet.Parse(packet_to_send.data(), packet_to_send.size()); diff --git a/third_party/libwebrtc/video/video_receive_stream2_unittest.cc b/third_party/libwebrtc/video/video_receive_stream2_unittest.cc @@ -294,8 +294,7 @@ class VideoReceiveStream2Test : public ::testing::TestWithParam<bool> { TEST_P(VideoReceiveStream2Test, CreateFrameFromH264FmtpSpropAndIdr) { constexpr uint8_t idr_nalu[] = {0x05, 0xFF, 0xFF, 0xFF}; RtpPacketToSend rtppacket(nullptr); - uint8_t* payload = rtppacket.AllocatePayload(sizeof(idr_nalu)); - memcpy(payload, idr_nalu, sizeof(idr_nalu)); + rtppacket.SetPayload(idr_nalu); rtppacket.SetMarker(true); rtppacket.SetSsrc(kRemoteSsrc); rtppacket.SetPayloadType(kH264PayloadType); @@ -460,8 +459,7 @@ TEST_P(VideoReceiveStream2Test, MaxCompositionDelaySetFromMaxPlayoutDelay) { TEST_P(VideoReceiveStream2Test, LazyDecoderCreation) { constexpr uint8_t idr_nalu[] = {0x05, 0xFF, 0xFF, 0xFF}; RtpPacketToSend rtppacket(nullptr); - uint8_t* payload = rtppacket.AllocatePayload(sizeof(idr_nalu)); - memcpy(payload, idr_nalu, sizeof(idr_nalu)); + rtppacket.SetPayload(idr_nalu); rtppacket.SetMarker(true); rtppacket.SetSsrc(kRemoteSsrc); rtppacket.SetPayloadType(kH264PayloadType); @@ -494,8 +492,7 @@ TEST_P(VideoReceiveStream2Test, LazyDecoderCreation) { TEST_P(VideoReceiveStream2Test, LazyDecoderCreationCodecSwitch) { constexpr uint8_t idr_nalu[] = {0x05, 0xFF, 0xFF, 0xFF}; RtpPacketToSend rtppacket(nullptr); - uint8_t* payload = rtppacket.AllocatePayload(sizeof(idr_nalu)); - memcpy(payload, idr_nalu, sizeof(idr_nalu)); + rtppacket.SetPayload(idr_nalu); rtppacket.SetMarker(true); rtppacket.SetSsrc(kRemoteSsrc); rtppacket.SetPayloadType(kH264PayloadType); @@ -528,8 +525,7 @@ TEST_P(VideoReceiveStream2Test, LazyDecoderCreationCodecSwitch) { // Switch to AV1. const uint8_t av1_key_obu[] = {0x18, 0x48, 0x01, 0xAA}; // \ OBU RtpPacketToSend av1_rtppacket(nullptr); - uint8_t* av1_payload = av1_rtppacket.AllocatePayload(sizeof(av1_key_obu)); - memcpy(av1_payload, av1_key_obu, sizeof(av1_key_obu)); + av1_rtppacket.SetPayload(av1_key_obu); av1_rtppacket.SetMarker(true); av1_rtppacket.SetSsrc(kRemoteSsrc); av1_rtppacket.SetPayloadType(kAv1PayloadType);