66
77import logging
88import os
9+ import platform
910from dataclasses import dataclass
1011from pathlib import Path
1112from typing import TYPE_CHECKING
1213
1314import inject
14- from PySide6 .QtCore import QObject , Qt , Signal
15+ from PySide6 .QtCore import QObject , Qt , Signal , Slot
1516
1617from .application_paths import ApplicationPathsService
1718from .host_integration import HostIntegrationService
@@ -106,6 +107,10 @@ def init(self, win_id: int | None = None):
106107 self ._mpv .observe_property ("height" , self ._on_player_height_changed )
107108 self ._mpv .observe_property ("width" , self ._on_player_width_changed )
108109
110+ if platform .system () == "Linux" and os .getenv ("MPVQC_LINUX_EXPERIMENTAL_RENDERER" , "" ).lower () != "false" :
111+ self ._host_integration .refresh_rate_changed .connect (self ._on_refresh_rate_changed )
112+ self ._on_refresh_rate_changed (self ._host_integration .refresh_rate )
113+
109114 @property
110115 def mpv (self ) -> MPV | None :
111116 return self ._mpv
@@ -115,6 +120,11 @@ def _get_mpv_attr(self, attr: str) -> Any | None:
115120 return None
116121 return getattr (self ._mpv , attr , None )
117122
123+ def _set_mpv_attr (self , attr : str , value : Any ) -> None :
124+ if self ._mpv is None :
125+ return
126+ setattr (self ._mpv , attr , value )
127+
118128 @property
119129 def mpv_version (self ) -> str :
120130 return self ._get_mpv_attr ("mpv_version" ) or ""
@@ -238,6 +248,17 @@ def _on_player_width_changed(self, _, value: int) -> None:
238248 if value is not None :
239249 self .width_changed .emit (value )
240250
251+ @Slot (float )
252+ def _on_refresh_rate_changed (self , new_refresh_rate : float ) -> None :
253+ if new_refresh_rate is None :
254+ return
255+
256+ refresh_rate = round (new_refresh_rate , 4 )
257+ audio_delay = round (1 / refresh_rate , 4 )
258+
259+ logger .info ("Adjusting audio_delay to %s due to updated refresh rate %s" , audio_delay , refresh_rate )
260+ self ._set_mpv_attr ("audio_delay" , audio_delay )
261+
241262 def move_mouse (self , x : int , y : int ) -> None :
242263 zoom_factor = self ._host_integration .display_zoom_factor
243264 x = int (x * zoom_factor )
0 commit comments