Define TestMuxer Factory and Holder as inner classes.
PiperOrigin-RevId: 552469061
This commit is contained in:
parent
c16840573b
commit
9e975b25d1
@ -33,7 +33,6 @@ import android.content.Context;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.test.utils.DumpFileAsserts;
|
import androidx.media3.test.utils.DumpFileAsserts;
|
||||||
import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder;
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -53,13 +52,13 @@ public class CompositionExportTest {
|
|||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
private String outputPath;
|
private String outputPath;
|
||||||
private TestMuxerHolder testMuxerHolder;
|
private TestMuxer.Holder muxerHolder;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
context = ApplicationProvider.getApplicationContext();
|
context = ApplicationProvider.getApplicationContext();
|
||||||
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
||||||
testMuxerHolder = new TestMuxerHolder();
|
muxerHolder = new TestMuxer.Holder();
|
||||||
createEncodersAndDecoders();
|
createEncodersAndDecoders();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -73,7 +72,7 @@ public class CompositionExportTest {
|
|||||||
public void start_audioVideoTransmuxedFromDifferentSequences_producesExpectedResult()
|
public void start_audioVideoTransmuxedFromDifferentSequences_producesExpectedResult()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
ExportResult expectedExportResult = TransformerTestRunner.runLooper(transformer);
|
ExportResult expectedExportResult = TransformerTestRunner.runLooper(transformer);
|
||||||
@ -105,7 +104,7 @@ public class CompositionExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_loopingTransmuxedAudio_producesExpectedResult() throws Exception {
|
public void start_loopingTransmuxedAudio_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
@ -135,7 +134,7 @@ public class CompositionExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_loopingTransmuxedVideo_producesExpectedResult() throws Exception {
|
public void start_loopingTransmuxedVideo_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_ONLY)).build();
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
@ -165,7 +164,7 @@ public class CompositionExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_loopingRawAudio_producesExpectedResult() throws Exception {
|
public void start_loopingRawAudio_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
@ -198,7 +197,7 @@ public class CompositionExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_compositionOfConcurrentAudio_isCorrect() throws Exception {
|
public void start_compositionOfConcurrentAudio_isCorrect() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
|
|
||||||
EditedMediaItem rawAudioItem =
|
EditedMediaItem rawAudioItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||||
@ -215,15 +214,13 @@ public class CompositionExportTest {
|
|||||||
|
|
||||||
assertThat(exportResult.processedInputs).hasSize(2);
|
assertThat(exportResult.processedInputs).hasSize(2);
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".concurrent"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_RAW + ".concurrent"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_audioVideoCompositionWithExtraAudio_isCorrect() throws Exception {
|
public void start_audioVideoCompositionWithExtraAudio_isCorrect() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem audioVideoItem =
|
EditedMediaItem audioVideoItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||||
.build();
|
.build();
|
||||||
@ -250,7 +247,7 @@ public class CompositionExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_audioVideoCompositionWithLoopingAudio_isCorrect() throws Exception {
|
public void start_audioVideoCompositionWithLoopingAudio_isCorrect() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem audioVideoItem =
|
EditedMediaItem audioVideoItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO))
|
||||||
.build();
|
.build();
|
||||||
|
@ -73,8 +73,6 @@ import androidx.media3.extractor.PositionHolder;
|
|||||||
import androidx.media3.test.utils.DumpFileAsserts;
|
import androidx.media3.test.utils.DumpFileAsserts;
|
||||||
import androidx.media3.test.utils.FakeClock;
|
import androidx.media3.test.utils.FakeClock;
|
||||||
import androidx.media3.transformer.TestUtil.FakeAssetLoader;
|
import androidx.media3.transformer.TestUtil.FakeAssetLoader;
|
||||||
import androidx.media3.transformer.TestUtil.TestMuxerFactory;
|
|
||||||
import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder;
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -105,7 +103,7 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
private String outputPath;
|
private String outputPath;
|
||||||
private TestMuxerHolder testMuxerHolder;
|
private TestMuxer.Holder muxerHolder;
|
||||||
private ProgressHolder progressHolder;
|
private ProgressHolder progressHolder;
|
||||||
private ArgumentCaptor<Composition> compositionArgumentCaptor;
|
private ArgumentCaptor<Composition> compositionArgumentCaptor;
|
||||||
|
|
||||||
@ -113,7 +111,7 @@ public final class MediaItemExportTest {
|
|||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
context = ApplicationProvider.getApplicationContext();
|
context = ApplicationProvider.getApplicationContext();
|
||||||
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
||||||
testMuxerHolder = new TestMuxerHolder();
|
muxerHolder = new TestMuxer.Holder();
|
||||||
progressHolder = new ProgressHolder();
|
progressHolder = new ProgressHolder();
|
||||||
compositionArgumentCaptor = ArgumentCaptor.forClass(Composition.class);
|
compositionArgumentCaptor = ArgumentCaptor.forClass(Composition.class);
|
||||||
createEncodersAndDecoders();
|
createEncodersAndDecoders();
|
||||||
@ -128,20 +126,20 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_videoOnlyPassthrough_completesSuccessfully() throws Exception {
|
public void start_videoOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_VIDEO_ONLY));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_VIDEO_ONLY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_audioOnlyPassthrough_completesSuccessfully() throws Exception {
|
public void start_audioOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -149,14 +147,14 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_audioOnlyTranscoding_completesSuccessfully() throws Exception {
|
public void start_audioOnlyTranscoding_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||||
@ -165,27 +163,27 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_RAW + ".aac"));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_RAW + ".aac"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_audioAndVideo_completesSuccessfully() throws Exception {
|
public void start_audioAndVideo_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_audioAndVideo_withClippingStartAtKeyFrame_completesSuccessfully()
|
public void start_audioAndVideo_withClippingStartAtKeyFrame_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S)
|
.setUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S)
|
||||||
@ -202,14 +200,14 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped"));
|
getDumpFileName(FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_withSubtitles_completesSuccessfully() throws Exception {
|
public void start_withSubtitles_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AAC)
|
.setAudioMimeType(MimeTypes.AUDIO_AAC)
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES);
|
||||||
@ -218,13 +216,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_WITH_SUBTITLES));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_WITH_SUBTITLES));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_successiveExports_completesSuccessfully() throws Exception {
|
public void start_successiveExports_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
// Transform first media item.
|
// Transform first media item.
|
||||||
@ -237,13 +235,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_concurrentExports_throwsError() {
|
public void start_concurrentExports_throwsError() {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -254,7 +252,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_removeAudio_completesSuccessfully() throws Exception {
|
public void start_removeAudio_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
@ -264,15 +262,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".noaudio"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".noaudio"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_removeVideo_completesSuccessfully() throws Exception {
|
public void start_removeVideo_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
@ -282,15 +278,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".novideo"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".novideo"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_forceAudioTrackOnAudioOnly_isIgnored() throws Exception {
|
public void start_forceAudioTrackOnAudioOnly_isIgnored() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
EditedMediaItemSequence sequence =
|
EditedMediaItemSequence sequence =
|
||||||
@ -305,14 +299,14 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_ENCODER));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_forceAudioTrackOnAudioVideo_isIgnored() throws Exception {
|
public void start_forceAudioTrackOnAudioVideo_isIgnored() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
EditedMediaItemSequence sequence =
|
EditedMediaItemSequence sequence =
|
||||||
@ -326,13 +320,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_forceAudioTrackAndRemoveAudio_generatesSilentAudio() throws Exception {
|
public void start_forceAudioTrackAndRemoveAudio_generatesSilentAudio() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
@ -349,7 +343,7 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio"));
|
getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -357,7 +351,7 @@ public final class MediaItemExportTest {
|
|||||||
public void start_forceAudioTrackAndRemoveAudioWithEffects_generatesSilentAudio()
|
public void start_forceAudioTrackAndRemoveAudioWithEffects_generatesSilentAudio()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
||||||
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
@ -377,14 +371,14 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio_48000hz"));
|
getDumpFileName(FILE_AUDIO_VIDEO + ".silentaudio_48000hz"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_forceAudioTrackAndRemoveVideo_isIgnored() throws Exception {
|
public void start_forceAudioTrackAndRemoveVideo_isIgnored() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
@ -399,15 +393,13 @@ public final class MediaItemExportTest {
|
|||||||
transformer.start(composition, outputPath);
|
transformer.start(composition, outputPath);
|
||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".novideo"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".novideo"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_forceAudioTrackOnVideoOnly_generatesSilentAudio() throws Exception {
|
public void start_forceAudioTrackOnVideoOnly_generatesSilentAudio() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
EditedMediaItemSequence sequence =
|
EditedMediaItemSequence sequence =
|
||||||
@ -422,7 +414,7 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_VIDEO_ONLY + ".silentaudio"));
|
getDumpFileName(FILE_VIDEO_ONLY + ".silentaudio"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -431,7 +423,7 @@ public final class MediaItemExportTest {
|
|||||||
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
||||||
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
|
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
|
||||||
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
||||||
@ -442,9 +434,7 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -452,7 +442,7 @@ public final class MediaItemExportTest {
|
|||||||
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
SonicAudioProcessor sonicAudioProcessor = new SonicAudioProcessor();
|
||||||
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
sonicAudioProcessor.setOutputSampleRateHz(48000);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
|
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(sonicAudioProcessor);
|
||||||
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
Effects effects = new Effects(audioProcessors, /* videoEffects= */ ImmutableList.of());
|
||||||
@ -469,9 +459,7 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".48000hz"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@ -480,7 +468,7 @@ public final class MediaItemExportTest {
|
|||||||
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
||||||
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
@ -502,7 +490,7 @@ public final class MediaItemExportTest {
|
|||||||
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
||||||
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
@ -530,7 +518,7 @@ public final class MediaItemExportTest {
|
|||||||
TransformationRequest fallbackTransformationRequest =
|
TransformationRequest fallbackTransformationRequest =
|
||||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ true)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
@ -559,7 +547,7 @@ public final class MediaItemExportTest {
|
|||||||
AtomicBoolean deprecatedFallbackCalled1 = new AtomicBoolean();
|
AtomicBoolean deprecatedFallbackCalled1 = new AtomicBoolean();
|
||||||
AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean();
|
AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(
|
.addListener(
|
||||||
new Transformer.Listener() {
|
new Transformer.Listener() {
|
||||||
@Override
|
@Override
|
||||||
@ -591,7 +579,7 @@ public final class MediaItemExportTest {
|
|||||||
AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean();
|
AtomicBoolean deprecatedFallbackCalled2 = new AtomicBoolean();
|
||||||
AtomicBoolean deprecatedFallbackCalled3 = new AtomicBoolean();
|
AtomicBoolean deprecatedFallbackCalled3 = new AtomicBoolean();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(
|
.addListener(
|
||||||
new Transformer.Listener() {
|
new Transformer.Listener() {
|
||||||
@Override
|
@Override
|
||||||
@ -636,7 +624,7 @@ public final class MediaItemExportTest {
|
|||||||
public void start_withFallback_callsDeprecatedFallbackCallbacks() throws Exception {
|
public void start_withFallback_callsDeprecatedFallbackCallbacks() throws Exception {
|
||||||
AtomicBoolean deprecatedFallbackCalled = new AtomicBoolean();
|
AtomicBoolean deprecatedFallbackCalled = new AtomicBoolean();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ true)
|
||||||
.addListener(
|
.addListener(
|
||||||
new Transformer.Listener() {
|
new Transformer.Listener() {
|
||||||
@Override
|
@Override
|
||||||
@ -663,7 +651,7 @@ public final class MediaItemExportTest {
|
|||||||
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener2 = mock(Transformer.Listener.class);
|
||||||
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
Transformer.Listener mockListener3 = mock(Transformer.Listener.class);
|
||||||
Transformer transformer1 =
|
Transformer transformer1 =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
@ -682,7 +670,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_flattenForSlowMotion_completesSuccessfully() throws Exception {
|
public void start_flattenForSlowMotion_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION))
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SEF_SLOW_MOTION))
|
||||||
.setFlattenForSlowMotion(true)
|
.setFlattenForSlowMotion(true)
|
||||||
@ -692,15 +680,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_WITH_SEF_SLOW_MOTION));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_WITH_SEF_SLOW_MOTION));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_completesWithValidBitrate() throws Exception {
|
public void start_completesWithValidBitrate() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -713,7 +699,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withAudioEncoderFormatUnsupported_completesWithError() {
|
public void start_withAudioEncoderFormatUnsupported_completesWithError() {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AMR_NB) // unsupported by encoder, supported by muxer
|
.setAudioMimeType(MimeTypes.AUDIO_AMR_NB) // unsupported by encoder, supported by muxer
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||||
@ -729,7 +715,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withAudioDecoderFormatUnsupported_completesWithError() {
|
public void start_withAudioDecoderFormatUnsupported_completesWithError() {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_DECODER);
|
||||||
@ -745,7 +731,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withIoError_completesWithError() {
|
public void start_withIoError_completesWithError() {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4");
|
MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4");
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -764,7 +750,7 @@ public final class MediaItemExportTest {
|
|||||||
TransformationRequest fallbackTransformationRequest =
|
TransformationRequest fallbackTransformationRequest =
|
||||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.addListener(mockListener)
|
.addListener(mockListener)
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||||
@ -774,7 +760,7 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
|
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
|
||||||
verify(mockListener)
|
verify(mockListener)
|
||||||
.onFallbackApplied(
|
.onFallbackApplied(
|
||||||
@ -791,7 +777,7 @@ public final class MediaItemExportTest {
|
|||||||
TransformationRequest fallbackTransformationRequest =
|
TransformationRequest fallbackTransformationRequest =
|
||||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ true)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ true)
|
||||||
.addListener(mockListener)
|
.addListener(mockListener)
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||||
@ -801,7 +787,7 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
|
getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
|
||||||
verify(mockListener)
|
verify(mockListener)
|
||||||
.onFallbackApplied(
|
.onFallbackApplied(
|
||||||
@ -824,9 +810,9 @@ public final class MediaItemExportTest {
|
|||||||
new FakeClock(/* isAutoAdvancing= */ true),
|
new FakeClock(/* isAutoAdvancing= */ true),
|
||||||
mediaSourceFactory);
|
mediaSourceFactory);
|
||||||
Muxer.Factory muxerFactory =
|
Muxer.Factory muxerFactory =
|
||||||
new TestMuxerFactory(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ 1);
|
new TestMuxer.Factory(muxerHolder, /* maxDelayBetweenSamplesMs= */ 1);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAssetLoaderFactory(assetLoaderFactory)
|
.setAssetLoaderFactory(assetLoaderFactory)
|
||||||
.setMuxerFactory(muxerFactory)
|
.setMuxerFactory(muxerFactory)
|
||||||
.build();
|
.build();
|
||||||
@ -842,9 +828,9 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withUnsetMaxDelayBetweenSamples_completesSuccessfully() throws Exception {
|
public void start_withUnsetMaxDelayBetweenSamples_completesSuccessfully() throws Exception {
|
||||||
Muxer.Factory muxerFactory =
|
Muxer.Factory muxerFactory =
|
||||||
new TestMuxerFactory(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
|
new TestMuxer.Factory(muxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setMuxerFactory(muxerFactory)
|
.setMuxerFactory(muxerFactory)
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
@ -853,13 +839,13 @@ public final class MediaItemExportTest {
|
|||||||
TransformerTestRunner.runLooper(transformer);
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_afterCancellation_completesSuccessfully() throws Exception {
|
public void start_afterCancellation_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -880,7 +866,7 @@ public final class MediaItemExportTest {
|
|||||||
anotherThread.start();
|
anotherThread.start();
|
||||||
Looper looper = anotherThread.getLooper();
|
Looper looper = anotherThread.getLooper();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setLooper(looper)
|
.setLooper(looper)
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
@ -903,13 +889,13 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
assertThat(exception.get()).isNull();
|
assertThat(exception.get()).isNull();
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_fromWrongThread_throwsError() throws Exception {
|
public void start_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
||||||
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
||||||
@ -936,7 +922,7 @@ public final class MediaItemExportTest {
|
|||||||
public void start_withAssetLoaderAlwaysDecoding_exporterExpectsDecoded() throws Exception {
|
public void start_withAssetLoaderAlwaysDecoding_exporterExpectsDecoded() throws Exception {
|
||||||
AtomicReference<SampleConsumer> sampleConsumerRef = new AtomicReference<>();
|
AtomicReference<SampleConsumer> sampleConsumerRef = new AtomicReference<>();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAssetLoaderFactory(
|
.setAssetLoaderFactory(
|
||||||
new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef))
|
new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef))
|
||||||
.build();
|
.build();
|
||||||
@ -951,7 +937,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withAssetLoaderNotDecodingAndDecodingNeeded_completesWithError() {
|
public void start_withAssetLoaderNotDecodingAndDecodingNeeded_completesWithError() {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false)
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false)
|
||||||
.setAssetLoaderFactory(
|
.setAssetLoaderFactory(
|
||||||
new FakeAssetLoader.Factory(
|
new FakeAssetLoader.Factory(
|
||||||
SUPPORTED_OUTPUT_TYPE_ENCODED, /* sampleConsumerRef= */ null))
|
SUPPORTED_OUTPUT_TYPE_ENCODED, /* sampleConsumerRef= */ null))
|
||||||
@ -972,7 +958,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_withNoOpEffects_transmuxes() throws Exception {
|
public void start_withNoOpEffects_transmuxes() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
int mediaItemHeightPixels = 720;
|
int mediaItemHeightPixels = 720;
|
||||||
ImmutableList<Effect> videoEffects =
|
ImmutableList<Effect> videoEffects =
|
||||||
@ -988,13 +974,13 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
// Video transcoding in unit tests is not supported.
|
// Video transcoding in unit tests is not supported.
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context, checkNotNull(testMuxerHolder.testMuxer), getDumpFileName(FILE_VIDEO_ONLY));
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_VIDEO_ONLY));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void start_withOnlyRegularRotationEffect_transmuxesAndRotates() throws Exception {
|
public void start_withOnlyRegularRotationEffect_transmuxesAndRotates() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
ImmutableList<Effect> videoEffects =
|
ImmutableList<Effect> videoEffects =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
@ -1008,15 +994,13 @@ public final class MediaItemExportTest {
|
|||||||
|
|
||||||
// Video transcoding in unit tests is not supported.
|
// Video transcoding in unit tests is not supported.
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context, checkNotNull(muxerHolder.muxer), getDumpFileName(FILE_AUDIO_VIDEO + ".rotated"));
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".rotated"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
|
public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
AtomicInteger previousProgressState =
|
AtomicInteger previousProgressState =
|
||||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||||
@ -1063,7 +1047,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
|
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
List<Integer> progresses = new ArrayList<>();
|
List<Integer> progresses = new ArrayList<>();
|
||||||
Handler progressHandler =
|
Handler progressHandler =
|
||||||
@ -1098,7 +1082,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getProgress_noCurrentExport_returnsNotStarted() throws Exception {
|
public void getProgress_noCurrentExport_returnsNotStarted() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
|
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
|
||||||
@ -1113,7 +1097,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
|
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION);
|
||||||
AtomicInteger previousProgressState =
|
AtomicInteger previousProgressState =
|
||||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||||
@ -1157,7 +1141,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void getProgress_fromWrongThread_throwsError() throws Exception {
|
public void getProgress_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
||||||
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
@ -1182,7 +1166,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void cancel_afterCompletion_doesNotThrow() throws Exception {
|
public void cancel_afterCompletion_doesNotThrow() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.start(mediaItem, outputPath);
|
transformer.start(mediaItem, outputPath);
|
||||||
@ -1193,7 +1177,7 @@ public final class MediaItemExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void cancel_fromWrongThread_throwsError() throws Exception {
|
public void cancel_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
HandlerThread anotherThread = new HandlerThread("AnotherThread");
|
||||||
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
AtomicReference<IllegalStateException> illegalStateException = new AtomicReference<>();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
@ -36,7 +36,6 @@ import androidx.media3.common.audio.SonicAudioProcessor;
|
|||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.effect.RgbFilter;
|
import androidx.media3.effect.RgbFilter;
|
||||||
import androidx.media3.test.utils.DumpFileAsserts;
|
import androidx.media3.test.utils.DumpFileAsserts;
|
||||||
import androidx.media3.transformer.TestUtil.TestMuxerFactory.TestMuxerHolder;
|
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -63,13 +62,13 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
private Context context;
|
private Context context;
|
||||||
private String outputPath;
|
private String outputPath;
|
||||||
private TestMuxerHolder testMuxerHolder;
|
private TestMuxer.Holder muxerHolder;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws Exception {
|
public void setUp() throws Exception {
|
||||||
context = ApplicationProvider.getApplicationContext();
|
context = ApplicationProvider.getApplicationContext();
|
||||||
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
|
||||||
testMuxerHolder = new TestMuxerHolder();
|
muxerHolder = new TestMuxer.Holder();
|
||||||
createEncodersAndDecoders();
|
createEncodersAndDecoders();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +81,7 @@ public final class SequenceExportTest {
|
|||||||
@Test
|
@Test
|
||||||
public void start_concatenateSameMediaItemWithTransmux_completesSuccessfully() throws Exception {
|
public void start_concatenateSameMediaItemWithTransmux_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
EditedMediaItemSequence editedMediaItemSequence =
|
EditedMediaItemSequence editedMediaItemSequence =
|
||||||
@ -98,7 +97,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux"));
|
getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +105,7 @@ public final class SequenceExportTest {
|
|||||||
public void start_concatenateSameMediaItemWithEffectsAndTransmux_ignoresEffects()
|
public void start_concatenateSameMediaItemWithEffectsAndTransmux_ignoresEffects()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
|
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
|
||||||
Effect videoEffect = RgbFilter.createGrayscaleFilter();
|
Effect videoEffect = RgbFilter.createGrayscaleFilter();
|
||||||
@ -127,7 +126,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux"));
|
getDumpFileName(FILE_AUDIO_VIDEO + ".concatenated_transmux"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -135,7 +134,7 @@ public final class SequenceExportTest {
|
|||||||
public void start_concatenateClippedMediaItemsWithTransmux_completesSuccessfully()
|
public void start_concatenateClippedMediaItemsWithTransmux_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem.ClippingConfiguration clippingConfiguration1 =
|
MediaItem.ClippingConfiguration clippingConfiguration1 =
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(0) // Corresponds to key frame.
|
.setStartPositionMs(0) // Corresponds to key frame.
|
||||||
@ -171,7 +170,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(
|
getDumpFileName(
|
||||||
FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped_concatenated_transmux"));
|
FILE_AUDIO_VIDEO_INCREASING_TIMESTAMPS_15S + ".clipped_concatenated_transmux"));
|
||||||
}
|
}
|
||||||
@ -180,7 +179,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateAudioAndSilence_withTransmuxVideo_completesSuccessfully()
|
public void concatenateAudioAndSilence_withTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem audioVideoMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem audioVideoMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
EditedMediaItem videoOnlyMediaItem =
|
EditedMediaItem videoOnlyMediaItem =
|
||||||
@ -198,7 +197,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,7 +205,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateSilenceAndAudio_withTransmuxVideo_completesSuccessfully()
|
public void concatenateSilenceAndAudio_withTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem videoOnlyMediaItem =
|
EditedMediaItem videoOnlyMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
@ -224,7 +223,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,7 +231,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateAudioAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully()
|
public void concatenateAudioAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
@ -262,7 +261,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence_with_effects"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".audio_then_silence_with_effects"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +269,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateSilenceAndAudio_withEffectsAndTransmuxVideo_completesSuccessfully()
|
public void concatenateSilenceAndAudio_withEffectsAndTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem noAudioEditedMediaItem =
|
EditedMediaItem noAudioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
@ -301,7 +300,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio_with_effects"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_audio_with_effects"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +308,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateSilenceAndSilence_withTransmuxVideo_completesSuccessfully()
|
public void concatenateSilenceAndSilence_withTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem videoOnlyMediaItem =
|
EditedMediaItem videoOnlyMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
@ -326,7 +325,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -334,7 +333,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateEditedSilenceAndSilence_withTransmuxVideo_completesSuccessfully()
|
public void concatenateEditedSilenceAndSilence_withTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem silenceWithEffectsItem =
|
EditedMediaItem silenceWithEffectsItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
@ -365,7 +364,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence-effects_then_silence"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence-effects_then_silence"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -373,7 +372,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateSilenceAndEditedSilence_withTransmuxVideo_completesSuccessfully()
|
public void concatenateSilenceAndEditedSilence_withTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem silenceWithEffectsItem =
|
EditedMediaItem silenceWithEffectsItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
@ -404,7 +403,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence-effects"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence-effects"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,7 +411,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateSilenceAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully()
|
public void concatenateSilenceAndSilence_withEffectsAndTransmuxVideo_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO);
|
||||||
EditedMediaItem firstItem =
|
EditedMediaItem firstItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
@ -443,14 +442,14 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence_with_effects"));
|
getDumpFileName(FILE_AUDIO_RAW_VIDEO + ".silence_then_silence_with_effects"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void concatenateTwoAudioItems_withSameFormat_completesSuccessfully() throws Exception {
|
public void concatenateTwoAudioItems_withSameFormat_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(audioOnlyMediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(audioOnlyMediaItem).build();
|
||||||
EditedMediaItemSequence editedMediaItemSequence =
|
EditedMediaItemSequence editedMediaItemSequence =
|
||||||
@ -463,7 +462,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW + ".concatenated"));
|
getDumpFileName(FILE_AUDIO_RAW + ".concatenated"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -471,7 +470,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateTwoAudioItems_withSameFormatAndSameEffects_completesSuccessfully()
|
public void concatenateTwoAudioItems_withSameFormatAndSameEffects_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||||
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
|
SonicAudioProcessor sonicAudioProcessor = createPitchChangingAudioProcessor(/* pitch= */ 2f);
|
||||||
Effects effects =
|
Effects effects =
|
||||||
@ -488,7 +487,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW + ".concatenated_high_pitch"));
|
getDumpFileName(FILE_AUDIO_RAW + ".concatenated_high_pitch"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -496,7 +495,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateTwoAudioItems_withSameFormatAndDiffEffects_completesSuccessfully()
|
public void concatenateTwoAudioItems_withSameFormatAndDiffEffects_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
MediaItem audioOnlyMediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||||
Effects highPitchEffects =
|
Effects highPitchEffects =
|
||||||
new Effects(
|
new Effects(
|
||||||
@ -525,14 +524,14 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW + ".high_pitch_then_low_pitch"));
|
getDumpFileName(FILE_AUDIO_RAW + ".high_pitch_then_low_pitch"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void concatenateTwoAudioItems_withDiffFormat_completesSuccessfully() throws Exception {
|
public void concatenateTwoAudioItems_withDiffFormat_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
MediaItem stereo48000Audio =
|
MediaItem stereo48000Audio =
|
||||||
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ);
|
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW_STEREO_48000KHZ);
|
||||||
MediaItem mono44100Audio = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
MediaItem mono44100Audio = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW);
|
||||||
@ -549,7 +548,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "_then_sample.wav"));
|
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "_then_sample.wav"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -557,7 +556,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateTwoAudioItems_withDiffFormatAndSameEffects_completesSuccessfully()
|
public void concatenateTwoAudioItems_withDiffFormatAndSameEffects_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
|
|
||||||
Effects highPitch =
|
Effects highPitch =
|
||||||
new Effects(
|
new Effects(
|
||||||
@ -584,7 +583,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-high_pitch"));
|
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-high_pitch"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -592,7 +591,7 @@ public final class SequenceExportTest {
|
|||||||
public void concatenateTwoAudioItems_withDiffFormatAndDiffEffects_completesSuccessfully()
|
public void concatenateTwoAudioItems_withDiffFormatAndDiffEffects_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(testMuxerHolder, /* enableFallback= */ false).build();
|
createTransformerBuilder(muxerHolder, /* enableFallback= */ false).build();
|
||||||
|
|
||||||
EditedMediaItem stereo48000AudioHighPitch =
|
EditedMediaItem stereo48000AudioHighPitch =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
@ -620,7 +619,7 @@ public final class SequenceExportTest {
|
|||||||
|
|
||||||
DumpFileAsserts.assertOutput(
|
DumpFileAsserts.assertOutput(
|
||||||
context,
|
context,
|
||||||
checkNotNull(testMuxerHolder.testMuxer),
|
checkNotNull(muxerHolder.muxer),
|
||||||
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-low_pitch"));
|
getDumpFileName(FILE_AUDIO_RAW_STEREO_48000KHZ + "-high_pitch_then_sample.wav-low_pitch"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,11 +15,13 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.media3.common.C;
|
import androidx.media3.common.C;
|
||||||
import androidx.media3.common.Format;
|
import androidx.media3.common.Format;
|
||||||
import androidx.media3.common.Metadata;
|
import androidx.media3.common.Metadata;
|
||||||
import androidx.media3.test.utils.DumpableFormat;
|
import androidx.media3.test.utils.DumpableFormat;
|
||||||
import androidx.media3.test.utils.Dumper;
|
import androidx.media3.test.utils.Dumper;
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -34,13 +36,43 @@ import java.util.Map;
|
|||||||
*/
|
*/
|
||||||
public final class TestMuxer implements Muxer, Dumper.Dumpable {
|
public final class TestMuxer implements Muxer, Dumper.Dumpable {
|
||||||
|
|
||||||
|
public static final class Holder {
|
||||||
|
@Nullable public TestMuxer muxer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final class Factory implements Muxer.Factory {
|
||||||
|
|
||||||
|
private final Holder muxerHolder;
|
||||||
|
private final Muxer.Factory defaultMuxerFactory;
|
||||||
|
|
||||||
|
public Factory(Holder muxerHolder) {
|
||||||
|
this(muxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Factory(Holder muxerHolder, long maxDelayBetweenSamplesMs) {
|
||||||
|
this.muxerHolder = muxerHolder;
|
||||||
|
defaultMuxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Muxer create(String path) throws Muxer.MuxerException {
|
||||||
|
muxerHolder.muxer = new TestMuxer(defaultMuxerFactory.create(path));
|
||||||
|
return muxerHolder.muxer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
|
||||||
|
return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private final Muxer muxer;
|
private final Muxer muxer;
|
||||||
private final Map<Integer, List<DumpableSample>> trackIndexToSampleDumpables;
|
private final Map<Integer, List<DumpableSample>> trackIndexToSampleDumpables;
|
||||||
private final List<Dumper.Dumpable> dumpables;
|
private final List<Dumper.Dumpable> dumpables;
|
||||||
|
|
||||||
/** Creates a new test muxer. */
|
/** Creates a new test muxer. */
|
||||||
public TestMuxer(String path, Muxer.Factory muxerFactory) throws MuxerException {
|
private TestMuxer(Muxer muxer) {
|
||||||
muxer = muxerFactory.create(path);
|
this.muxer = muxer;
|
||||||
dumpables = new ArrayList<>();
|
dumpables = new ArrayList<>();
|
||||||
trackIndexToSampleDumpables = new HashMap<>();
|
trackIndexToSampleDumpables = new HashMap<>();
|
||||||
}
|
}
|
||||||
|
@ -43,36 +43,6 @@ import org.robolectric.shadows.ShadowMediaCodecList;
|
|||||||
@UnstableApi
|
@UnstableApi
|
||||||
public final class TestUtil {
|
public final class TestUtil {
|
||||||
|
|
||||||
public static final class TestMuxerFactory implements Muxer.Factory {
|
|
||||||
|
|
||||||
public static final class TestMuxerHolder {
|
|
||||||
@Nullable public TestMuxer testMuxer;
|
|
||||||
}
|
|
||||||
|
|
||||||
private final TestMuxerHolder testMuxerHolder;
|
|
||||||
private final Muxer.Factory defaultMuxerFactory;
|
|
||||||
|
|
||||||
public TestMuxerFactory(TestMuxerHolder testMuxerHolder) {
|
|
||||||
this(testMuxerHolder, /* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TestMuxerFactory(TestMuxerHolder testMuxerHolder, long maxDelayBetweenSamplesMs) {
|
|
||||||
this.testMuxerHolder = testMuxerHolder;
|
|
||||||
defaultMuxerFactory = new DefaultMuxer.Factory(maxDelayBetweenSamplesMs);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Muxer create(String path) throws Muxer.MuxerException {
|
|
||||||
testMuxerHolder.testMuxer = new TestMuxer(path, defaultMuxerFactory);
|
|
||||||
return testMuxerHolder.testMuxer;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public ImmutableList<String> getSupportedSampleMimeTypes(@C.TrackType int trackType) {
|
|
||||||
return defaultMuxerFactory.getSupportedSampleMimeTypes(trackType);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final class FakeAssetLoader implements AssetLoader {
|
public static final class FakeAssetLoader implements AssetLoader {
|
||||||
|
|
||||||
public static final class Factory implements AssetLoader.Factory {
|
public static final class Factory implements AssetLoader.Factory {
|
||||||
@ -234,11 +204,11 @@ public final class TestUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Transformer.Builder createTransformerBuilder(
|
public static Transformer.Builder createTransformerBuilder(
|
||||||
TestMuxerFactory.TestMuxerHolder testMuxerHolder, boolean enableFallback) {
|
TestMuxer.Holder testMuxerHolder, boolean enableFallback) {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
return new Transformer.Builder(context)
|
return new Transformer.Builder(context)
|
||||||
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
|
.setClock(new FakeClock(/* isAutoAdvancing= */ true))
|
||||||
.setMuxerFactory(new TestMuxerFactory(testMuxerHolder))
|
.setMuxerFactory(new TestMuxer.Factory(testMuxerHolder))
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory.Builder(context).setEnableFallback(enableFallback).build());
|
new DefaultEncoderFactory.Builder(context).setEnableFallback(enableFallback).build());
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user