Move the test of removeAudio to robolectric

The audio mixing is not deterministic on real device testing because of
threading, but runs deterministically on robolectric tests

PiperOrigin-RevId: 662925912
This commit is contained in:
claincly 2024-08-14 08:18:10 -07:00 committed by Copybara-Service
parent 879771ded2
commit 92635342fb
6 changed files with 558 additions and 178 deletions

View File

@ -1,81 +0,0 @@
AudioSink:
buffer count = 25
config:
pcmEncoding = 2
channelCount = 2
sampleRate = 44100
buffer #0:
time = 0
data = 1742602241
buffer #1:
time = 23219
data = 1742602241
buffer #2:
time = 46439
data = 1742602241
buffer #3:
time = 69659
data = 1742602241
buffer #4:
time = 92879
data = 1742602241
buffer #5:
time = 116099
data = 1742602241
buffer #6:
time = 139319
data = 1742602241
buffer #7:
time = 162539
data = 1742602241
buffer #8:
time = 185759
data = 1742602241
buffer #9:
time = 208979
data = 1742602241
buffer #10:
time = 232199
data = 1742602241
buffer #11:
time = 255419
data = 1742602241
buffer #12:
time = 278639
data = 1742602241
buffer #13:
time = 301859
data = 1742602241
buffer #14:
time = 325079
data = 1865678849
buffer #15:
time = 464399
data = 820010753
buffer #16:
time = 500000
data = 1407885569
buffer #17:
time = 719818
data = 1339014657
buffer #18:
time = 1000000
data = 38127629
buffer #19:
time = 1209750
data = 765431113
buffer #20:
time = 1500000
data = -245398331
buffer #21:
time = 2000000
data = -883339733
buffer #22:
time = 2161768
data = -1116029439
buffer #23:
time = 2500000
data = -164077823
buffer #24:
time = 3000000
data = -1619525631

View File

@ -1,78 +0,0 @@
AudioSink:
buffer count = 24
config:
pcmEncoding = 2
channelCount = 1
sampleRate = 44100
buffer #0:
time = 0
data = -676819263
buffer #1:
time = 67233
data = -1276182527
buffer #2:
time = 90453
data = 1946193324
buffer #3:
time = 113673
data = 104315105
buffer #4:
time = 136893
data = 1010810964
buffer #5:
time = 160113
data = -826419418
buffer #6:
time = 183333
data = 371097263
buffer #7:
time = 206553
data = 2052827414
buffer #8:
time = 229773
data = -5216832
buffer #9:
time = 252993
data = -1419834910
buffer #10:
time = 276213
data = -298784263
buffer #11:
time = 299433
data = -689936200
buffer #12:
time = 322653
data = -1523709536
buffer #13:
time = 461972
data = -708375787
buffer #14:
time = 500000
data = 1992124950
buffer #15:
time = 647732
data = -1661880409
buffer #16:
time = 1000000
data = -1899662657
buffer #17:
time = 1460430
data = -1641541695
buffer #18:
time = 1500000
data = -1935405183
buffer #19:
time = 2000000
data = 1074468007
buffer #20:
time = 2345102
data = 329859524
buffer #21:
time = 2500000
data = -2047290594
buffer #22:
time = 3000000
data = -1193826308
buffer #23:
time = 3343560
data = -494005503

View File

