main_window: skip embedded preview stop() when popout is open

behavior change: _on_video_stream no longer calls stop() on the
embedded preview's mpv when the popout is the visible target. The
embedded preview is hidden and idle — the synchronous command('stop')
round-trip was wasting ~50-100ms on the click-to-first-frame critical
path with no visible benefit. loadfile("replace") in the popout's
play_file handles the media swap atomically.
This commit is contained in:
pax 2026-04-09 20:51:06 -05:00
parent 82e7c77251
commit 510b423327

View File

@ -1461,21 +1461,25 @@ class BooruApp(QMainWindow):
flag in that closure so it doesn't re-call set_media with flag in that closure so it doesn't re-call set_media with
the local path mid-playback (which would interrupt mpv and the local path mid-playback (which would interrupt mpv and
reset position to 0). reset position to 0).
When the popout is open, the embedded preview's mpv is not
stopped it's hidden and idle, and the synchronous stop()
call would waste critical-path time for no visible benefit.
""" """
# Stop any video player currently active in the embedded
# preview before swapping it out — mirrors the close-old-mpv
# discipline of `_update_fullscreen`.
self._preview._video_player.stop()
if self._fullscreen_window and self._fullscreen_window.isVisible(): if self._fullscreen_window and self._fullscreen_window.isVisible():
# Popout open — only stream there, keep embedded preview clear. # Popout is the visible target — leave the embedded preview's
# mpv alone. It's hidden and idle; stopping it here wastes
# synchronous time on the critical path (command('stop') is a
# round-trip into mpv's command queue). loadfile("replace") in
# the popout's play_file handles the media swap atomically.
self._preview._info_label.setText(info) self._preview._info_label.setText(info)
self._preview._current_path = url self._preview._current_path = url
self._fullscreen_window.set_media(url, info, width=width, height=height) self._fullscreen_window.set_media(url, info, width=width, height=height)
self._update_fullscreen_state() self._update_fullscreen_state()
else: else:
# Embedded preview's set_media doesn't take width/height # Embedded preview is the visible target — stop any active
# (it's in a docked panel and doesn't fit-to-content) so # playback before handing it the new URL.
# the pre-fit hint goes nowhere here. Just hand it the URL. self._preview._video_player.stop()
self._preview.set_media(url, info) self._preview.set_media(url, info)
self._status.showMessage(f"Streaming #{Path(url.split('?')[0]).name}...") self._status.showMessage(f"Streaming #{Path(url.split('?')[0]).name}...")
# Note: no `_update_fullscreen_state()` call when popout is # Note: no `_update_fullscreen_state()` call when popout is