From 415d779c62f461b64eaa11b1dbbdb84cc5d5632e Mon Sep 17 00:00:00 2001 From: Googler Date: Fri, 15 Mar 2024 09:10:59 -0700 Subject: [PATCH] Explicitly check that AudioGraph input is PCM 16 AudioGraph implicitly assumes that input will be PCM 16 bit, and not float. Make the check explicit. PiperOrigin-RevId: 616149131 --- .../java/androidx/media3/transformer/AudioGraph.java | 4 +++- .../java/androidx/media3/transformer/AudioGraphTest.java | 9 +++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraph.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraph.java index b2f87aabe0..1f0ac72273 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraph.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraph.java @@ -57,7 +57,9 @@ import java.util.Objects; /** Returns whether an {@link AudioFormat} is valid as an input format. */ public static boolean isInputAudioFormatValid(AudioFormat format) { - if (format.encoding == Format.NO_VALUE) { + // AudioGraphInput assumes PCM_16BIT -- see, for example, the automatic format conversions + // in AudioGraphInput.configureProcessing. + if (format.encoding != C.ENCODING_PCM_16BIT) { return false; } if (format.sampleRate == Format.NO_VALUE) { diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/AudioGraphTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/AudioGraphTest.java index 621e03c95f..1f1a4758ea 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/AudioGraphTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/AudioGraphTest.java @@ -48,6 +48,15 @@ public class AudioGraphTest { private static final AudioFormat SURROUND_50000 = new AudioFormat(/* sampleRate= */ 50_000, /* channelCount= */ 6, C.ENCODING_PCM_16BIT); + @Test + public void floatPcmFormat_isNotValidInputFormat() { + assertThat( + AudioGraph.isInputAudioFormatValid( + new AudioFormat( + /* sampleRate= */ 44_100, /* channelCount= */ 1, C.ENCODING_PCM_FLOAT))) + .isFalse(); + } + @Test public void silentItem_outputsCorrectAmountOfBytes() throws Exception { AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());