diff --git a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt index eec524f8..9b342f30 100644 --- a/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt +++ b/android/app/src/main/kotlin/com/edde746/plezy/exoplayer/ExoPlayerCore.kt @@ -86,6 +86,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener { private var subtitleView: SubtitleView? = null private var assHandler: AssHandler? = null private var overlayLayoutListener: ViewTreeObserver.OnGlobalLayoutListener? = null + private var lastVideoSize: VideoSize? = null private var exoPlayer: ExoPlayer? = null private var trackSelector: DefaultTrackSelector? = null private var tunnelingDisabledForCodec: Boolean = false @@ -282,6 +283,12 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener { ensureFlutterOverlayOnTop() overlayLayoutListener = ViewTreeObserver.OnGlobalLayoutListener { ensureFlutterOverlayOnTop() + // Recalculate surface size on layout change (orientation/PiP transitions) + lastVideoSize?.let { vs -> + if (vs.width > 0 && vs.height > 0) { + updateSurfaceViewSize(vs.width, vs.height, vs.pixelWidthHeightRatio) + } + } } contentView.viewTreeObserver.addOnGlobalLayoutListener(overlayLayoutListener) @@ -556,6 +563,7 @@ class ExoPlayerCore(private val activity: Activity) : Player.Listener { override fun onVideoSizeChanged(videoSize: VideoSize) { Log.d(TAG, "Video size changed: ${videoSize.width}x${videoSize.height}, ratio: ${videoSize.pixelWidthHeightRatio}") + lastVideoSize = videoSize updateSurfaceViewSize(videoSize.width, videoSize.height, videoSize.pixelWidthHeightRatio) } diff --git a/android/app/src/main/kotlin/com/edde746/plezy/mpv/MpvPlayerCore.kt b/android/app/src/main/kotlin/com/edde746/plezy/mpv/MpvPlayerCore.kt index f0e83614..7c8830d3 100644 --- a/android/app/src/main/kotlin/com/edde746/plezy/mpv/MpvPlayerCore.kt +++ b/android/app/src/main/kotlin/com/edde746/plezy/mpv/MpvPlayerCore.kt @@ -255,6 +255,15 @@ class MpvPlayerCore(private val activity: Activity) : ensureFlutterOverlayOnTop() overlayLayoutListener = ViewTreeObserver.OnGlobalLayoutListener { ensureFlutterOverlayOnTop() + // Re-apply surface size on layout change (orientation transitions) + val sv = surfaceView + if (sv != null && nativeReady && !disposing && sv.width > 0 && sv.height > 0) { + try { + MPVLib.setPropertyString("android-surface-size", "${sv.width}x${sv.height}") + } catch (e: Exception) { + Log.w(TAG, "Failed to update surface size on layout change", e) + } + } } contentView.viewTreeObserver.addOnGlobalLayoutListener(overlayLayoutListener)