From cc70c7586840bcdcc3e93dca6dbdad17c5ca5275 Mon Sep 17 00:00:00 2001 From: Jon Dye Date: Thu, 9 Jul 2026 14:33:56 +0100 Subject: [PATCH 1/2] fix(video): repaint after late size change OS-20711 --- patches/chromium/.patches | 1 + ...1_repaint_on_late_video_size_changed.patch | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 patches/chromium/os-20711_repaint_on_late_video_size_changed.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index fedcf08c646ef..e28e977652b3d 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -197,3 +197,4 @@ gin_cap_v8_coderange_to_64mb_on_low-memory_systems.patch brightsign_fix_black_transparent_hole_being_shown_before_video.patch feat_map_krolealwaysontop_z-order_level_to_always-on-top_surface.patch feat_brightsign_add_setattribute_and_setsyncparams_os-21421.patch +os-20711_repaint_on_late_video_size_changed.patch diff --git a/patches/chromium/os-20711_repaint_on_late_video_size_changed.patch b/patches/chromium/os-20711_repaint_on_late_video_size_changed.patch new file mode 100644 index 0000000000000..3c9c931d51794 --- /dev/null +++ b/patches/chromium/os-20711_repaint_on_late_video_size_changed.patch @@ -0,0 +1,25 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: JDye +Date: Thu, 9 Jul 2026 14:40:00 +0000 +Subject: fix(video): repaint after late size change OS-20711 + +When a late VideoSizeChanged callback arrives after the player is already in +HaveEnoughData, we can update frame/layer state without forcing a repaint. + +Trigger a repaint in that state so the resized video becomes visible +immediately. + +diff --git a/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc b/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc +index 4dd2c1cd5c9ed72663d79ae95e3f24b79682ca33..171de1af1b122f112fddf495a991e5d75615e19c 100644 +--- a/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc ++++ b/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc +@@ -1408,6 +1408,9 @@ void WebMediaPlayerBrightsign::VideoSizeChangedCallback(uint32_t width, + compositor_task_runner_->PostTask( + FROM_HERE, base::BindOnce(&WebMediaPlayerBrightsign::DidReceiveFrame, weak_this_)); + StartFrameReadyTimerIfRequired(); ++ ++ client_->SizeChanged(); ++ client_->DidPlayerSizeChange(NaturalSize()); + } + + void WebMediaPlayerBrightsign::PlaybackPositionUpdatedCallback( From 817ffb209cf5e1fb844ad2060fa4b935bb16db96 Mon Sep 17 00:00:00 2001 From: Tariq Bashir <120014322+t-bashir-bs@users.noreply.github.com> Date: Thu, 16 Jul 2026 12:41:46 +0100 Subject: [PATCH 2/2] fix: Brightsign fire TimeChanged for equal-time seeks on seek completion OS-21551 (#155) --- patches/chromium/.patches | 1 + ...or_equal-time-seeks_on-seek_os-21551.patch | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 patches/chromium/fix_brightsign_fire_timechanged_for_equal-time-seeks_on-seek_os-21551.patch diff --git a/patches/chromium/.patches b/patches/chromium/.patches index e28e977652b3d..fe791722f0e17 100644 --- a/patches/chromium/.patches +++ b/patches/chromium/.patches @@ -198,3 +198,4 @@ brightsign_fix_black_transparent_hole_being_shown_before_video.patch feat_map_krolealwaysontop_z-order_level_to_always-on-top_surface.patch feat_brightsign_add_setattribute_and_setsyncparams_os-21421.patch os-20711_repaint_on_late_video_size_changed.patch +fix_brightsign_fire_timechanged_for_equal-time-seeks_on-seek_os-21551.patch diff --git a/patches/chromium/fix_brightsign_fire_timechanged_for_equal-time-seeks_on-seek_os-21551.patch b/patches/chromium/fix_brightsign_fire_timechanged_for_equal-time-seeks_on-seek_os-21551.patch new file mode 100644 index 0000000000000..8f85200da8858 --- /dev/null +++ b/patches/chromium/fix_brightsign_fire_timechanged_for_equal-time-seeks_on-seek_os-21551.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Tariq Bashir +Date: Wed, 15 Jul 2026 12:00:35 +0100 +Subject: fix: ensure BrightSign seek completion fires TimeChanged OS-21551 + +Blink expects a TimeChanged notification for every completed seek, +including when the resolved media time remains unchanged. + +Snapshot current_time_ before updating the playback position. If the +normal update path leaves it unchanged, explicitly notify Blink. This +avoids relying on equality with the raw reported timestamp and covers +cases where the reported time is clamped or rounded. + +Normal seeks continue to emit a single notification through +PlaybackPositionUpdatedCallback, while unchanged-time seeks use the +fallback. + +diff --git a/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc b/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc +index 171de1af1b122f112fddf495a991e5d75615e19c..2fce1e846dec5b4b773ca4a74382a949faa4737c 100644 +--- a/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc ++++ b/third_party/blink/renderer/platform/media/brightsign/web_media_player_brightsign.cc +@@ -1382,8 +1382,18 @@ void WebMediaPlayerBrightsign::TextureMailboxReadyCallback( + void WebMediaPlayerBrightsign::SeekCompletedCallback(std::chrono::microseconds current_time) { + VLOG(1) << __func__; + DCHECK(main_task_runner_->BelongsToCurrentThread()); ++ ++ const double previous_current_time = current_time_; ++ + seeking_ = false; + PlaybackPositionUpdatedCallback(current_time, decode_stats_); ++ ++ // Blink expects a TimeChanged() notification in response to every seek. ++ // Send one if the normal playback position update did not change the time. ++ if (ready_state_ != kReadyStateHaveNothing && ++ current_time_ == previous_current_time) { ++ client_->TimeChanged(); ++ } + } + + void WebMediaPlayerBrightsign::VideoSizeChangedCallback(uint32_t width,