diff --git a/libvlc/src/main/java/org/videolan/libvlc/VideoHelper.java b/libvlc/src/main/java/org/videolan/libvlc/VideoHelper.java index 224dc6212679ac0d1f98f0571c655410ecf0bd66..2384d6a26755ba8918405ef590bd6e1c37c8609e 100644 --- a/libvlc/src/main/java/org/videolan/libvlc/VideoHelper.java +++ b/libvlc/src/main/java/org/videolan/libvlc/VideoHelper.java @@ -127,85 +127,64 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener { mMediaPlayer.getVLCVout().detachViews(); } - private void changeMediaPlayerLayout(int displayW, int displayH) { + private void changeMediaPlayerLayout() { if (mMediaPlayer.isReleased()) return; /* Change the video placement using the MediaPlayer API */ switch (mCurrentScaleType) { case SURFACE_BEST_FIT: mMediaPlayer.setAspectRatio(null); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; - case SURFACE_FIT_SCREEN: { - IMedia.VideoTrack vtrack = (IMedia.VideoTrack) mMediaPlayer.getSelectedTrack(Media.Track.Type.Video); - if (vtrack == null) - return; - final boolean videoSwapped = vtrack.orientation == IMedia.VideoTrack.Orientation.LeftBottom - || vtrack.orientation == IMedia.VideoTrack.Orientation.RightTop; - int videoW = vtrack.width; - int videoH = vtrack.height; - - if (videoSwapped) { - int swap = videoW; - videoW = videoH; - videoH = swap; - } - if (vtrack.sarNum != vtrack.sarDen) - videoW = videoW * vtrack.sarNum / vtrack.sarDen; - - float ar = videoW / (float) videoH; - float dar = displayW / (float) displayH; - - float scale; - if (dar >= ar) - scale = displayW / (float) videoW; /* horizontal */ - else - scale = displayH / (float) videoH; /* vertical */ - mMediaPlayer.setScale(scale); + case SURFACE_FIT_SCREEN: mMediaPlayer.setAspectRatio(null); + mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Larger); break; - } - case SURFACE_FILL: { - IMedia.VideoTrack vtrack = (IMedia.VideoTrack) mMediaPlayer.getSelectedTrack(Media.Track.Type.Video); - if (vtrack == null) - return; - final boolean videoSwapped = vtrack.orientation == IMedia.VideoTrack.Orientation.LeftBottom - || vtrack.orientation == IMedia.VideoTrack.Orientation.RightTop; + case SURFACE_FILL: + mMediaPlayer.setAspectRatio(null); mMediaPlayer.setScale(0); - mMediaPlayer.setAspectRatio(!videoSwapped ? ""+displayW+":"+displayH - : ""+displayH+":"+displayW); + mMediaPlayer.setDisplayFit(FitMode.Fill); break; - } case SURFACE_16_9: mMediaPlayer.setAspectRatio("16:9"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_16_10: mMediaPlayer.setAspectRatio("16:10"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_221_1: mMediaPlayer.setAspectRatio("221:100"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_235_1: mMediaPlayer.setAspectRatio("235:100"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_239_1: mMediaPlayer.setAspectRatio("239:100"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_5_4: mMediaPlayer.setAspectRatio("5:4"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_4_3: mMediaPlayer.setAspectRatio("4:3"); mMediaPlayer.setScale(0); + mMediaPlayer.setDisplayFit(FitMode.Smaller); break; case SURFACE_ORIGINAL: mMediaPlayer.setAspectRatio(null); mMediaPlayer.setScale(1); + mMediaPlayer.setDisplayFit(FitMode.None); break; } } @@ -243,7 +222,7 @@ class VideoHelper implements IVLCVout.OnNewVideoLayoutListener { ViewGroup.LayoutParams lp = videoView.getLayoutParams(); if (mVideoWidth * mVideoHeight == 0 || (AndroidUtil.isNougatOrLater && activity != null && activity.isInPictureInPictureMode())) { - changeMediaPlayerLayout(sw, sh); + changeMediaPlayerLayout(); /* Case of OpenGL vouts: handles the placement of the video using MediaPlayer API */ lp.width = ViewGroup.LayoutParams.MATCH_PARENT; lp.height = ViewGroup.LayoutParams.MATCH_PARENT;