Remove configure methods

Pass the parameters to the constructor instead

PiperOrigin-RevId: 627420999
This commit is contained in:
kimvde 2024-04-23 09:57:55 -07:00 committed by Copybara-Service
parent bf9f8a3719
commit abd0ff7352
3 changed files with 55 additions and 69 deletions

View File

@ -18,7 +18,6 @@ package androidx.media3.transformer;
import static androidx.media3.common.audio.AudioProcessor.EMPTY_BUFFER;
import static androidx.media3.common.util.Assertions.checkArgument;
import static androidx.media3.common.util.Assertions.checkState;
import androidx.media3.common.C;
import androidx.media3.common.Format;
@ -40,21 +39,27 @@ import java.util.Objects;
private final List<InputInfo> inputInfos;
private final AudioMixer mixer;
private final AudioProcessingPipeline audioProcessingPipeline;
private AudioFormat mixerAudioFormat;
private long pendingStartTimeUs;
private int mixerSourcesToAdd;
private ByteBuffer mixerOutput;
private AudioProcessingPipeline audioProcessingPipeline;
private int finishedInputs;
/** Creates an instance. */
public AudioGraph(AudioMixer.Factory mixerFactory) {
/**
* Creates an instance.
*
* @param mixerFactory The {@linkplain AudioMixer.Factory factory} used to {@linkplain
* AudioMixer.Factory#create() create} the underlying {@link AudioMixer}.
* @param effects The composition-level audio effects that are applied after mixing.
*/
public AudioGraph(AudioMixer.Factory mixerFactory, ImmutableList<AudioProcessor> effects) {
inputInfos = new ArrayList<>();
mixer = mixerFactory.create();
mixerAudioFormat = AudioFormat.NOT_SET;
mixerOutput = EMPTY_BUFFER;
audioProcessingPipeline = new AudioProcessingPipeline(ImmutableList.of());
audioProcessingPipeline = new AudioProcessingPipeline(effects);
}
/** Returns whether an {@link AudioFormat} is valid as an input format. */
@ -73,23 +78,6 @@ import java.util.Objects;
return true;
}
/**
* Configures the composition-level audio effects to be applied after mixing.
*
* <p>Must be called before {@linkplain #registerInput(EditedMediaItem, Format) registering
* inputs}.
*
* @param effects The composition-level audio effects.
* @throws IllegalStateException If {@link #registerInput(EditedMediaItem, Format)} was already
* called.
*/
public void configure(ImmutableList<AudioProcessor> effects) {
checkState(
mixerAudioFormat.equals(AudioFormat.NOT_SET),
"AudioGraph can't configure effects after input registration.");
audioProcessingPipeline = new AudioProcessingPipeline(effects);
}
/**
* Returns a new {@link AudioGraphInput} instance.
*

View File

@ -59,8 +59,7 @@ import org.checkerframework.dataflow.qual.Pure;
FallbackListener fallbackListener)
throws ExportException {
super(firstAssetLoaderTrackFormat, muxerWrapper);
audioGraph = new AudioGraph(mixerFactory);
audioGraph.configure(compositionAudioProcessors);
audioGraph = new AudioGraph(mixerFactory, compositionAudioProcessors);
this.firstInputFormat = firstInputFormat;
firstInput = audioGraph.registerInput(firstEditedMediaItem, firstInputFormat);
encoderInputAudioFormat = audioGraph.getOutputAudioFormat();

View File

@ -18,7 +18,6 @@ package androidx.media3.transformer;
import static androidx.media3.common.util.Assertions.checkState;
import static androidx.media3.common.util.Util.getPcmFormat;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertThrows;
import androidx.media3.common.C;
import androidx.media3.common.MediaItem;
@ -59,7 +58,8 @@ public class AudioGraphTest {
@Test
public void silentItem_outputsCorrectAmountOfBytes() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
GraphInput input = audioGraph.registerInput(FAKE_ITEM, getPcmFormat(SURROUND_50000));
input.onMediaItemChanged(
@ -75,8 +75,9 @@ public class AudioGraphTest {
public void silentItem_withSampleRateChange_outputsCorrectAmountOfBytes() throws Exception {
SonicAudioProcessor changeTo100000Hz = new SonicAudioProcessor();
changeTo100000Hz.setOutputSampleRateHz(100_000);
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of(changeTo100000Hz));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of(changeTo100000Hz));
GraphInput input = audioGraph.registerInput(FAKE_ITEM, getPcmFormat(SURROUND_50000));
input.onMediaItemChanged(
@ -90,14 +91,16 @@ public class AudioGraphTest {
@Test
public void getOutputAudioFormat_afterInitialization_isNotSet() {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
assertThat(audioGraph.getOutputAudioFormat()).isEqualTo(AudioFormat.NOT_SET);
}
@Test
public void getOutputAudioFormat_afterRegisterInput_matchesInputFormat() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(MONO_48000));
@ -106,7 +109,8 @@ public class AudioGraphTest {
@Test
public void getOutputAudioFormat_afterFlush_isSet() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(MONO_48000));
audioGraph.flush();
@ -116,7 +120,8 @@ public class AudioGraphTest {
@Test
public void registerInput_afterRegisterInput_doesNotChangeOutputFormat() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_48000));
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(MONO_44100));
@ -126,7 +131,8 @@ public class AudioGraphTest {
@Test
public void registerInput_afterReset_changesOutputFormat() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_48000));
audioGraph.reset();
@ -139,8 +145,9 @@ public class AudioGraphTest {
public void registerInput_withAudioProcessor_affectsOutputFormat() throws Exception {
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setOutputSampleRateHz(48_000);
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of(sonicAudioProcessor));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of(sonicAudioProcessor));
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(SURROUND_50000));
@ -153,8 +160,10 @@ public class AudioGraphTest {
changeTo96000Hz.setOutputSampleRateHz(96_000);
SonicAudioProcessor changeTo48000Hz = new SonicAudioProcessor();
changeTo48000Hz.setOutputSampleRateHz(48_000);
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of(changeTo96000Hz, changeTo48000Hz));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(),
/* effects= */ ImmutableList.of(changeTo96000Hz, changeTo48000Hz));
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(SURROUND_50000));
@ -162,34 +171,22 @@ public class AudioGraphTest {
}
@Test
public void configure_changesOutputFormat() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
public void createAudioGraphWithEffect_changesOutputFormat() throws Exception {
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setOutputSampleRateHz(48_000);
audioGraph.configure(ImmutableList.of(sonicAudioProcessor));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of(sonicAudioProcessor));
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
assertThat(audioGraph.getOutputAudioFormat().sampleRate).isEqualTo(48_000);
}
@Test
public void configure_afterRegisterInput_throws() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setOutputSampleRateHz(48_000);
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
assertThrows(
IllegalStateException.class,
() -> audioGraph.configure(ImmutableList.of(sonicAudioProcessor)));
}
@Test
public void blockInput_blocksInputData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -210,8 +207,8 @@ public class AudioGraphTest {
@Test
public void unblockInput_unblocksInputData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -233,8 +230,8 @@ public class AudioGraphTest {
@Test
public void setPendingStartTimeUs_discardsPrecedingData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -263,8 +260,8 @@ public class AudioGraphTest {
@Test
public void setPendingStartTimeUs_doesNotDiscardFollowingData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -294,8 +291,8 @@ public class AudioGraphTest {
@Test
public void flush_withoutAudioProcessor_clearsPendingData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -321,10 +318,11 @@ public class AudioGraphTest {
@Test
public void flush_withAudioProcessor_clearsPendingData() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setOutputSampleRateHz(48_000);
audioGraph.configure(ImmutableList.of(sonicAudioProcessor));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of(sonicAudioProcessor));
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -350,8 +348,8 @@ public class AudioGraphTest {
@Test
public void isEnded_afterFlushAndWithoutAudioProcessor_isFalse() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
audioGraph.configure(ImmutableList.of());
AudioGraph audioGraph =
new AudioGraph(new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of());
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(
@ -372,10 +370,11 @@ public class AudioGraphTest {
@Test
public void isEnded_afterFlushAndWithAudioProcessor_isFalse() throws Exception {
AudioGraph audioGraph = new AudioGraph(new DefaultAudioMixer.Factory());
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
sonicAudioProcessor.setOutputSampleRateHz(48_000);
audioGraph.configure(ImmutableList.of(sonicAudioProcessor));
AudioGraph audioGraph =
new AudioGraph(
new DefaultAudioMixer.Factory(), /* effects= */ ImmutableList.of(sonicAudioProcessor));
AudioGraphInput audioGraphInput =
audioGraph.registerInput(FAKE_ITEM, getPcmFormat(STEREO_44100));
audioGraphInput.onMediaItemChanged(