Commit 9e66998e by samrobinson Committed by Rohit Singh

Add test cases for mixing to mono.

PiperOrigin-RevId: 517127021
parent 23674807
...@@ -18,6 +18,7 @@ package androidx.media3.transformer; ...@@ -18,6 +18,7 @@ package androidx.media3.transformer;
import static androidx.media3.test.utils.TestUtil.createByteBuffer; import static androidx.media3.test.utils.TestUtil.createByteBuffer;
import static androidx.media3.test.utils.TestUtil.createFloatArray; import static androidx.media3.test.utils.TestUtil.createFloatArray;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import androidx.media3.common.C; import androidx.media3.common.C;
import androidx.media3.common.audio.AudioProcessor.AudioFormat; import androidx.media3.common.audio.AudioProcessor.AudioFormat;
...@@ -33,7 +34,6 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -33,7 +34,6 @@ public final class FloatAudioMixingAlgorithmTest {
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_FLOAT); new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_FLOAT);
private static final AudioFormat AUDIO_FORMAT_MONO_PCM_FLOAT = private static final AudioFormat AUDIO_FORMAT_MONO_PCM_FLOAT =
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 1, C.ENCODING_PCM_FLOAT); new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 1, C.ENCODING_PCM_FLOAT);
private static final AudioFormat AUDIO_FORMAT_STEREO_PCM_16BIT = private static final AudioFormat AUDIO_FORMAT_STEREO_PCM_16BIT =
new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_16BIT); new AudioFormat(/* sampleRate= */ 44100, /* channelCount= */ 2, C.ENCODING_PCM_16BIT);
private static final AudioFormat AUDIO_FORMAT_MONO_PCM_16BIT = private static final AudioFormat AUDIO_FORMAT_MONO_PCM_16BIT =
...@@ -45,6 +45,8 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -45,6 +45,8 @@ public final class FloatAudioMixingAlgorithmTest {
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 2); ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 2);
private static final ChannelMixingMatrix STEREO_TO_MONO = private static final ChannelMixingMatrix STEREO_TO_MONO =
ChannelMixingMatrix.create(/* inputChannelCount= */ 2, /* outputChannelCount= */ 1); ChannelMixingMatrix.create(/* inputChannelCount= */ 2, /* outputChannelCount= */ 1);
private static final ChannelMixingMatrix MONO_TO_MONO =
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 1);
@Test @Test
public void supportsSourceAudioFormatsForStereoMixing() { public void supportsSourceAudioFormatsForStereoMixing() {
...@@ -76,8 +78,8 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -76,8 +78,8 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_STEREO.scaleBy(0.5f), STEREO_TO_STEREO.scaleBy(0.5f),
/* frameCount= */ 2, /* frameCount= */ 2,
mixingBuffer); mixingBuffer);
assertThat(sourceBuffer.remaining()).isEqualTo(0); assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertThat(mixingBuffer.remaining()).isEqualTo(0); assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip(); mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.125f, 0.375f, -0.25f}); assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.125f, 0.375f, -0.25f});
...@@ -95,8 +97,8 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -95,8 +97,8 @@ public final class FloatAudioMixingAlgorithmTest {
MONO_TO_STEREO.scaleBy(0.5f), MONO_TO_STEREO.scaleBy(0.5f),
/* frameCount= */ 2, /* frameCount= */ 2,
mixingBuffer); mixingBuffer);
assertThat(sourceBuffer.remaining()).isEqualTo(0); assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertThat(mixingBuffer.remaining()).isEqualTo(0); assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip(); mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.5f, 0.75f, -0.25f}); assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0f, -0.5f, 0.75f, -0.25f});
...@@ -114,14 +116,33 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -114,14 +116,33 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_MONO.scaleBy(0.5f), STEREO_TO_MONO.scaleBy(0.5f),
/* frameCount= */ 2, /* frameCount= */ 2,
mixingBuffer); mixingBuffer);
assertThat(sourceBuffer.remaining()).isEqualTo(0); assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertThat(mixingBuffer.remaining()).isEqualTo(0); assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip(); mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0.1875f, 0.5625f}); assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0.1875f, 0.5625f});
} }
@Test @Test
public void mixMonoFloatIntoMonoFloat() {
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, -0.25f});
ByteBuffer sourceBuffer = createByteBuffer(new float[] {0.5f, 0.25f});
algorithm.mix(
sourceBuffer,
AUDIO_FORMAT_MONO_PCM_FLOAT,
MONO_TO_MONO.scaleBy(0.5f),
/* frameCount= */ 2,
mixingBuffer);
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)).isEqualTo(new float[] {0.5f, -0.125f});
}
@Test
public void mixStereoS16IntoStereoFloat() { public void mixStereoS16IntoStereoFloat() {
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_STEREO_PCM_FLOAT); AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_STEREO_PCM_FLOAT);
...@@ -140,8 +161,8 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -140,8 +161,8 @@ public final class FloatAudioMixingAlgorithmTest {
STEREO_TO_STEREO.scaleBy(0.5f), STEREO_TO_STEREO.scaleBy(0.5f),
/* frameCount= */ 2, /* frameCount= */ 2,
mixingBuffer); mixingBuffer);
assertThat(sourceBuffer.remaining()).isEqualTo(0); assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertThat(mixingBuffer.remaining()).isEqualTo(0); assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip(); mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)) assertThat(createFloatArray(mixingBuffer))
...@@ -163,8 +184,8 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -163,8 +184,8 @@ public final class FloatAudioMixingAlgorithmTest {
MONO_TO_STEREO.scaleBy(0.5f), MONO_TO_STEREO.scaleBy(0.5f),
/* frameCount= */ 2, /* frameCount= */ 2,
mixingBuffer); mixingBuffer);
assertThat(sourceBuffer.remaining()).isEqualTo(0); assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertThat(mixingBuffer.remaining()).isEqualTo(0); assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip(); mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer)) assertThat(createFloatArray(mixingBuffer))
...@@ -174,6 +195,59 @@ public final class FloatAudioMixingAlgorithmTest { ...@@ -174,6 +195,59 @@ public final class FloatAudioMixingAlgorithmTest {
} }
@Test @Test
public void mixStereoS16IntoMonoFloat() {
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, 0.5f});
ByteBuffer sourceBuffer =
createByteBuffer(
new short[] {
-16384 /* -0.5f */,
8192 /* 0.25000762962f */,
-8192 /* -0.25f */,
16384 /* 0.50001525925f */
});
algorithm.mix(
sourceBuffer,
AUDIO_FORMAT_STEREO_PCM_16BIT,
STEREO_TO_MONO.scaleBy(0.5f),
/* frameCount= */ 2,
mixingBuffer);
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer))
.usingTolerance(1f / Short.MAX_VALUE)
.containsExactly(new float[] {0.1875f, 0.5625f})
.inOrder();
}
@Test
public void mixMonoS16IntoMonoFloat() {
AudioMixingAlgorithm algorithm = new FloatAudioMixingAlgorithm(AUDIO_FORMAT_MONO_PCM_FLOAT);
ByteBuffer mixingBuffer = createByteBuffer(new float[] {0.25f, 0.5f});
ByteBuffer sourceBuffer =
createByteBuffer(new short[] {-16384 /* -0.5f */, 8192 /* 0.25000762962f */});
algorithm.mix(
sourceBuffer,
AUDIO_FORMAT_MONO_PCM_16BIT,
MONO_TO_MONO.scaleBy(0.5f),
/* frameCount= */ 2,
mixingBuffer);
assertWithMessage("Source buffer").that(sourceBuffer.remaining()).isEqualTo(0);
assertWithMessage("Mixing buffer").that(mixingBuffer.remaining()).isEqualTo(0);
mixingBuffer.flip();
assertThat(createFloatArray(mixingBuffer))
.usingTolerance(1f / Short.MAX_VALUE)
.containsExactly(new float[] {0f, 0.625f})
.inOrder();
}
@Test
public void doesNotSupportSampleRateConversion() { public void doesNotSupportSampleRateConversion() {
AudioMixingAlgorithm algorithm = AudioMixingAlgorithm algorithm =
new FloatAudioMixingAlgorithm( new FloatAudioMixingAlgorithm(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment