feat: add tunneled playback setting + frame watchdog for HDR black screen

Adds a user-facing toggle for MediaCodec tunneling (Android/ExoPlayer)
and a rendered-frame watchdog that auto-falls back to MPV when ExoPlayer
produces 0 video frames after 8 seconds of audio playback.
This commit is contained in:
edde746
2026-03-01 04:02:36 +01:00
parent 1d739c74ec
commit d0f2122944
24 changed files with 171 additions and 5 deletions
+11
View File
@@ -65,6 +65,7 @@ class SettingsService extends BaseSharedPreferencesService {
static const String _keyMaxVolume = 'max_volume';
static const String _keyEnableDiscordRPC = 'enable_discord_rpc';
static const String _keyMatchContentFrameRate = 'match_content_frame_rate';
static const String _keyTunneledPlayback = 'tunneled_playback';
static const String _keyDefaultPlaybackSpeed = 'default_playback_speed';
static const String _keyAutoPlayNextEpisode = 'auto_play_next_episode';
static const String _keyUseExoPlayer = 'use_exoplayer';
@@ -993,6 +994,15 @@ class SettingsService extends BaseSharedPreferencesService {
return prefs.getBool(_keyMatchContentFrameRate) ?? false; // Default disabled
}
// Tunneled Playback (Android ExoPlayer only)
Future<void> setTunneledPlayback(bool enabled) async {
await prefs.setBool(_keyTunneledPlayback, enabled);
}
bool getTunneledPlayback() {
return prefs.getBool(_keyTunneledPlayback) ?? true; // Default: enabled
}
// Default Playback Speed (0.5 to 3.0)
Future<void> setDefaultPlaybackSpeed(double speed) async {
await prefs.setDouble(_keyDefaultPlaybackSpeed, speed.clamp(0.5, 3.0));
@@ -1202,6 +1212,7 @@ class SettingsService extends BaseSharedPreferencesService {
prefs.remove(_keyMpvConfigPresets),
prefs.remove(_keyEnableDiscordRPC),
prefs.remove(_keyMatchContentFrameRate),
prefs.remove(_keyTunneledPlayback),
prefs.remove(_keyDefaultPlaybackSpeed),
prefs.remove(_keyAutoPlayNextEpisode),
prefs.remove(_keyUseExoPlayer),