main_window: wire loudnorm setting to video players

Read the setting at startup and apply it to the embedded preview's
video player. On settings change, toggle af=loudnorm live on all
active mpv instances (embedded + popout).

Also adds _get_all_video_players() helper for iterating both.
This commit is contained in:
pax 2026-04-11 23:22:33 -05:00
parent 2e9b99e4b8
commit 61403c8acc

View File

@ -335,6 +335,7 @@ class BooruApp(QMainWindow):
self._right_splitter = right = QSplitter(Qt.Orientation.Vertical) self._right_splitter = right = QSplitter(Qt.Orientation.Vertical)
self._preview = ImagePreview() self._preview = ImagePreview()
self._preview._video_player._loudnorm = self._db.get_setting_bool("loudnorm")
self._preview.close_requested.connect(self._close_preview) self._preview.close_requested.connect(self._close_preview)
self._preview.open_in_default.connect(self._open_preview_in_default) self._preview.open_in_default.connect(self._open_preview_in_default)
self._preview.open_in_browser.connect(self._open_preview_in_browser) self._preview.open_in_browser.connect(self._open_preview_in_browser)
@ -1077,6 +1078,13 @@ class BooruApp(QMainWindow):
right_is_first = current_first is self._right_splitter right_is_first = current_first is self._right_splitter
if want_right_first != right_is_first: if want_right_first != right_is_first:
self._splitter.insertWidget(0, self._right_splitter if flip else self._stack) self._splitter.insertWidget(0, self._right_splitter if flip else self._stack)
# Apply audio normalization live
loudnorm = self._db.get_setting_bool("loudnorm")
af_val = "loudnorm" if loudnorm else ""
for vp in self._get_all_video_players():
vp._loudnorm = loudnorm
if vp._mpv is not None:
vp._mpv.af = af_val
self._status.showMessage("Settings applied") self._status.showMessage("Settings applied")
# -- Fullscreen & Privacy -- # -- Fullscreen & Privacy --
@ -1104,6 +1112,14 @@ class BooruApp(QMainWindow):
if hasattr(self, '_main_window_save_timer'): if hasattr(self, '_main_window_save_timer'):
self._main_window_save_timer.start() self._main_window_save_timer.start()
def _get_all_video_players(self):
"""Return every VideoPlayer instance that currently exists."""
players = [self._preview._video_player]
pw = self._popout_ctrl.window
if pw is not None:
players.append(pw._video)
return players
# -- Keyboard shortcuts -- # -- Keyboard shortcuts --
def keyPressEvent(self, event) -> None: def keyPressEvent(self, event) -> None: