Skip to content

Commit 163eebc

Browse files
committed
feat(linux): enable experimental renderer by default
1 parent fdd99e7 commit 163eebc

File tree

3 files changed

+46
-2
lines changed

3 files changed

+46
-2
lines changed

docs/configuration.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,10 @@ mpvQC can be configured using the following environment variables:
2121
- **Operating System:** All
2222
- **Description:** Enables mpv player logging
2323
- **Possible Values:** *not set* or *any value*
24+
25+
- **`MPVQC_LINUX_EXPERIMENTAL_RENDERER`**
26+
27+
- **Default Value:** true
28+
- **Operating System:** Linux
29+
- **Description:** Enables rendering in background thread
30+
- **Possible Values:** *false* to revert back to stable renderer, unset to enable

mpvqc/services/player.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,13 @@
66

77
import logging
88
import os
9+
import platform
910
from dataclasses import dataclass
1011
from pathlib import Path
1112
from typing import TYPE_CHECKING
1213

1314
import inject
14-
from PySide6.QtCore import QObject, Qt, Signal
15+
from PySide6.QtCore import QObject, Qt, Signal, Slot
1516

1617
from .application_paths import ApplicationPathsService
1718
from .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)

mpvqc/views/__init__.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,21 @@
33
# SPDX-License-Identifier: GPL-3.0-or-later
44

55
# ruff: noqa: F401
6-
from .player_framebuffer_object import MpvqcMpvFrameBufferObjectPyObject
6+
7+
import logging
8+
import os
9+
import platform
10+
11+
logger = logging.getLogger(__name__)
12+
13+
if platform.system() == "Linux":
14+
if os.getenv("MPVQC_LINUX_EXPERIMENTAL_RENDERER", "").lower() == "false":
15+
logger.info("Using default renderer. Unset MPVQC_LINUX_EXPERIMENTAL_RENDERER to enable experimental renderer")
16+
from .player_framebuffer_object import MpvqcMpvFrameBufferObjectPyObject
17+
else:
18+
logger.info("Using experimental renderer. Set MPVQC_LINUX_EXPERIMENTAL_RENDERER=false to disable")
19+
from .player_framebuffer_object_offscreen import MpvqcMpvFrameBufferObjectPyObject
20+
else:
21+
from .player_framebuffer_object import MpvqcMpvFrameBufferObjectPyObject
22+
723
from .player_win_id import MpvWindowPyObject

0 commit comments

Comments
 (0)