From f87f0b080792f8ba2994ee1b8e7d4a41fc989570 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Thu, 16 Apr 2026 04:11:17 +0200 Subject: [PATCH] fix: suppress spurious media pause during frame rate switch close #871 --- lib/screens/video_player_screen.dart | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/screens/video_player_screen.dart b/lib/screens/video_player_screen.dart index c334f4f5..0c367d07 100644 --- a/lib/screens/video_player_screen.dart +++ b/lib/screens/video_player_screen.dart @@ -838,6 +838,7 @@ class VideoPlayerScreenState extends State with WidgetsBindin /// Apply frame rate matching on Android by setting the display refresh rate /// to match the video content's frame rate. int _frameRateRetries = 0; + bool _suppressMediaPauseDuringFrameRateSwitch = false; Future _applyFrameRateMatching() async { if (player == null || !Platform.isAndroid) return; @@ -860,7 +861,15 @@ class VideoPlayerScreenState extends State with WidgetsBindin _frameRateRetries = 0; final durationMs = player!.state.duration.inMilliseconds; + + // Suppress spurious PauseEvent from MediaSession during HDMI renegotiation. + // Fire Stick (and similar Android TV devices) send onPause() through the + // MediaSession callback when the display mode changes for frame rate matching. + _suppressMediaPauseDuringFrameRateSwitch = true; await player!.setVideoFrameRate(fps, durationMs); + Future.delayed(const Duration(seconds: 2), () { + _suppressMediaPauseDuringFrameRateSwitch = false; + }); // Set MPV video-sync mode for smoother playback when display is synced await player!.setProperty('video-sync', 'display-tempo'); @@ -979,6 +988,10 @@ class VideoPlayerScreenState extends State with WidgetsBindin _wasPlayingBeforeInactive = false; _updateMediaControlsPlaybackState(); } else if (event is PauseEvent) { + if (_suppressMediaPauseDuringFrameRateSwitch) { + appLogger.d('Media control: Pause event suppressed (frame rate switch in progress)'); + return; + } appLogger.d('Media control: Pause event received'); currentPlayer!.pause(); _updateMediaControlsPlaybackState();