@ -0,0 +1,300 @@
AudioSink:
buffer count = 98
config:
pcmEncoding = 2
channelCount = 2
sampleRate = 44100
buffer #0:
time = 0
data = 1742602241
buffer #1:
time = 23219
data = 1742602241
buffer #2:
time = 46439
data = 1742602241
buffer #3:
time = 69659
data = 1742602241
buffer #4:
time = 92879
data = 1742602241
buffer #5:
time = 116099
data = 1742602241
buffer #6:
time = 139319
data = 1742602241
buffer #7:
time = 162539
data = 1742602241
buffer #8:
time = 185759
data = 1742602241
buffer #9:
time = 208979
data = 1742602241
buffer #10:
time = 232199
data = 1742602241
buffer #11:
time = 255419
data = 1742602241
buffer #12:
time = 278639
data = 1742602241
buffer #13:
time = 301859
data = 1742602241
buffer #14:
time = 325079
data = 1742602241
buffer #15:
time = 348299
data = 1742602241
buffer #16:
time = 371519
data = 1742602241
buffer #17:
time = 394739
data = 1742602241
buffer #18:
time = 417959
data = 1742602241
buffer #19:
time = 441179
data = 1742602241
buffer #20:
time = 464399
data = 1742602241
buffer #21:
time = 487619
data = 1728208641
buffer #22:
time = 500000
data = 620404993
buffer #23:
time = 534058
data = 1742602241
buffer #24:
time = 557278
data = 1742602241
buffer #25:
time = 580498
data = 1742602241
buffer #26:
time = 603718
data = 1742602241
buffer #27:
time = 626938
data = 1742602241
buffer #28:
time = 650158
data = 1742602241
buffer #29:
time = 673378
data = 1742602241
buffer #30:
time = 696598
data = 1742602241
buffer #31:
time = 719818
data = 1742602241
buffer #32:
time = 743038
data = 1742602241
buffer #33:
time = 766258
data = 1742602241
buffer #34:
time = 789478
data = 1742602241
buffer #35:
time = 812698
data = 1742602241
buffer #36:
time = 835918
data = 1742602241
buffer #37:
time = 859138
data = 1742602241
buffer #38:
time = 882358
data = 1742602241
buffer #39:
time = 905578
data = 1742602241
buffer #40:
time = 928798
data = 1742602241
buffer #41:
time = 952018
data = 1742602241
buffer #42:
time = 975238
data = 1742602241
buffer #43:
time = 998458
data = 1097317889
buffer #44:
time = 1000000
data = 1072516495
buffer #45:
time = 1100000
data = 1080356869
buffer #46:
time = 1200000
data = 885365699
buffer #47:
time = 1300000
data = -1015251545
buffer #48:
time = 1400000
data = -159485629
buffer #49:
time = 1500000
data = -797815221
buffer #50:
time = 1600000
data = -347578263
buffer #51:
time = 1700000
data = -943138441
buffer #52:
time = 1800000
data = -215647269
buffer #53:
time = 1900000
data = -667240285
buffer #54:
time = 2000000
data = 1742602241
buffer #55:
time = 2023219
data = 1742602241
buffer #56:
time = 2046439
data = 1742602241
buffer #57:
time = 2069659
data = 1742602241
buffer #58:
time = 2092879
data = 1742602241
buffer #59:
time = 2116099
data = 1742602241
buffer #60:
time = 2139319
data = 1742602241
buffer #61:
time = 2162539
data = 1742602241
buffer #62:
time = 2185759
data = 1742602241
buffer #63:
time = 2208979
data = 1742602241
buffer #64:
time = 2232199
data = 1742602241
buffer #65:
time = 2255419
data = 1742602241
buffer #66:
time = 2278639
data = 1742602241
buffer #67:
time = 2301859
data = 1742602241
buffer #68:
time = 2325079
data = 1742602241
buffer #69:
time = 2348299
data = 1742602241
buffer #70:
time = 2371519
data = 1742602241
buffer #71:
time = 2394739
data = 1742602241
buffer #72:
time = 2417959
data = 1742602241
buffer #73:
time = 2441179
data = 1742602241
buffer #74:
time = 2464399
data = 1742602241
buffer #75:
time = 2487619
data = 1728208641
buffer #76:
time = 2500000
data = 620404993
buffer #77:
time = 2534058
data = 1742602241
buffer #78:
time = 2557278
data = 1742602241
buffer #79:
time = 2580498
data = 1742602241
buffer #80:
time = 2603718
data = 1742602241
buffer #81:
time = 2626938
data = 1742602241
buffer #82:
time = 2650158
data = 1742602241
buffer #83:
time = 2673378
data = 1742602241
buffer #84:
time = 2696598
data = 1742602241
buffer #85:
time = 2719818
data = 1742602241
buffer #86:
time = 2743038
data = 1742602241
buffer #87:
time = 2766258
data = 1742602241
buffer #88:
time = 2789478
data = 1742602241
buffer #89:
time = 2812698
data = 1742602241
buffer #90:
time = 2835918
data = 1742602241
buffer #91:
time = 2859138
data = 1742602241
buffer #92:
time = 2882358
data = 1742602241
buffer #93:
time = 2905578
data = 1742602241
buffer #94:
time = 2928798
data = 1742602241
buffer #95:
time = 2952018
data = 1742602241
buffer #96:
time = 2975238
data = 1742602241
buffer #97:
time = 2998458
data = 1097317889

View File

@ -0,0 +1,198 @@
AudioSink:
buffer count = 64
config:
pcmEncoding = 2
channelCount = 1
sampleRate = 44100
buffer #0:
time = 0
data = -85819864
buffer #1:
time = 100000
data = 566487491
buffer #2:
time = 200000
data = -1256531710
buffer #3:
time = 300000
data = 793455796
buffer #4:
time = 400000
data = -268235582
buffer #5:
time = 500000
data = -8136122
buffer #6:
time = 600000
data = 1750866613
buffer #7:
time = 700000
data = -1100753636
buffer #8:
time = 800000
data = 507833230
buffer #9:
time = 900000
data = 1472467506
buffer #10:
time = 1000000
data = -1276182527
buffer #11:
time = 1023219
data = -1276182527
buffer #12:
time = 1046439
data = -1276182527
buffer #13:
time = 1069659
data = -1276182527
buffer #14:
time = 1092879
data = -1276182527
buffer #15:
time = 1116099
data = -1276182527
buffer #16:
time = 1139319
data = -1276182527
buffer #17:
time = 1162539
data = -1276182527
buffer #18:
time = 1185759
data = -1276182527
buffer #19:
time = 1208979
data = -1276182527
buffer #20:
time = 1232199
data = -1276182527
buffer #21:
time = 1255419
data = -1276182527
buffer #22:
time = 1278639
data = -1276182527
buffer #23:
time = 1301859
data = -1276182527
buffer #24:
time = 1325079
data = -1276182527
buffer #25:
time = 1348299
data = -1276182527
buffer #26:
time = 1371519
data = -1276182527
buffer #27:
time = 1394739
data = -1276182527
buffer #28:
time = 1417959
data = -1276182527
buffer #29:
time = 1441179
data = -1276182527
buffer #30:
time = 1464399
data = -1276182527
buffer #31:
time = 1487619
data = 1737035649
buffer #32:
time = 1500000
data = -345689983
buffer #33:
time = 1534058
data = -1276182527
buffer #34:
time = 1557278
data = -1276182527
buffer #35:
time = 1580498
data = -1276182527
buffer #36:
time = 1603718
data = -1276182527
buffer #37:
time = 1626938
data = -1276182527
buffer #38:
time = 1650158
data = -1276182527
buffer #39:
time = 1673378
data = -1276182527
buffer #40:
time = 1696598
data = -1276182527
buffer #41:
time = 1719818
data = -1276182527
buffer #42:
time = 1743038
data = -1276182527
buffer #43:
time = 1766258
data = -1276182527
buffer #44:
time = 1789478
data = -1276182527
buffer #45:
time = 1812698
data = -1276182527
buffer #46:
time = 1835918
data = -1276182527
buffer #47:
time = 1859138
data = -1276182527
buffer #48:
time = 1882358
data = -1276182527
buffer #49:
time = 1905578
data = -1276182527
buffer #50:
time = 1928798
data = -1276182527
buffer #51:
time = 1952018
data = -1276182527
buffer #52:
time = 1975238
data = -1276182527
buffer #53:
time = 1998458
data = 34823937
buffer #54:
time = 2000000
data = -85819864
buffer #55:
time = 2100000
data = 566487491
buffer #56:
time = 2200000
data = -1256531710
buffer #57:
time = 2300000
data = 793455796
buffer #58:
time = 2400000
data = -268235582
buffer #59:
time = 2500000
data = -8136122
buffer #60:
time = 2600000
data = 1750866613
buffer #61:
time = 2700000
data = -1100753636
buffer #62:
time = 2800000
data = 507833230
buffer #63:
time = 2900000
data = 1472467506

View File

@ -39,9 +39,6 @@ import androidx.media3.common.util.ConditionVariable;
import androidx.media3.common.util.Size;
import androidx.media3.common.util.Util;
import androidx.media3.effect.GlEffect;
import androidx.media3.exoplayer.audio.DefaultAudioSink;
import androidx.media3.test.utils.CapturingAudioSink;
import androidx.media3.test.utils.DumpFileAsserts;
import androidx.media3.transformer.Composition;
import androidx.media3.transformer.CompositionPlayer;
import androidx.media3.transformer.EditedMediaItem;
@ -387,14 +384,11 @@ public class CompositionPlaybackTest {
Iterables.transform(
VIDEO_TIMESTAMPS_US, timestampUs -> (2 * VIDEO_DURATION_US + timestampUs)))
.build();
CapturingAudioSink capturingAudioSink =
new CapturingAudioSink(new DefaultAudioSink.Builder(context).build());
getInstrumentation()
.runOnMainSync(
() -> {
player =
new CompositionPlayer.Builder(context).setAudioSink(capturingAudioSink).build();
player = new CompositionPlayer.Builder(context).build();
player.addListener(playerTestListener);
player.setComposition(composition);
player.prepare();
@ -404,10 +398,6 @@ public class CompositionPlaybackTest {
assertThat(inputTimestampRecordingShaderProgram.getInputTimestampsUs())
.isEqualTo(expectedTimestampsUs);
DumpFileAsserts.assertOutput(
context,
capturingAudioSink,
"audiosinkdumps/wav/playback_sequenceOfThreeVideosWithRemovingFirstAndLastAudio_succeeds.dump");
}
@Test
@ -440,14 +430,11 @@ public class CompositionPlaybackTest {
Iterables.transform(
VIDEO_TIMESTAMPS_US, timestampUs -> (2 * VIDEO_DURATION_US + timestampUs)))
.build();
CapturingAudioSink capturingAudioSink =
new CapturingAudioSink(new DefaultAudioSink.Builder(context).build());
getInstrumentation()
.runOnMainSync(
() -> {
player =
new CompositionPlayer.Builder(context).setAudioSink(capturingAudioSink).build();
player = new CompositionPlayer.Builder(context).build();
player.addListener(playerTestListener);
player.setComposition(composition);
player.prepare();
@ -457,10 +444,6 @@ public class CompositionPlaybackTest {
assertThat(inputTimestampRecordingShaderProgram.getInputTimestampsUs())
.isEqualTo(expectedTimestampsUs);
DumpFileAsserts.assertOutput(
context,
capturingAudioSink,
"audiosinkdumps/wav/playback_sequenceOfThreeVideosWithRemovingMiddleAudio_succeeds.dump");
}
@Test

View File

@ -297,6 +297,64 @@ public final class CompositionPlayerAudioPlaybackTest {
"audiosinkdumps/wav/sample.wav_then_sample_rf64.wav_repeated.dump");
}
@Test
public void sequencePlayback_withThreeMediaAndRemovingMiddleAudio_outputsCorrectSamples()
throws Exception {
CompositionPlayer player = createCompositionPlayer(context, capturingAudioSink);
EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
.setDurationUs(1_000_000L)
.build();
EditedMediaItem audioRemovedMediaItem =
editedMediaItem.buildUpon().setRemoveAudio(true).build();
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence(
editedMediaItem, audioRemovedMediaItem, editedMediaItem))
.build();
player.setComposition(composition);
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
// The silence should be in between the timestamp between [1, 2] seconds.
DumpFileAsserts.assertOutput(
context,
capturingAudioSink,
"audiosinkdumps/wav/sequencePlayback_withThreeMediaAndRemovingMiddleAudio_outputsCorrectSamples.dump");
}
@Test
public void sequencePlayback_withThreeMediaAndRemovingFirstAndThirdAudio_outputsCorrectSamples()
throws Exception {
CompositionPlayer player = createCompositionPlayer(context, capturingAudioSink);
EditedMediaItem editedMediaItem =
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW))
.setDurationUs(1_000_000L)
.build();
EditedMediaItem audioRemovedMediaItem =
editedMediaItem.buildUpon().setRemoveAudio(true).build();
Composition composition =
new Composition.Builder(
new EditedMediaItemSequence(
audioRemovedMediaItem, editedMediaItem, audioRemovedMediaItem))
.build();
player.setComposition(composition);
player.prepare();
player.play();
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
// The silence should be in between the timestamp between [0, 1] and [2, 3] seconds.
DumpFileAsserts.assertOutput(
context,
capturingAudioSink,
"audiosinkdumps/wav/sequencePlayback_withThreeMediaAndRemovingFirstAndThirdAudio_outputsCorrectSamples.dump");
}
// TODO - b/320014878: Enable this test.
@Ignore("Preview audio is not fed to the sink in deterministic buffers - see b/320014878.")
@Test