From a3b0708d31abb73e77125ffbad071341d99f10fb Mon Sep 17 00:00:00 2001 From: samrobinson Date: Tue, 17 Jan 2023 16:07:39 +0000 Subject: [PATCH] Add resolution fallback for 25% of requested. If a device only supports 1920x1080 as maximum resolution, then adding the 25% case ensures 8k is reduced correctly. PiperOrigin-RevId: 502588364 --- .../androidx/media3/transformer/EncoderUtil.java | 2 +- .../media3/transformer/EncoderUtilTest.java | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) 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 920d7ce401..15d7a6ca36 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/EncoderUtil.java @@ -241,7 +241,7 @@ public final class EncoderUtil { float[] reductionFactors = new float[] { - 0.95f, 0.9f, 0.85f, 0.8f, 0.75f, 0.7f, 2f / 3f, 0.6f, 0.55f, 0.5f, 0.4f, 1f / 3f + 0.95f, 0.9f, 0.85f, 0.8f, 0.75f, 0.7f, 2f / 3f, 0.6f, 0.55f, 0.5f, 0.4f, 1f / 3f, 0.25f }; for (float reductionFactor : reductionFactors) { newWidth = alignResolution(round(width * reductionFactor), 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 60f49b8028..7197017604 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/EncoderUtilTest.java @@ -149,6 +149,20 @@ public class EncoderUtilTest { assertThat(closestSupportedResolution.getHeight()).isEqualTo(1920); } + @Test + public void getSupportedResolution_findsOneQuarterOfTheOriginalSize() { + ImmutableList supportedEncoders = EncoderUtil.getSupportedEncoders(MIME_TYPE); + MediaCodecInfo encoderInfo = supportedEncoders.get(0); + + @Nullable + Size closestSupportedResolution = + EncoderUtil.getSupportedResolution(encoderInfo, MIME_TYPE, 7680, 4320); + + assertThat(closestSupportedResolution).isNotNull(); + assertThat(closestSupportedResolution.getWidth()).isEqualTo(1920); + assertThat(closestSupportedResolution.getHeight()).isEqualTo(1080); + } + /** * @see EncoderUtil#getSupportedEncoderNamesForHdrEditing(String, ColorInfo) */