fix: recalculate video surface size on orientation change

close #587
This commit is contained in:
edde746
2026-02-28 06:16:52 +01:00
parent 60d1431443
commit 078f6b29d5
2 changed files with 17 additions and 0 deletions
@@ -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)
}
@@ -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)