Undeprecate startTransformation(MediaItem, String)

This overload is helpful to apps transcoding a MediaItem without edits.

PiperOrigin-RevId: 505987852
This commit is contained in:
kimvde 2023-01-31 14:43:32 +00:00 committed by christosts
parent d5035123b4
commit 2c690618e5
9 changed files with 131 additions and 179 deletions

View File

@ -211,6 +211,20 @@ public class TransformerAndroidTestRunner {
} }
} }
/**
* Transforms the {@link MediaItem}, saving a summary of the transformation to the application
* cache.
*
* @param testId A unique identifier for the transformer test run.
* @param mediaItem The {@link MediaItem} to transform.
* @return The {@link TransformationTestResult}.
* @throws Exception The cause of the transformation not completing.
*/
public TransformationTestResult run(String testId, MediaItem mediaItem) throws Exception {
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
return run(testId, editedMediaItem);
}
/** /**
* Transforms the {@link EditedMediaItem}. * Transforms the {@link EditedMediaItem}.
* *

View File

@ -101,12 +101,11 @@ public class TransformerEndToEndTest {
.setEndPositionMs(clippingEndMs) .setEndPositionMs(clippingEndMs)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
TransformationTestResult result = TransformationTestResult result =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(/* testId= */ "clippedMedia_completesWithClippedDuration", editedMediaItem); .run(/* testId= */ "clippedMedia_completesWithClippedDuration", mediaItem);
assertThat(result.transformationResult.durationMs).isAtMost(clippingEndMs - clippingStartMs); assertThat(result.transformationResult.durationMs).isAtMost(clippingEndMs - clippingStartMs);
} }

View File

@ -27,7 +27,6 @@ import androidx.media3.common.C;
import androidx.media3.common.MediaItem; import androidx.media3.common.MediaItem;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.transformer.AndroidTestUtil; import androidx.media3.transformer.AndroidTestUtil;
import androidx.media3.transformer.EditedMediaItem;
import androidx.media3.transformer.TransformationException; import androidx.media3.transformer.TransformationException;
import androidx.media3.transformer.TransformationRequest; import androidx.media3.transformer.TransformationRequest;
import androidx.media3.transformer.TransformationTestResult; import androidx.media3.transformer.TransformationTestResult;
@ -68,14 +67,12 @@ public class ForceInterpretHdrVideoAsSdrTest {
TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR) TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
Log.i(TAG, "Transformed."); Log.i(TAG, "Transformed.");
} catch (TransformationException exception) { } catch (TransformationException exception) {
@ -107,14 +104,12 @@ public class ForceInterpretHdrVideoAsSdrTest {
TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR) TransformationRequest.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
Log.i(TAG, "Transformed."); Log.i(TAG, "Transformed.");
} catch (TransformationException exception) { } catch (TransformationException exception) {

View File

@ -74,15 +74,13 @@ public class HdrEditingTest {
Context context = ApplicationProvider.getApplicationContext(); Context context = ApplicationProvider.getApplicationContext();
Transformer transformer = new Transformer.Builder(context).build(); Transformer transformer = new Transformer.Builder(context).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Transformed."); Log.i(TAG, "Transformed.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_ST2084); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_ST2084);
} catch (TransformationException exception) { } catch (TransformationException exception) {
@ -99,15 +97,13 @@ public class HdrEditingTest {
Context context = ApplicationProvider.getApplicationContext(); Context context = ApplicationProvider.getApplicationContext();
Transformer transformer = new Transformer.Builder(context).build(); Transformer transformer = new Transformer.Builder(context).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Transformed."); Log.i(TAG, "Transformed.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_HLG); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_HLG);
} catch (TransformationException exception) { } catch (TransformationException exception) {
@ -295,10 +291,7 @@ public class HdrEditingTest {
Transformer transformer = new Transformer.Builder(context).build(); Transformer transformer = new Transformer.Builder(context).build();
MediaItem mediaItem = MediaItem mediaItem =
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_1_SECOND_HDR10_VIDEO_SDR_CONTAINER)); MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_1_SECOND_HDR10_VIDEO_SDR_CONTAINER));
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build(); new TransformerAndroidTestRunner.Builder(context, transformer).build().run(testId, mediaItem);
new TransformerAndroidTestRunner.Builder(context, transformer)
.build()
.run(testId, editedMediaItem);
} }
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) { private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {

View File

@ -75,15 +75,13 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
} }
}) })
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Tone mapped."); Log.i(TAG, "Tone mapped.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
} catch (TransformationException exception) { } catch (TransformationException exception) {
@ -121,15 +119,13 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
} }
}) })
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Tone mapped."); Log.i(TAG, "Tone mapped.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
} catch (TransformationException exception) { } catch (TransformationException exception) {

View File

@ -32,7 +32,6 @@ import androidx.media3.common.util.GlUtil;
import androidx.media3.common.util.Log; import androidx.media3.common.util.Log;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.transformer.AndroidTestUtil; import androidx.media3.transformer.AndroidTestUtil;
import androidx.media3.transformer.EditedMediaItem;
import androidx.media3.transformer.TransformationException; import androidx.media3.transformer.TransformationException;
import androidx.media3.transformer.TransformationRequest; import androidx.media3.transformer.TransformationRequest;
import androidx.media3.transformer.TransformationTestResult; import androidx.media3.transformer.TransformationTestResult;
@ -86,14 +85,12 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
.setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Tone mapped."); Log.i(TAG, "Tone mapped.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
} catch (TransformationException exception) { } catch (TransformationException exception) {
@ -139,14 +136,12 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
.setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) .setHdrMode(TransformationRequest.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_4_SECOND_HDR10)))
.build();
try { try {
TransformationTestResult transformationTestResult = TransformationTestResult transformationTestResult =
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
Log.i(TAG, "Tone mapped."); Log.i(TAG, "Tone mapped.");
assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR); assertFileHasColorTransfer(transformationTestResult.filePath, C.COLOR_TRANSFER_SDR);
} catch (TransformationException exception) { } catch (TransformationException exception) {

View File

@ -60,11 +60,10 @@ public class TransformationTest {
.build(); .build();
MediaItem mediaItem = MediaItem mediaItem =
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)); MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.setRequestCalculateSsim(true) .setRequestCalculateSsim(true)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
} }
@Test @Test
@ -74,11 +73,8 @@ public class TransformationTest {
Transformer transformer = new Transformer.Builder(context).build(); Transformer transformer = new Transformer.Builder(context).build();
MediaItem mediaItem = MediaItem mediaItem =
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING)); MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
// No need to calculate SSIM because no decode/encoding, so input frames match output frames. // No need to calculate SSIM because no decode/encoding, so input frames match output frames.
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer).build().run(testId, mediaItem);
.build()
.run(testId, editedMediaItem);
} }
@Test @Test
@ -122,12 +118,11 @@ public class TransformationTest {
.setEncoderFactory(new ForceEncodeEncoderFactory(context)) .setEncoderFactory(new ForceEncodeEncoderFactory(context))
.build(); .build();
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_REMOTE_4K60_PORTRAIT_URI_STRING)); MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_REMOTE_4K60_PORTRAIT_URI_STRING));
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.setRequestCalculateSsim(true) .setRequestCalculateSsim(true)
.setTimeoutSeconds(180) .setTimeoutSeconds(180)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
} }
@Test @Test
@ -146,14 +141,12 @@ public class TransformationTest {
new Transformer.Builder(context) new Transformer.Builder(context)
.setEncoderFactory(new ForceEncodeEncoderFactory(context)) .setEncoderFactory(new ForceEncodeEncoderFactory(context))
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_REMOTE_8K24_URI_STRING));
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_REMOTE_8K24_URI_STRING)))
.build();
new TransformerAndroidTestRunner.Builder(context, transformer) new TransformerAndroidTestRunner.Builder(context, transformer)
.setRequestCalculateSsim(true) .setRequestCalculateSsim(true)
.setTimeoutSeconds(180) .setTimeoutSeconds(180)
.build() .build()
.run(testId, editedMediaItem); .run(testId, mediaItem);
} }
@Test @Test

View File

@ -664,7 +664,6 @@ public final class Transformer {
* it. * it.
* @param path The path to the output file. * @param path The path to the output file.
* @throws IllegalArgumentException If the path is invalid. * @throws IllegalArgumentException If the path is invalid.
* @throws IllegalArgumentException If the {@link MediaItem} is not supported.
* @throws IllegalStateException If this method is called from the wrong thread. * @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If a transformation is already in progress. * @throws IllegalStateException If a transformation is already in progress.
*/ */
@ -673,9 +672,30 @@ public final class Transformer {
} }
/** /**
* @deprecated Use {@link #startTransformation(EditedMediaItem, String)} instead. * Starts an asynchronous operation to transform the given {@link MediaItem}.
*
* <p>The transformation state is notified through the {@linkplain Builder#addListener(Listener)
* listener}.
*
* <p>Concurrent transformations on the same Transformer object are not allowed.
*
* <p>If no custom {@link Muxer.Factory} is specified, the output is an MP4 file.
*
* <p>The output can contain at most one video track and one audio track. Other track types are
* ignored. For adaptive bitrate, if no custom {@link AssetLoader.Factory} is specified, the
* highest bitrate video and audio streams are selected.
*
* <p>If encoding the output's video track is needed, the output frames' dimensions will be
* swapped if the height is larger than the width. This is to improve compatibility among
* different device encoders.
*
* @param mediaItem The {@link MediaItem} to transform.
* @param path The path to the output file.
* @throws IllegalArgumentException If the path is invalid.
* @throws IllegalArgumentException If the {@link MediaItem} is not supported.
* @throws IllegalStateException If this method is called from the wrong thread.
* @throws IllegalStateException If a transformation is already in progress.
*/ */
@Deprecated
public void startTransformation(MediaItem mediaItem, String path) { public void startTransformation(MediaItem mediaItem, String path) {
if (!mediaItem.clippingConfiguration.equals(MediaItem.ClippingConfiguration.UNSET) if (!mediaItem.clippingConfiguration.equals(MediaItem.ClippingConfiguration.UNSET)
&& flattenForSlowMotion) { && flattenForSlowMotion) {

View File

@ -129,10 +129,9 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_videoOnlyPassthrough_completesSuccessfully() throws Exception { public void startTransformation_videoOnlyPassthrough_completesSuccessfully() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_VIDEO_ONLY)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_VIDEO_ONLY));
@ -142,9 +141,8 @@ public final class TransformerEndToEndTest {
public void startTransformation_audioOnlyPassthrough_completesSuccessfully() throws Exception { public void startTransformation_audioOnlyPassthrough_completesSuccessfully() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* 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();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
@ -161,9 +159,8 @@ public final class TransformerEndToEndTest {
.build()) .build())
.build(); .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();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
@ -173,10 +170,9 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_audioAndVideo_completesSuccessfully() throws Exception { public void startTransformation_audioAndVideo_completesSuccessfully() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO));
@ -196,9 +192,8 @@ public final class TransformerEndToEndTest {
.setStartsAtKeyFrame(true) .setStartsAtKeyFrame(true)
.build()) .build())
.build(); .build();
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
@ -214,11 +209,9 @@ public final class TransformerEndToEndTest {
.setTransformationRequest( .setTransformationRequest(
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build()) new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_WITH_SUBTITLES))
.build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_WITH_SUBTITLES)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_WITH_SUBTITLES));
@ -228,16 +221,15 @@ public final class TransformerEndToEndTest {
public void startTransformation_successiveTransformations_completesSuccessfully() public void startTransformation_successiveTransformations_completesSuccessfully()
throws Exception { throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
// Transform first media item. // Transform first media item.
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
Files.delete(Paths.get(outputPath)); Files.delete(Paths.get(outputPath));
// Transform second media item. // Transform second media item.
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO));
@ -246,14 +238,12 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_concurrentTransformations_throwsError() { public void startTransformation_concurrentTransformations_throwsError() {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
assertThrows( assertThrows(
IllegalStateException.class, IllegalStateException.class, () -> transformer.startTransformation(mediaItem, outputPath));
() -> transformer.startTransformation(editedMediaItem, outputPath));
} }
@Test @Test
@ -293,9 +283,8 @@ public final class TransformerEndToEndTest {
.experimentalSetGenerateSilentAudio(true) .experimentalSetGenerateSilentAudio(true)
.build(); .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();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
@ -308,10 +297,9 @@ public final class TransformerEndToEndTest {
createTransformerBuilder(/* enableFallback= */ false) createTransformerBuilder(/* enableFallback= */ false)
.experimentalSetGenerateSilentAudio(true) .experimentalSetGenerateSilentAudio(true)
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO));
@ -358,10 +346,9 @@ public final class TransformerEndToEndTest {
createTransformerBuilder(/* enableFallback= */ false) createTransformerBuilder(/* enableFallback= */ false)
.experimentalSetGenerateSilentAudio(true) .experimentalSetGenerateSilentAudio(true)
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
@ -397,15 +384,14 @@ public final class TransformerEndToEndTest {
.addListener(mockListener2) .addListener(mockListener2)
.addListener(mockListener3) .addListener(mockListener3)
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
verify(mockListener1).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener1).onTransformationCompleted(eq(mediaItem), any());
verify(mockListener2).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener2).onTransformationCompleted(eq(mediaItem), any());
verify(mockListener3).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener3).onTransformationCompleted(eq(mediaItem), any());
} }
@Test @Test
@ -422,19 +408,15 @@ public final class TransformerEndToEndTest {
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build()) new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
.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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationException exception = TransformationException exception =
assertThrows( assertThrows(
TransformationException.class, () -> TransformerTestRunner.runLooper(transformer)); TransformationException.class, () -> TransformerTestRunner.runLooper(transformer));
verify(mockListener1) verify(mockListener1).onTransformationError(eq(mediaItem), any(), eq(exception));
.onTransformationError(eq(editedMediaItem.mediaItem), any(), eq(exception)); verify(mockListener2).onTransformationError(eq(mediaItem), any(), eq(exception));
verify(mockListener2) verify(mockListener3).onTransformationError(eq(mediaItem), any(), eq(exception));
.onTransformationError(eq(editedMediaItem.mediaItem), any(), eq(exception));
verify(mockListener3)
.onTransformationError(eq(editedMediaItem.mediaItem), any(), eq(exception));
} }
@Test @Test
@ -453,26 +435,16 @@ public final class TransformerEndToEndTest {
.addListener(mockListener3) .addListener(mockListener3)
.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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
verify(mockListener1) verify(mockListener1)
.onFallbackApplied( .onFallbackApplied(mediaItem, originalTransformationRequest, fallbackTransformationRequest);
editedMediaItem.mediaItem,
originalTransformationRequest,
fallbackTransformationRequest);
verify(mockListener2) verify(mockListener2)
.onFallbackApplied( .onFallbackApplied(mediaItem, originalTransformationRequest, fallbackTransformationRequest);
editedMediaItem.mediaItem,
originalTransformationRequest,
fallbackTransformationRequest);
verify(mockListener3) verify(mockListener3)
.onFallbackApplied( .onFallbackApplied(mediaItem, originalTransformationRequest, fallbackTransformationRequest);
editedMediaItem.mediaItem,
originalTransformationRequest,
fallbackTransformationRequest);
} }
@Test @Test
@ -488,15 +460,14 @@ public final class TransformerEndToEndTest {
.addListener(mockListener3) .addListener(mockListener3)
.build(); .build();
Transformer transformer2 = transformer1.buildUpon().removeListener(mockListener2).build(); Transformer transformer2 = transformer1.buildUpon().removeListener(mockListener2).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer2.startTransformation(editedMediaItem, outputPath); transformer2.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer2); TransformerTestRunner.runLooper(transformer2);
verify(mockListener1).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener1).onTransformationCompleted(eq(mediaItem), any());
verify(mockListener2, never()).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener2, never()).onTransformationCompleted(eq(mediaItem), any());
verify(mockListener3).onTransformationCompleted(eq(editedMediaItem.mediaItem), any()); verify(mockListener3).onTransformationCompleted(eq(mediaItem), any());
} }
@Test @Test
@ -516,10 +487,9 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_completesWithValidBitrate() throws Exception { public void startTransformation_completesWithValidBitrate() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationResult result = TransformerTestRunner.runLooper(transformer); TransformationResult result = TransformerTestRunner.runLooper(transformer);
assertThat(result.averageAudioBitrate).isGreaterThan(0); assertThat(result.averageAudioBitrate).isGreaterThan(0);
@ -537,9 +507,8 @@ public final class TransformerEndToEndTest {
.build()) .build())
.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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationException exception = TransformationException exception =
assertThrows( assertThrows(
TransformationException.class, () -> TransformerTestRunner.runLooper(transformer)); TransformationException.class, () -> TransformerTestRunner.runLooper(transformer));
@ -558,9 +527,8 @@ public final class TransformerEndToEndTest {
.build()) .build())
.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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationException exception = TransformationException exception =
assertThrows( assertThrows(
TransformationException.class, () -> TransformerTestRunner.runLooper(transformer)); TransformationException.class, () -> TransformerTestRunner.runLooper(transformer));
@ -572,10 +540,9 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_withIoError_completesWithError() { public void startTransformation_withIoError_completesWithError() {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4");
new EditedMediaItem.Builder(MediaItem.fromUri("asset:///non-existing-path.mp4")).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationException exception = TransformationException exception =
assertThrows( assertThrows(
TransformationException.class, () -> TransformerTestRunner.runLooper(transformer)); TransformationException.class, () -> TransformerTestRunner.runLooper(transformer));
@ -595,18 +562,14 @@ public final class TransformerEndToEndTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(/* enableFallback= */ false).addListener(mockListener).build(); createTransformerBuilder(/* enableFallback= */ false).addListener(mockListener).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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
context, testMuxer, getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback")); context, testMuxer, getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
verify(mockListener) verify(mockListener)
.onFallbackApplied( .onFallbackApplied(mediaItem, originalTransformationRequest, fallbackTransformationRequest);
editedMediaItem.mediaItem,
originalTransformationRequest,
fallbackTransformationRequest);
} }
@Test @Test
@ -620,18 +583,14 @@ public final class TransformerEndToEndTest {
Transformer transformer = Transformer transformer =
createTransformerBuilder(/* enableFallback= */ true).addListener(mockListener).build(); createTransformerBuilder(/* enableFallback= */ true).addListener(mockListener).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);
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput( DumpFileAsserts.assertOutput(
context, testMuxer, getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback")); context, testMuxer, getDumpFileName(FILE_AUDIO_UNSUPPORTED_BY_MUXER + ".fallback"));
verify(mockListener) verify(mockListener)
.onFallbackApplied( .onFallbackApplied(mediaItem, originalTransformationRequest, fallbackTransformationRequest);
editedMediaItem.mediaItem,
originalTransformationRequest,
fallbackTransformationRequest);
} }
@Test @Test
@ -648,10 +607,9 @@ public final class TransformerEndToEndTest {
.setAssetLoaderFactory(assetLoaderFactory) .setAssetLoaderFactory(assetLoaderFactory)
.setMuxerFactory(muxerFactory) .setMuxerFactory(muxerFactory)
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationException exception = TransformationException exception =
assertThrows( assertThrows(
TransformationException.class, () -> TransformerTestRunner.runLooper(transformer)); TransformationException.class, () -> TransformerTestRunner.runLooper(transformer));
@ -665,10 +623,9 @@ public final class TransformerEndToEndTest {
Muxer.Factory muxerFactory = new TestMuxerFactory(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET); Muxer.Factory muxerFactory = new TestMuxerFactory(/* maxDelayBetweenSamplesMs= */ C.TIME_UNSET);
Transformer transformer = Transformer transformer =
createTransformerBuilder(/* enableFallback= */ false).setMuxerFactory(muxerFactory).build(); createTransformerBuilder(/* enableFallback= */ false).setMuxerFactory(muxerFactory).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO)); DumpFileAsserts.assertOutput(context, testMuxer, getDumpFileName(FILE_AUDIO_VIDEO));
@ -677,15 +634,14 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_afterCancellation_completesSuccessfully() throws Exception { public void startTransformation_afterCancellation_completesSuccessfully() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
transformer.cancel(); transformer.cancel();
Files.delete(Paths.get(outputPath)); Files.delete(Paths.get(outputPath));
// This would throw if the previous transformation had not been cancelled. // This would throw if the previous transformation had not been cancelled.
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformationResult transformationResult = TransformerTestRunner.runLooper(transformer); TransformationResult transformationResult = TransformerTestRunner.runLooper(transformer);
// TODO(b/264974805): Make transformation output deterministic and check it against dump file. // TODO(b/264974805): Make transformation output deterministic and check it against dump file.
@ -699,8 +655,7 @@ public final class TransformerEndToEndTest {
Looper looper = anotherThread.getLooper(); Looper looper = anotherThread.getLooper();
Transformer transformer = Transformer transformer =
createTransformerBuilder(/* enableFallback= */ false).setLooper(looper).build(); createTransformerBuilder(/* enableFallback= */ false).setLooper(looper).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
AtomicReference<Exception> exception = new AtomicReference<>(); AtomicReference<Exception> exception = new AtomicReference<>();
CountDownLatch countDownLatch = new CountDownLatch(1); CountDownLatch countDownLatch = new CountDownLatch(1);
@ -708,7 +663,7 @@ public final class TransformerEndToEndTest {
.post( .post(
() -> { () -> {
try { try {
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
} catch (Exception e) { } catch (Exception e) {
exception.set(e); exception.set(e);
@ -725,8 +680,7 @@ public final class TransformerEndToEndTest {
@Test @Test
public void startTransformation_fromWrongThread_throwsError() throws Exception { public void startTransformation_fromWrongThread_throwsError() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).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);
@ -736,7 +690,7 @@ public final class TransformerEndToEndTest {
.post( .post(
() -> { () -> {
try { try {
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
} catch (IllegalStateException e) { } catch (IllegalStateException e) {
illegalStateException.set(e); illegalStateException.set(e);
} finally { } finally {
@ -757,10 +711,9 @@ public final class TransformerEndToEndTest {
.setAssetLoaderFactory( .setAssetLoaderFactory(
new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef)) new FakeAssetLoader.Factory(SUPPORTED_OUTPUT_TYPE_DECODED, sampleConsumerRef))
.build(); .build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_AUDIO_VIDEO)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
runLooperUntil(transformer.getApplicationLooper(), () -> sampleConsumerRef.get() != null); runLooperUntil(transformer.getApplicationLooper(), () -> sampleConsumerRef.get() != null);
assertThat(sampleConsumerRef.get().expectsDecodedData()).isTrue(); assertThat(sampleConsumerRef.get().expectsDecodedData()).isTrue();
@ -811,8 +764,7 @@ public final class TransformerEndToEndTest {
@Test @Test
public void getProgress_knownDuration_returnsConsistentStates() throws Exception { public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
AtomicInteger previousProgressState = AtomicInteger previousProgressState =
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY); new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
AtomicBoolean foundInconsistentState = new AtomicBoolean(); AtomicBoolean foundInconsistentState = new AtomicBoolean();
@ -848,7 +800,7 @@ public final class TransformerEndToEndTest {
} }
}; };
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
progressHandler.sendEmptyMessage(0); progressHandler.sendEmptyMessage(0);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
@ -858,8 +810,7 @@ public final class TransformerEndToEndTest {
@Test @Test
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception { public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
List<Integer> progresses = new ArrayList<>(); List<Integer> progresses = new ArrayList<>();
Handler progressHandler = Handler progressHandler =
new Handler(Looper.myLooper()) { new Handler(Looper.myLooper()) {
@ -878,7 +829,7 @@ public final class TransformerEndToEndTest {
} }
}; };
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
progressHandler.sendEmptyMessage(0); progressHandler.sendEmptyMessage(0);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
@ -894,11 +845,10 @@ public final class TransformerEndToEndTest {
@Test @Test
public void getProgress_noCurrentTransformation_returnsNoTransformation() throws Exception { public void getProgress_noCurrentTransformation_returnsNoTransformation() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder); @Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
@Transformer.ProgressState int stateAfterTransform = transformer.getProgress(progressHolder); @Transformer.ProgressState int stateAfterTransform = transformer.getProgress(progressHolder);
@ -909,9 +859,7 @@ public final class TransformerEndToEndTest {
@Test @Test
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception { public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_UNKNOWN_DURATION))
.build();
AtomicInteger previousProgressState = AtomicInteger previousProgressState =
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY); new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
AtomicBoolean foundInconsistentState = new AtomicBoolean(); AtomicBoolean foundInconsistentState = new AtomicBoolean();
@ -944,7 +892,7 @@ public final class TransformerEndToEndTest {
} }
}; };
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
progressHandler.sendEmptyMessage(0); progressHandler.sendEmptyMessage(0);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
@ -978,10 +926,9 @@ public final class TransformerEndToEndTest {
@Test @Test
public void cancel_afterCompletion_doesNotThrow() throws Exception { public void cancel_afterCompletion_doesNotThrow() throws Exception {
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build(); Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
EditedMediaItem editedMediaItem = MediaItem mediaItem = MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY);
new EditedMediaItem.Builder(MediaItem.fromUri(ASSET_URI_PREFIX + FILE_VIDEO_ONLY)).build();
transformer.startTransformation(editedMediaItem, outputPath); transformer.startTransformation(mediaItem, outputPath);
TransformerTestRunner.runLooper(transformer); TransformerTestRunner.runLooper(transformer);
transformer.cancel(); transformer.cancel();
} }