diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java b/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java index 08becdb07d..42d9faf257 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java @@ -252,9 +252,8 @@ public final class EncoderUtil { } } - // Fix frame being too wide or too tall. - width = videoCapabilities.getSupportedWidths().clamp(width); - int adjustedHeight = videoCapabilities.getSupportedHeightsFor(width).clamp(height); + int supportedWidth = videoCapabilities.getSupportedWidths().clamp(width); + int adjustedHeight = videoCapabilities.getSupportedHeightsFor(supportedWidth).clamp(height); if (adjustedHeight != height) { width = alignResolution((int) round((double) width * adjustedHeight / height), widthAlignment); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java index 86299e1178..de021bd17f 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java @@ -163,6 +163,23 @@ public class EncoderUtilTest { assertThat(closestSupportedResolution.getHeight()).isEqualTo(1080); } + @Test + public void getSupportedResolution_requestedReallyLarge_matchesAspectRatio() { + ImmutableList supportedEncoders = EncoderUtil.getSupportedEncoders(MIME_TYPE); + MediaCodecInfo encoderInfo = supportedEncoders.get(0); + + double aspectRatio = 1.5; + @Nullable + Size closestSupportedResolution = + EncoderUtil.getSupportedResolution( + encoderInfo, MIME_TYPE, (int) (aspectRatio * 5000), 5000); + + assertThat(closestSupportedResolution).isNotNull(); + assertThat( + (double) closestSupportedResolution.getWidth() / closestSupportedResolution.getHeight()) + .isEqualTo(aspectRatio); + } + /** * @see EncoderUtil#getSupportedEncodersForHdrEditing(String, ColorInfo) */