commit 0315225cc9ef4fe74bb4b2c853dee06f1039b59d parent 8f3ffbe2f224b7c053a330fd90ea7b3e666a33fd Author: Dan Baker <dbaker@mozilla.com> Date: Thu, 23 Oct 2025 14:59:46 -0600 Bug 1995393 - Vendor libwebrtc from 137e9fc160 Upstream commit: https://webrtc.googlesource.com/src/+/137e9fc160ceae3531c8b298eccfe105310e7651 Replace NextHeader with NextPacket in NetEqInput interface Thus removing RTPHeader in favor RtpPacketReceived in this api Bug: webrtc:42225366 Change-Id: I90ef081b2bdace17311af32eae050975b1bd033c Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/404180 Reviewed-by: Jakob Ivarsson‎ <jakobi@webrtc.org> Commit-Queue: Danil Chapovalov <danilchap@webrtc.org> Cr-Commit-Position: refs/heads/main@{#45331} Diffstat:
15 files changed, 67 insertions(+), 84 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 /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc --commit mozpatches libwebrtc -libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-23T20:57:23.783956+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-10-23T20:59:29.778144+00:00. # base of lastest vendoring -b6fea3135a +137e9fc160 diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc b/third_party/libwebrtc/modules/audio_coding/neteq/neteq_decoder_plc_unittest.cc @@ -23,7 +23,6 @@ #include "api/audio_codecs/audio_format.h" #include "api/make_ref_counted.h" #include "api/neteq/neteq.h" -#include "api/rtp_headers.h" #include "modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h" #include "modules/audio_coding/neteq/tools/audio_checksum.h" #include "modules/audio_coding/neteq/tools/encode_neteq_input.h" @@ -162,8 +161,8 @@ class LossyInput : public NetEqInput { bool ended() const override { return input_->ended(); } - std::optional<RTPHeader> NextHeader() const override { - return input_->NextHeader(); + const RtpPacketReceived* NextPacket() const override { + return input_->NextPacket(); } private: diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/encode_neteq_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/encode_neteq_input.cc @@ -17,7 +17,6 @@ #include <utility> #include "api/audio_codecs/audio_encoder.h" -#include "api/rtp_headers.h" #include "api/units/timestamp.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/buffer.h" @@ -65,11 +64,9 @@ bool EncodeNetEqInput::ended() const { return next_output_event_ms_ > input_duration_ms_; } -std::optional<RTPHeader> EncodeNetEqInput::NextHeader() const { +const RtpPacketReceived* EncodeNetEqInput::NextPacket() const { RTC_DCHECK(packet_data_); - std::optional<RTPHeader> rtp_header(std::in_place); - packet_data_->GetHeader(&*rtp_header); - return rtp_header; + return packet_data_.get(); } void EncodeNetEqInput::CreatePacket() { diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/encode_neteq_input.h b/third_party/libwebrtc/modules/audio_coding/neteq/tools/encode_neteq_input.h @@ -18,7 +18,6 @@ #include "api/array_view.h" #include "api/audio_codecs/audio_encoder.h" -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -59,7 +58,7 @@ class EncodeNetEqInput : public NetEqInput { bool ended() const override; - std::optional<RTPHeader> NextHeader() const override; + const RtpPacketReceived* NextPacket() const override; private: static constexpr int64_t kOutputPeriodMs = 10; diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.cc @@ -15,7 +15,6 @@ #include <optional> #include <utility> -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/checks.h" @@ -81,8 +80,8 @@ bool InitialPacketInserterNetEqInput::ended() const { return source_->ended(); } -std::optional<RTPHeader> InitialPacketInserterNetEqInput::NextHeader() const { - return source_->NextHeader(); +const RtpPacketReceived* InitialPacketInserterNetEqInput::NextPacket() const { + return source_->NextPacket(); } } // namespace test diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.h b/third_party/libwebrtc/modules/audio_coding/neteq/tools/initial_packet_inserter_neteq_input.h @@ -15,7 +15,6 @@ #include <memory> #include <optional> -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -36,7 +35,7 @@ class InitialPacketInserterNetEqInput final : public NetEqInput { void AdvanceOutputEvent() override; void AdvanceSetMinimumDelay() override; bool ended() const override; - std::optional<RTPHeader> NextHeader() const override; + const RtpPacketReceived* NextPacket() const override; private: const std::unique_ptr<NetEqInput> source_; diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_event_log_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_event_log_input.cc @@ -15,6 +15,7 @@ #include <cstdint> #include <memory> #include <optional> +#include <utility> #include <vector> #include "api/array_view.h" @@ -45,6 +46,8 @@ class NetEqEventLogInput : public NetEqInput { neteq_set_minimum_delay_events_it_( neteq_set_minimum_delay_events_.begin()), end_time_ms_(end_time_ms) { + next_packet_ = CreateNextPacket(); + // Ignore all output events before the first packet. while (output_events_it_ != output_events_.end() && output_events_it_->log_time_ms() < @@ -91,24 +94,8 @@ class NetEqEventLogInput : public NetEqInput { if (packet_stream_it_ == packet_stream_.end()) { return nullptr; } - const LoggedRtpPacket& logged = packet_stream_it_->rtp; - auto packet_data = std::make_unique<RtpPacketReceived>(); - packet_data->SetPayloadType(logged.header.payloadType); - packet_data->SetMarker(logged.header.markerBit); - packet_data->SetSequenceNumber(logged.header.sequenceNumber); - packet_data->SetTimestamp(logged.header.timestamp); - packet_data->SetSsrc(logged.header.ssrc); - packet_data->SetCsrcs( - MakeArrayView(logged.header.arrOfCSRCs, logged.header.numCSRCs)); - packet_data->set_arrival_time(logged.log_time()); - - // This is a header-only "dummy" packet. Set the payload to all zeros, with - // length according to the virtual length. - size_t payload_size = logged.total_length - logged.header_length; - std::fill_n(packet_data->AllocatePayload(payload_size), payload_size, 0); - ++packet_stream_it_; - return packet_data; + return std::exchange(next_packet_, CreateNextPacket()); } void AdvanceOutputEvent() override { @@ -126,16 +113,37 @@ class NetEqEventLogInput : public NetEqInput { bool ended() const override { return !NextEventTime(); } - std::optional<RTPHeader> NextHeader() const override { + const RtpPacketReceived* NextPacket() const override { + return next_packet_.get(); + } + + private: + std::unique_ptr<RtpPacketReceived> CreateNextPacket() { if (packet_stream_it_ == packet_stream_.end()) { - return std::nullopt; + return nullptr; } - return packet_stream_it_->rtp.header; + const LoggedRtpPacket& logged = packet_stream_it_->rtp; + auto packet_data = std::make_unique<RtpPacketReceived>(); + packet_data->SetPayloadType(logged.header.payloadType); + packet_data->SetMarker(logged.header.markerBit); + packet_data->SetSequenceNumber(logged.header.sequenceNumber); + packet_data->SetTimestamp(logged.header.timestamp); + packet_data->SetSsrc(logged.header.ssrc); + packet_data->SetCsrcs( + MakeArrayView(logged.header.arrOfCSRCs, logged.header.numCSRCs)); + packet_data->set_arrival_time(logged.log_time()); + + // This is a header-only "dummy" packet. Set the payload to all zeros, with + // length according to the virtual length. + size_t payload_size = logged.total_length - logged.header_length; + std::fill_n(packet_data->AllocatePayload(payload_size), payload_size, 0); + + return packet_data; } - private: const std::vector<LoggedRtpPacketIncoming> packet_stream_; std::vector<LoggedRtpPacketIncoming>::const_iterator packet_stream_it_; + std::unique_ptr<RtpPacketReceived> next_packet_; const std::vector<LoggedAudioPlayoutEvent> output_events_; std::vector<LoggedAudioPlayoutEvent>::const_iterator output_events_it_; const std::vector<LoggedNetEqSetMinimumDelayEvent> diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_input.cc @@ -16,7 +16,6 @@ #include <string> #include <utility> -#include "api/rtp_headers.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" #include "rtc_base/strings/string_builder.h" @@ -95,8 +94,8 @@ bool TimeLimitedNetEqInput::ended() const { return ended_ || input_->ended(); } -std::optional<RTPHeader> TimeLimitedNetEqInput::NextHeader() const { - return ended_ ? std::nullopt : input_->NextHeader(); +const RtpPacketReceived* TimeLimitedNetEqInput::NextPacket() const { + return ended_ ? nullptr : input_->NextPacket(); } void TimeLimitedNetEqInput::MaybeSetEnded() { diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_input.h b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_input.h @@ -17,7 +17,6 @@ #include <optional> #include <string> -#include "api/rtp_headers.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" namespace webrtc { @@ -74,7 +73,7 @@ class NetEqInput { // Returns the next packet to be inserted into NetEq. The packet following the // returned one is pre-fetched in the NetEqInput object, such that future - // calls to NextPacketTime() or NextHeader() will return information from that + // calls to NextPacketTime() or NextPacket() will return information from that // packet. virtual std::unique_ptr<RtpPacketReceived> PopPacket() = 0; @@ -92,9 +91,9 @@ class NetEqInput { // infinite loop. virtual bool ended() const = 0; - // Returns the RTP header for the next packet, i.e., the packet that will be - // delivered next by PopPacket(). - virtual std::optional<RTPHeader> NextHeader() const = 0; + // Returns the next RTP packet, i.e., the packet that will be delivered next + // by PopPacket(). + virtual const RtpPacketReceived* NextPacket() const = 0; }; // Wrapper class to impose a time limit on a NetEqInput object, typically @@ -111,7 +110,7 @@ class TimeLimitedNetEqInput : public NetEqInput { void AdvanceOutputEvent() override; void AdvanceSetMinimumDelay() override; bool ended() const override; - std::optional<RTPHeader> NextHeader() const override; + const RtpPacketReceived* NextPacket() const override; private: void MaybeSetEnded(); diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_replacement_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_replacement_input.cc @@ -17,7 +17,6 @@ #include <set> #include <utility> -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/fake_decode_from_file.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -80,8 +79,8 @@ bool NetEqReplacementInput::ended() const { return source_->ended(); } -std::optional<RTPHeader> NetEqReplacementInput::NextHeader() const { - return source_->NextHeader(); +const RtpPacketReceived* NetEqReplacementInput::NextPacket() const { + return source_->NextPacket(); } void NetEqReplacementInput::ReplacePacket() { @@ -106,17 +105,18 @@ void NetEqReplacementInput::ReplacePacket() { return; } - std::optional<RTPHeader> next_hdr = source_->NextHeader(); - RTC_DCHECK(next_hdr); + const RtpPacketReceived* next_packet = source_->NextPacket(); + RTC_DCHECK(next_packet); uint8_t payload[12]; constexpr uint32_t kMaxFrameSize = 120 * 48; - const uint32_t timestamp_diff = next_hdr->timestamp - packet_->Timestamp(); + const uint32_t timestamp_diff = + next_packet->Timestamp() - packet_->Timestamp(); uint32_t frame_size = last_frame_size_timestamps_; if (timestamp_diff > 0) { frame_size = std::min(frame_size, timestamp_diff); } const bool opus_dtx = packet_->payload_size() <= 2; - if (next_hdr->sequenceNumber == packet_->SequenceNumber() + 1 && + if (next_packet->SequenceNumber() == packet_->SequenceNumber() + 1 && timestamp_diff <= kMaxFrameSize && timestamp_diff > 0 && !opus_dtx) { // Packets are in order and the timestamp diff is valid. frame_size = timestamp_diff; diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_replacement_input.h b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_replacement_input.h @@ -16,7 +16,6 @@ #include <optional> #include <set> -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/rtp_rtcp/source/rtp_packet_received.h" @@ -39,7 +38,7 @@ class NetEqReplacementInput : public NetEqInput { void AdvanceOutputEvent() override; void AdvanceSetMinimumDelay() override; bool ended() const override; - std::optional<RTPHeader> NextHeader() const override; + const RtpPacketReceived* NextPacket() const override; private: void ReplacePacket(); diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_rtp_dump_input.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_rtp_dump_input.cc @@ -17,7 +17,6 @@ #include <utility> #include "absl/strings/string_view.h" -#include "api/rtp_headers.h" #include "modules/audio_coding/neteq/tools/neteq_input.h" #include "modules/audio_coding/neteq/tools/rtp_file_source.h" #include "modules/rtp_rtcp/include/rtp_rtcp_defines.h" @@ -70,14 +69,7 @@ class NetEqRtpDumpInput : public NetEqInput { return std::exchange(packet_, source_->NextPacket()); } - std::optional<RTPHeader> NextHeader() const override { - if (packet_ == nullptr) { - return std::nullopt; - } - RTPHeader rtp_header; - packet_->GetHeader(&rtp_header); - return rtp_header; - } + const RtpPacketReceived* NextPacket() const override { return packet_.get(); } bool ended() const override { return !next_output_event_ms_; } diff --git a/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_test_factory.cc b/third_party/libwebrtc/modules/audio_coding/neteq/tools/neteq_test_factory.cc @@ -31,7 +31,6 @@ #include "api/make_ref_counted.h" #include "api/neteq/neteq.h" #include "api/neteq/neteq_factory.h" -#include "api/rtp_headers.h" #include "api/scoped_refptr.h" #include "logging/rtc_event_log/rtc_event_log_parser.h" #include "modules/audio_coding/neteq/tools/audio_sink.h" @@ -207,14 +206,14 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest( // Check the sample rate. std::optional<int> sample_rate_hz; std::set<std::pair<int, uint32_t>> discarded_pt_and_ssrc; - while (std::optional<RTPHeader> first_rtp_header = input->NextHeader()) { - RTC_DCHECK(first_rtp_header); - sample_rate_hz = CodecSampleRate(first_rtp_header->payloadType, config); + while (const RtpPacketReceived* first_rtp_packet = input->NextPacket()) { + RTC_DCHECK(first_rtp_packet); + sample_rate_hz = CodecSampleRate(first_rtp_packet->PayloadType(), config); if (sample_rate_hz) { std::cout << "Found valid packet with payload type " - << static_cast<int>(first_rtp_header->payloadType) - << " and SSRC 0x" << std::hex << first_rtp_header->ssrc - << std::dec << std::endl; + << int{first_rtp_packet->PayloadType()} << " and SSRC 0x" + << std::hex << first_rtp_packet->Ssrc() << std::dec + << std::endl; if (config.initial_dummy_packets > 0) { std::cout << "Nr of initial dummy packets: " << config.initial_dummy_packets << std::endl; @@ -225,8 +224,8 @@ std::unique_ptr<NetEqTest> NetEqTestFactory::InitializeTest( } // Discard this packet and move to the next. Keep track of discarded payload // types and SSRCs. - discarded_pt_and_ssrc.emplace(first_rtp_header->payloadType, - first_rtp_header->ssrc); + discarded_pt_and_ssrc.emplace(first_rtp_packet->PayloadType(), + first_rtp_packet->Ssrc()); input->PopPacket(); } if (!discarded_pt_and_ssrc.empty()) { diff --git a/third_party/libwebrtc/test/fuzzers/neteq_rtp_fuzzer.cc b/third_party/libwebrtc/test/fuzzers/neteq_rtp_fuzzer.cc @@ -22,7 +22,6 @@ #include "api/audio_codecs/audio_format.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/neteq/neteq.h" -#include "api/rtp_headers.h" #include "modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h" #include "modules/audio_coding/neteq/tools/audio_checksum.h" #include "modules/audio_coding/neteq/tools/encode_neteq_input.h" @@ -108,11 +107,9 @@ class FuzzRtpInput : public NetEqInput { bool ended() const override { return ended_; } - std::optional<RTPHeader> NextHeader() const override { + const RtpPacketReceived* NextPacket() const override { RTC_DCHECK(packet_); - std::optional<RTPHeader> rtp_header(std::in_place); - packet_->GetHeader(&*rtp_header); - return rtp_header; + return packet_.get(); } private: diff --git a/third_party/libwebrtc/test/fuzzers/neteq_signal_fuzzer.cc b/third_party/libwebrtc/test/fuzzers/neteq_signal_fuzzer.cc @@ -24,7 +24,6 @@ #include "api/audio_codecs/audio_format.h" #include "api/audio_codecs/builtin_audio_decoder_factory.h" #include "api/neteq/neteq.h" -#include "api/rtp_headers.h" #include "api/units/time_delta.h" #include "modules/audio_coding/codecs/pcm16b/audio_encoder_pcm16b.h" #include "modules/audio_coding/neteq/tools/audio_checksum.h" @@ -150,11 +149,9 @@ class FuzzSignalInput : public NetEqInput { bool ended() const override { return ended_; } - std::optional<RTPHeader> NextHeader() const override { + const RtpPacketReceived* NextPacket() const override { RTC_DCHECK(packet_); - std::optional<RTPHeader> rtp_header(std::in_place); - packet_->GetHeader(&*rtp_header); - return rtp_header; + return packet_.get(); } private: