mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Add a composition export dump test with a shorter second sequence.
PiperOrigin-RevId: 669348374
This commit is contained in:
parent
4e858f7260
commit
5eba716410
@ -0,0 +1,117 @@
|
|||||||
|
format audio:
|
||||||
|
averageBitrate = 131072
|
||||||
|
sampleMimeType = audio/mp4a-latm
|
||||||
|
channelCount = 1
|
||||||
|
sampleRate = 44100
|
||||||
|
pcmEncoding = 2
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -477126770
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 779113371
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 45842530
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 2001000243
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -187462316
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -309708822
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1030869338
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -1134039798
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -2131288947
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1159697593
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -889164698
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1380568930
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1722863050
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -1365744081
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -81471997
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -6915052
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1634845963
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = -1252305359
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 2127515647
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 2077308846
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1055925064
|
||||||
|
size = 4096
|
||||||
|
isKeyFrame = true
|
||||||
|
sample:
|
||||||
|
trackType = audio
|
||||||
|
dataHashCode = 1077088737
|
||||||
|
size = 1912
|
||||||
|
isKeyFrame = true
|
||||||
|
released = true
|
@ -28,6 +28,7 @@ import static androidx.media3.transformer.TestUtil.addAudioEncoders;
|
|||||||
import static androidx.media3.transformer.TestUtil.createAudioEffects;
|
import static androidx.media3.transformer.TestUtil.createAudioEffects;
|
||||||
import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
|
import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
|
||||||
import static androidx.media3.transformer.TestUtil.createVolumeScalingAudioProcessor;
|
import static androidx.media3.transformer.TestUtil.createVolumeScalingAudioProcessor;
|
||||||
|
import static androidx.media3.transformer.TestUtil.getCompositionDumpFilePath;
|
||||||
import static androidx.media3.transformer.TestUtil.getDumpFileName;
|
import static androidx.media3.transformer.TestUtil.getDumpFileName;
|
||||||
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
|
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@ -378,6 +379,72 @@ public class CompositionExportTest {
|
|||||||
"48000hz"));
|
"48000hz"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void start_firstSequenceFinishesEarly_works() throws Exception {
|
||||||
|
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||||
|
Transformer transformer =
|
||||||
|
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||||
|
EditedMediaItem audioItem300ms =
|
||||||
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)
|
||||||
|
.buildUpon()
|
||||||
|
.setClippingConfiguration(
|
||||||
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
|
.setStartPositionMs(100)
|
||||||
|
.setEndPositionMs(400)
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
EditedMediaItem audioItem1000ms =
|
||||||
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||||
|
Composition composition =
|
||||||
|
new Composition.Builder(
|
||||||
|
new EditedMediaItemSequence(audioItem300ms),
|
||||||
|
new EditedMediaItemSequence(audioItem1000ms))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
transformer.start(composition, outputDir.newFile().getPath());
|
||||||
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
|
DumpFileAsserts.assertOutput(
|
||||||
|
context,
|
||||||
|
muxerFactory.getCreatedMuxer(),
|
||||||
|
getCompositionDumpFilePath("seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void start_secondSequenceFinishesEarly_works() throws Exception {
|
||||||
|
CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory(/* handleAudioAsPcm= */ true);
|
||||||
|
Transformer transformer =
|
||||||
|
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
|
||||||
|
EditedMediaItem audioItem1000ms =
|
||||||
|
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)).build();
|
||||||
|
EditedMediaItem audioItem300ms =
|
||||||
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_RAW)
|
||||||
|
.buildUpon()
|
||||||
|
.setClippingConfiguration(
|
||||||
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
|
.setStartPositionMs(100)
|
||||||
|
.setEndPositionMs(400)
|
||||||
|
.build())
|
||||||
|
.build())
|
||||||
|
.build();
|
||||||
|
Composition composition =
|
||||||
|
new Composition.Builder(
|
||||||
|
new EditedMediaItemSequence(audioItem1000ms),
|
||||||
|
new EditedMediaItemSequence(audioItem300ms))
|
||||||
|
.build();
|
||||||
|
|
||||||
|
transformer.start(composition, outputDir.newFile().getPath());
|
||||||
|
TransformerTestRunner.runLooper(transformer);
|
||||||
|
|
||||||
|
DumpFileAsserts.assertOutput(
|
||||||
|
context,
|
||||||
|
muxerFactory.getCreatedMuxer(),
|
||||||
|
getCompositionDumpFilePath("seq-sample.wav+seq-sample.wav_clipped_100ms_to_400ms"));
|
||||||
|
}
|
||||||
|
|
||||||
private static String getFileName(String filePath) {
|
private static String getFileName(String filePath) {
|
||||||
int lastSeparator = filePath.lastIndexOf("/");
|
int lastSeparator = filePath.lastIndexOf("/");
|
||||||
return filePath.substring(lastSeparator + 1);
|
return filePath.substring(lastSeparator + 1);
|
||||||
|
@ -149,6 +149,15 @@ public final class TestUtil {
|
|||||||
return stringJoiner.toString();
|
return stringJoiner.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Returns the file path of the composition export dump file, based on the summary provided. */
|
||||||
|
public static String getCompositionDumpFilePath(String compositionSummary) {
|
||||||
|
return DUMP_FILE_OUTPUT_DIRECTORY
|
||||||
|
+ "/composition/"
|
||||||
|
+ compositionSummary
|
||||||
|
+ "."
|
||||||
|
+ DUMP_FILE_EXTENSION;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds an audio decoder for each {@linkplain MimeTypes mime type}.
|
* Adds an audio decoder for each {@linkplain MimeTypes mime type}.
|
||||||
*
|
*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user