tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit dcb134fd84592acb4b6e49c2ed940a010727b5b2
parent f67ab3649110c6b3b4a6d7b6fe358060c21545f2
Author: Dan Baker <dbaker@mozilla.com>
Date:   Mon,  1 Dec 2025 23:52:00 -0700

Bug 2000941 - Vendor libwebrtc from b72ef3160d

Upstream commit: https://webrtc.googlesource.com/src/+/b72ef3160dc34ed925250653159c9bc5699e6065
    Clear steady-state refresh flag for key frames

    Ensures that a key frame is never flagged as a steady-state
    refresh, even if the source metadata suggests it.

    This fixes a bug where the QualityConvergenceMonitor would fail to
    exit its converged state when a key frame was requested on a static
    scene.

    Fixed: webrtc:446925524
    Change-Id: Idd6a4a9b14ddf95aa3730e493519707363c77ce9
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/411742
    Reviewed-by: Sergey Silkin <ssilkin@webrtc.org>
    Commit-Queue: Johannes Kron <kron@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#45721}

Diffstat:
Mthird_party/libwebrtc/README.mozilla.last-vendor | 4++--
Mthird_party/libwebrtc/video/frame_encode_metadata_writer.cc | 4+++-
Mthird_party/libwebrtc/video/frame_encode_metadata_writer_unittest.cc | 29+++++++++++++++++++++++++++++
3 files changed, 34 insertions(+), 3 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-12-02T06:49:10.035274+00:00. +libwebrtc updated from /Users/danielbaker/elm/.moz-fast-forward/moz-libwebrtc commit mozpatches on 2025-12-02T06:51:47.056078+00:00. # base of lastest vendoring -fa7d10eb73 +b72ef3160d diff --git a/third_party/libwebrtc/video/frame_encode_metadata_writer.cc b/third_party/libwebrtc/video/frame_encode_metadata_writer.cc @@ -264,8 +264,10 @@ FrameEncodeMetadataWriter::ExtractEncodeStartTimeAndFillMetadata( encoded_image->ntp_time_ms_ = metadata_list->front().ntp_time_ms; encoded_image->rotation_ = metadata_list->front().rotation; encoded_image->SetColorSpace(metadata_list->front().color_space); + // Key frames should never be considered as steady state refresh frames. encoded_image->SetIsSteadyStateRefreshFrame( - metadata_list->front().is_steady_state_refresh_frame); + metadata_list->front().is_steady_state_refresh_frame && + encoded_image->FrameType() != VideoFrameType::kVideoFrameKey); encoded_image->SetPacketInfos(metadata_list->front().packet_infos); metadata_list->pop_front(); } else { diff --git a/third_party/libwebrtc/video/frame_encode_metadata_writer_unittest.cc b/third_party/libwebrtc/video/frame_encode_metadata_writer_unittest.cc @@ -26,6 +26,7 @@ #include "api/video/video_frame_type.h" #include "api/video/video_rotation.h" #include "api/video/video_timing.h" +#include "api/video_codecs/scalability_mode.h" #include "api/video_codecs/video_codec.h" #include "api/video_codecs/video_encoder.h" #include "common_video/h264/h264_common.h" @@ -437,6 +438,34 @@ TEST(FrameEncodeMetadataWriterTest, SetsIsSteadyStateRefreshFrame) { EXPECT_TRUE(image.IsSteadyStateRefreshFrame()); } +TEST(FrameEncodeMetadataWriterTest, KeyFramesAreNotMarkedAsSteadyStateRefresh) { + EncodedImage image; + const int64_t kTimestampMs = 123456; + FakeEncodedImageCallback sink; + + FrameEncodeMetadataWriter encode_timer(CreateTestEnvironment(), &sink); + encode_timer.OnEncoderInit(VideoCodec()); + // Any non-zero bitrate needed to be set before the first frame. + VideoBitrateAllocation bitrate_allocation; + bitrate_allocation.SetBitrate(0, 0, 500000); + encode_timer.OnSetRates(bitrate_allocation, 30); + + image.SetRtpTimestamp(static_cast<uint32_t>(kTimestampMs * 90)); + + VideoFrame::UpdateRect empty_update_rect; + empty_update_rect.MakeEmptyUpdate(); + VideoFrame refresh_frame = VideoFrame::Builder() + .set_timestamp_ms(kTimestampMs) + .set_rtp_timestamp(kTimestampMs * 90) + .set_update_rect(empty_update_rect) + .set_video_frame_buffer(kFrameBuffer) + .build(); + encode_timer.OnEncodeStarted(refresh_frame); + image.SetFrameType(VideoFrameType::kVideoFrameKey); + encode_timer.FillMetadataAndTimingInfo(0, &image); + EXPECT_FALSE(image.IsSteadyStateRefreshFrame()); +} + TEST(FrameEncodeMetadataWriterTest, CopiesPacketInfos) { EncodedImage image; const int64_t kTimestampMs = 123456;