diff --git a/RELEASENOTES.md b/RELEASENOTES.md index b27a54e21e..f7d08c1b68 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -8,6 +8,8 @@ `LiveConfiguration.min/maxOffset` range keep adjusting the offset back to `min/maxOffset`. * Transformer: + * Work around an issue where the encoder would throw at configuration time + due to setting a high operating rate. * Track Selection: * Extractors: * Audio: diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java index 5c7942dfee..0f835c3132 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java @@ -51,8 +51,6 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { /** Best effort, or as-fast-as-possible priority setting for {@link MediaFormat#KEY_PRIORITY}. */ private static final int PRIORITY_BEST_EFFORT = 1; - private static final String TAG = "DefaultEncoderFactory"; - /** A builder for {@link DefaultEncoderFactory} instances. */ public static final class Builder { private final Context context; @@ -519,6 +517,11 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { if (Util.SDK_INT == 26) { mediaFormat.setInteger(MediaFormat.KEY_OPERATING_RATE, DEFAULT_FRAME_RATE); + } else if (Util.SDK_INT <= 34) { + // On some devices setting Integer.MAX_VALUE will cause the encoder to throw at configuration + // time. Setting the operating to 1000 avoids being close to an integer overflow limit while + // being higher than a maximum feasible operating rate. See [internal b/311206113]. + mediaFormat.setInteger(MediaFormat.KEY_OPERATING_RATE, 1000); } else { mediaFormat.setInteger(MediaFormat.KEY_OPERATING_RATE, Integer.MAX_VALUE); } diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java index 733bea1da0..e50344aaad 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/DefaultEncoderFactoryTest.java @@ -231,8 +231,7 @@ public class DefaultEncoderFactoryTest { assertThat(configurationMediaFormat.containsKey(MediaFormat.KEY_PRIORITY)).isTrue(); assertThat(configurationMediaFormat.getInteger(MediaFormat.KEY_PRIORITY)).isEqualTo(1); assertThat(configurationMediaFormat.containsKey(MediaFormat.KEY_OPERATING_RATE)).isTrue(); - assertThat(configurationMediaFormat.getInteger(MediaFormat.KEY_OPERATING_RATE)) - .isEqualTo(Integer.MAX_VALUE); + assertThat(configurationMediaFormat.getInteger(MediaFormat.KEY_OPERATING_RATE)).isEqualTo(1000); } @Test