Refactor getMaxVideoSizeInViewport into TrackSelectionUtil so it can be reused in external code
This commit is contained in:
parent
7d784d4067
commit
0ead7bb221
@ -3361,7 +3361,7 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
// smallest to exceed the maximum size at which it can be displayed within the viewport.
|
||||
if (format.width > 0 && format.height > 0) {
|
||||
Point maxVideoSizeInViewport =
|
||||
getMaxVideoSizeInViewport(
|
||||
TrackSelectionUtil.getMaxVideoSizeInViewport(
|
||||
orientationMayChange, viewportWidth, viewportHeight, format.width, format.height);
|
||||
int videoPixels = format.width * format.height;
|
||||
if (format.width >= (int) (maxVideoSizeInViewport.x * FRACTION_TO_CONSIDER_FULLSCREEN)
|
||||
@ -3374,32 +3374,6 @@ public class DefaultTrackSelector extends MappingTrackSelector
|
||||
return maxVideoPixelsToRetain;
|
||||
}
|
||||
|
||||
/**
|
||||
* Given viewport dimensions and video dimensions, computes the maximum size of the video as it
|
||||
* will be rendered to fit inside of the viewport.
|
||||
*/
|
||||
private static Point getMaxVideoSizeInViewport(
|
||||
boolean orientationMayChange,
|
||||
int viewportWidth,
|
||||
int viewportHeight,
|
||||
int videoWidth,
|
||||
int videoHeight) {
|
||||
if (orientationMayChange && (videoWidth > videoHeight) != (viewportWidth > viewportHeight)) {
|
||||
// Rotation is allowed, and the video will be larger in the rotated viewport.
|
||||
int tempViewportWidth = viewportWidth;
|
||||
viewportWidth = viewportHeight;
|
||||
viewportHeight = tempViewportWidth;
|
||||
}
|
||||
|
||||
if (videoWidth * viewportHeight >= videoHeight * viewportWidth) {
|
||||
// Horizontal letter-boxing along top and bottom.
|
||||
return new Point(viewportWidth, Util.ceilDivide(viewportWidth * videoHeight, videoWidth));
|
||||
} else {
|
||||
// Vertical letter-boxing along edges.
|
||||
return new Point(Util.ceilDivide(viewportHeight * videoWidth, videoHeight), viewportHeight);
|
||||
}
|
||||
}
|
||||
|
||||
private static int getRoleFlagMatchScore(int trackRoleFlags, int preferredRoleFlags) {
|
||||
if (trackRoleFlags != 0 && trackRoleFlags == preferredRoleFlags) {
|
||||
// Prefer perfect match over partial matches.
|
||||
|
@ -15,6 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.trackselection;
|
||||
|
||||
import android.graphics.Point;
|
||||
import android.os.SystemClock;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.C;
|
||||
@ -22,6 +23,7 @@ import androidx.media3.common.TrackGroup;
|
||||
import androidx.media3.common.Tracks;
|
||||
import androidx.media3.common.util.NullableType;
|
||||
import androidx.media3.common.util.UnstableApi;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.exoplayer.RendererCapabilities;
|
||||
import androidx.media3.exoplayer.source.TrackGroupArray;
|
||||
import androidx.media3.exoplayer.trackselection.DefaultTrackSelector.SelectionOverride;
|
||||
@ -203,4 +205,30 @@ public final class TrackSelectionUtil {
|
||||
}
|
||||
return new Tracks(trackGroups.build());
|
||||
}
|
||||
|
||||
/**
|
||||
* Given viewport dimensions and video dimensions, computes the maximum size of the video as it
|
||||
* will be rendered to fit inside of the viewport.
|
||||
*/
|
||||
public static Point getMaxVideoSizeInViewport(
|
||||
boolean orientationMayChange,
|
||||
int viewportWidth,
|
||||
int viewportHeight,
|
||||
int videoWidth,
|
||||
int videoHeight) {
|
||||
if (orientationMayChange && (videoWidth > videoHeight) != (viewportWidth > viewportHeight)) {
|
||||
// Rotation is allowed, and the video will be larger in the rotated viewport.
|
||||
int tempViewportWidth = viewportWidth;
|
||||
viewportWidth = viewportHeight;
|
||||
viewportHeight = tempViewportWidth;
|
||||
}
|
||||
|
||||
if (videoWidth * viewportHeight >= videoHeight * viewportWidth) {
|
||||
// Horizontal letter-boxing along top and bottom.
|
||||
return new Point(viewportWidth, Util.ceilDivide(viewportWidth * videoHeight, videoWidth));
|
||||
} else {
|
||||
// Vertical letter-boxing along edges.
|
||||
return new Point(Util.ceilDivide(viewportHeight * videoWidth, videoHeight), viewportHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user