From a042cf5ca63f47d59dfa0c6d6dfc7be8b300b600 Mon Sep 17 00:00:00 2001 From: tapframe <85391825+tapframe@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:51:17 +0530 Subject: [PATCH] update aspect ratio indicator ios --- src/components/player/KSPlayerCore.tsx | 17 ++++++++++++++++- src/components/player/android/MpvPlayer.tsx | 4 ++++ .../player/android/components/VideoSurface.tsx | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/components/player/KSPlayerCore.tsx b/src/components/player/KSPlayerCore.tsx index 7259813c..4d042109 100644 --- a/src/components/player/KSPlayerCore.tsx +++ b/src/components/player/KSPlayerCore.tsx @@ -802,6 +802,7 @@ const KSPlayerCore: React.FC = () => { volume={volume} brightness={brightness} controlsTimeout={controlsTimeout} + resizeMode={resizeMode} /> {/* UI Controls */} @@ -829,7 +830,21 @@ const KSPlayerCore: React.FC = () => { togglePlayback={controls.togglePlayback} skip={controls.skip} handleClose={handleClose} - cycleAspectRatio={() => setResizeMode(prev => prev === 'cover' ? 'contain' : 'cover')} + cycleAspectRatio={() => { + gestureControls.showResizeModeOverlayFn(() => { + setResizeMode(prev => { + switch (prev) { + case 'contain': + return 'cover'; + case 'cover': + return 'stretch'; + case 'stretch': + default: + return 'contain'; + } + }); + }); + }} cyclePlaybackSpeed={() => speedControl.setPlaybackSpeed(speedControl.playbackSpeed >= 2 ? 1 : speedControl.playbackSpeed + 0.25)} currentPlaybackSpeed={speedControl.playbackSpeed} setShowAudioModal={modals.setShowAudioModal} diff --git a/src/components/player/android/MpvPlayer.tsx b/src/components/player/android/MpvPlayer.tsx index b84628e8..ce3dbc46 100644 --- a/src/components/player/android/MpvPlayer.tsx +++ b/src/components/player/android/MpvPlayer.tsx @@ -10,6 +10,7 @@ export interface MpvPlayerRef { seek: (positionSeconds: number) => void; setAudioTrack: (trackId: number) => void; setSubtitleTrack: (trackId: number) => void; + setResizeMode: (mode: 'contain' | 'cover' | 'stretch') => void; } export interface MpvPlayerProps { @@ -65,6 +66,9 @@ const MpvPlayer = forwardRef((props, ref) => { setSubtitleTrack: (trackId: number) => { dispatchCommand('setSubtitleTrack', [trackId]); }, + setResizeMode: (mode: 'contain' | 'cover' | 'stretch') => { + dispatchCommand('setResizeMode', [mode]); + }, }), [dispatchCommand]); if (Platform.OS !== 'android' || !MpvPlayerNative) { diff --git a/src/components/player/android/components/VideoSurface.tsx b/src/components/player/android/components/VideoSurface.tsx index d5ff03c5..d67f2e8d 100644 --- a/src/components/player/android/components/VideoSurface.tsx +++ b/src/components/player/android/components/VideoSurface.tsx @@ -183,6 +183,12 @@ export const VideoSurface: React.FC = ({ console.log('[VideoSurface] Headers:', exoRequestHeaders); }, [streamUrl, useExoPlayer, exoRequestHeaders]); + useEffect(() => { + if (mpvPlayerRef?.current && !useExoPlayer) { + mpvPlayerRef.current.setResizeMode(getMpvResizeMode()); + } + }, [resizeMode, useExoPlayer, mpvPlayerRef]); + const handleMpvLoad = (data: { duration: number; width: number; height: number }) => { console.log('[VideoSurface] MPV onLoad received:', data); onLoad({ @@ -300,6 +306,18 @@ export const VideoSurface: React.FC = ({ } }; + const getMpvResizeMode = (): 'contain' | 'cover' | 'stretch' => { + switch (resizeMode) { + case 'cover': + return 'cover'; + case 'stretch': + return 'stretch'; + case 'contain': + default: + return 'contain'; + } + }; + const alphaHex = (opacity01: number) => { const a = Math.max(0, Math.min(1, opacity01)); return Math.round(a * 255).toString(16).padStart(2, '0').toUpperCase();