mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Add enable fallback option to transformer demo.
Also invert disableFallback parameter in DefaultEncoderFactory to enableFallback. Fallback is still enabled by default. PiperOrigin-RevId: 429253266
This commit is contained in:
parent
3400736472
commit
5b8c4e09e0
7 changed files with 67 additions and 45 deletions
|
|
@ -54,6 +54,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
|
||||||
public static final String SCALE_X = "scale_x";
|
public static final String SCALE_X = "scale_x";
|
||||||
public static final String SCALE_Y = "scale_y";
|
public static final String SCALE_Y = "scale_y";
|
||||||
public static final String ROTATE_DEGREES = "rotate_degrees";
|
public static final String ROTATE_DEGREES = "rotate_degrees";
|
||||||
|
public static final String ENABLE_FALLBACK = "enable_fallback";
|
||||||
public static final String ENABLE_HDR_EDITING = "enable_hdr_editing";
|
public static final String ENABLE_HDR_EDITING = "enable_hdr_editing";
|
||||||
private static final String[] INPUT_URIS = {
|
private static final String[] INPUT_URIS = {
|
||||||
"https://html5demos.com/assets/dizzy.mp4",
|
"https://html5demos.com/assets/dizzy.mp4",
|
||||||
|
|
@ -80,6 +81,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
|
||||||
private @MonotonicNonNull Spinner translateSpinner;
|
private @MonotonicNonNull Spinner translateSpinner;
|
||||||
private @MonotonicNonNull Spinner scaleSpinner;
|
private @MonotonicNonNull Spinner scaleSpinner;
|
||||||
private @MonotonicNonNull Spinner rotateSpinner;
|
private @MonotonicNonNull Spinner rotateSpinner;
|
||||||
|
private @MonotonicNonNull CheckBox enableFallbackCheckBox;
|
||||||
private @MonotonicNonNull CheckBox enableHdrEditingCheckBox;
|
private @MonotonicNonNull CheckBox enableHdrEditingCheckBox;
|
||||||
private int inputUriPosition;
|
private int inputUriPosition;
|
||||||
|
|
||||||
|
|
@ -154,6 +156,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
|
||||||
rotateSpinner.setAdapter(rotateAdapter);
|
rotateSpinner.setAdapter(rotateAdapter);
|
||||||
rotateAdapter.addAll(SAME_AS_INPUT_OPTION, "0", "10", "45", "60", "90", "180");
|
rotateAdapter.addAll(SAME_AS_INPUT_OPTION, "0", "10", "45", "60", "90", "180");
|
||||||
|
|
||||||
|
enableFallbackCheckBox = findViewById(R.id.enable_fallback_checkbox);
|
||||||
enableHdrEditingCheckBox = findViewById(R.id.hdr_editing_checkbox);
|
enableHdrEditingCheckBox = findViewById(R.id.hdr_editing_checkbox);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -183,6 +186,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
|
||||||
"translateSpinner",
|
"translateSpinner",
|
||||||
"scaleSpinner",
|
"scaleSpinner",
|
||||||
"rotateSpinner",
|
"rotateSpinner",
|
||||||
|
"enableFallbackCheckBox",
|
||||||
"enableHdrEditingCheckBox"
|
"enableHdrEditingCheckBox"
|
||||||
})
|
})
|
||||||
private void startTransformation(View view) {
|
private void startTransformation(View view) {
|
||||||
|
|
@ -221,6 +225,7 @@ public final class ConfigurationActivity extends AppCompatActivity {
|
||||||
if (!SAME_AS_INPUT_OPTION.equals(selectedRotate)) {
|
if (!SAME_AS_INPUT_OPTION.equals(selectedRotate)) {
|
||||||
bundle.putFloat(ROTATE_DEGREES, Float.parseFloat(selectedRotate));
|
bundle.putFloat(ROTATE_DEGREES, Float.parseFloat(selectedRotate));
|
||||||
}
|
}
|
||||||
|
bundle.putBoolean(ENABLE_FALLBACK, enableFallbackCheckBox.isChecked());
|
||||||
bundle.putBoolean(ENABLE_HDR_EDITING, enableHdrEditingCheckBox.isChecked());
|
bundle.putBoolean(ENABLE_HDR_EDITING, enableHdrEditingCheckBox.isChecked());
|
||||||
transformerIntent.putExtras(bundle);
|
transformerIntent.putExtras(bundle);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,8 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||||
import com.google.android.exoplayer2.C;
|
import com.google.android.exoplayer2.C;
|
||||||
import com.google.android.exoplayer2.ExoPlayer;
|
import com.google.android.exoplayer2.ExoPlayer;
|
||||||
import com.google.android.exoplayer2.MediaItem;
|
import com.google.android.exoplayer2.MediaItem;
|
||||||
|
import com.google.android.exoplayer2.transformer.DefaultEncoderFactory;
|
||||||
|
import com.google.android.exoplayer2.transformer.EncoderSelector;
|
||||||
import com.google.android.exoplayer2.transformer.ProgressHolder;
|
import com.google.android.exoplayer2.transformer.ProgressHolder;
|
||||||
import com.google.android.exoplayer2.transformer.TransformationException;
|
import com.google.android.exoplayer2.transformer.TransformationException;
|
||||||
import com.google.android.exoplayer2.transformer.TransformationRequest;
|
import com.google.android.exoplayer2.transformer.TransformationRequest;
|
||||||
|
|
@ -224,7 +226,11 @@ public final class TransformerActivity extends AppCompatActivity {
|
||||||
transformerBuilder
|
transformerBuilder
|
||||||
.setTransformationRequest(requestBuilder.build())
|
.setTransformationRequest(requestBuilder.build())
|
||||||
.setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO))
|
.setRemoveAudio(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_AUDIO))
|
||||||
.setRemoveVideo(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_VIDEO));
|
.setRemoveVideo(bundle.getBoolean(ConfigurationActivity.SHOULD_REMOVE_VIDEO))
|
||||||
|
.setEncoderFactory(
|
||||||
|
new DefaultEncoderFactory(
|
||||||
|
EncoderSelector.DEFAULT,
|
||||||
|
/* enableFallback= */ bundle.getBoolean(ConfigurationActivity.ENABLE_FALLBACK)));
|
||||||
}
|
}
|
||||||
return transformerBuilder
|
return transformerBuilder
|
||||||
.addListener(
|
.addListener(
|
||||||
|
|
|
||||||
|
|
@ -170,6 +170,16 @@
|
||||||
android:layout_gravity="right|center_vertical"
|
android:layout_gravity="right|center_vertical"
|
||||||
android:gravity="right" />
|
android:gravity="right" />
|
||||||
</TableRow>
|
</TableRow>
|
||||||
|
<TableRow
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:gravity="center_vertical" >
|
||||||
|
<TextView
|
||||||
|
android:text="@string/enable_fallback" />
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/enable_fallback_checkbox"
|
||||||
|
android:layout_gravity="right"
|
||||||
|
android:checked="true"/>
|
||||||
|
</TableRow>
|
||||||
<TableRow
|
<TableRow
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
android:gravity="center_vertical" >
|
android:gravity="center_vertical" >
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@
|
||||||
<string name="translate" translatable="false">Translate video</string>
|
<string name="translate" translatable="false">Translate video</string>
|
||||||
<string name="scale" translatable="false">Scale video</string>
|
<string name="scale" translatable="false">Scale video</string>
|
||||||
<string name="rotate" translatable="false">Rotate video (degrees)</string>
|
<string name="rotate" translatable="false">Rotate video (degrees)</string>
|
||||||
|
<string name="enable_fallback" translatable="false">Enable fallback</string>
|
||||||
<string name="transform" translatable="false">Transform</string>
|
<string name="transform" translatable="false">Transform</string>
|
||||||
<string name="hdr_editing" translatable="false">[Experimental] HDR editing</string>
|
<string name="hdr_editing" translatable="false">[Experimental] HDR editing</string>
|
||||||
<string name="debug_preview" translatable="false">Debug preview:</string>
|
<string name="debug_preview" translatable="false">Debug preview:</string>
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ public class TransformerEndToEndTest {
|
||||||
new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H264).build())
|
new TransformationRequest.Builder().setVideoMimeType(MimeTypes.VIDEO_H264).build())
|
||||||
.setMuxerFactory(muxerFactory)
|
.setMuxerFactory(muxerFactory)
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory(EncoderSelector.DEFAULT, /* disableFallback= */ true))
|
new DefaultEncoderFactory(EncoderSelector.DEFAULT, /* enableFallback= */ false))
|
||||||
.build();
|
.build();
|
||||||
// Result of the following command:
|
// Result of the following command:
|
||||||
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames bear-vp9.webm
|
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames bear-vp9.webm
|
||||||
|
|
@ -81,7 +81,7 @@ public class TransformerEndToEndTest {
|
||||||
.build())
|
.build())
|
||||||
.setMuxerFactory(muxerFactory)
|
.setMuxerFactory(muxerFactory)
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory(EncoderSelector.DEFAULT, /* disableFallback= */ true))
|
new DefaultEncoderFactory(EncoderSelector.DEFAULT, /* enableFallback= */ false))
|
||||||
.build();
|
.build();
|
||||||
// Result of the following command:
|
// Result of the following command:
|
||||||
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4
|
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
private static final int DEFAULT_I_FRAME_INTERVAL_SECS = 1;
|
private static final int DEFAULT_I_FRAME_INTERVAL_SECS = 1;
|
||||||
|
|
||||||
@Nullable private final EncoderSelector videoEncoderSelector;
|
@Nullable private final EncoderSelector videoEncoderSelector;
|
||||||
private final boolean disableFallback;
|
private final boolean enableFallback;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new instance using the {@link EncoderSelector#DEFAULT default encoder selector}, and
|
* Creates a new instance using the {@link EncoderSelector#DEFAULT default encoder selector}, and
|
||||||
|
|
@ -56,14 +56,14 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
* type}, resolution, {@link Format#bitrate bitrate}, {@link Format#codecs profile/level}, etc.
|
* type}, resolution, {@link Format#bitrate bitrate}, {@link Format#codecs profile/level}, etc.
|
||||||
*/
|
*/
|
||||||
public DefaultEncoderFactory() {
|
public DefaultEncoderFactory() {
|
||||||
this(EncoderSelector.DEFAULT, /* disableFallback= */ false);
|
this(EncoderSelector.DEFAULT, /* enableFallback= */ true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Creates a new instance. */
|
/** Creates a new instance. */
|
||||||
public DefaultEncoderFactory(
|
public DefaultEncoderFactory(
|
||||||
@Nullable EncoderSelector videoEncoderSelector, boolean disableFallback) {
|
@Nullable EncoderSelector videoEncoderSelector, boolean enableFallback) {
|
||||||
this.videoEncoderSelector = videoEncoderSelector;
|
this.videoEncoderSelector = videoEncoderSelector;
|
||||||
this.disableFallback = disableFallback;
|
this.enableFallback = enableFallback;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -72,7 +72,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
// TODO(b/210591626) Add encoder selection for audio.
|
// TODO(b/210591626) Add encoder selection for audio.
|
||||||
checkArgument(!allowedMimeTypes.isEmpty());
|
checkArgument(!allowedMimeTypes.isEmpty());
|
||||||
if (!allowedMimeTypes.contains(format.sampleMimeType)) {
|
if (!allowedMimeTypes.contains(format.sampleMimeType)) {
|
||||||
if (!disableFallback) {
|
if (enableFallback) {
|
||||||
// TODO(b/210591626): Pick fallback MIME type using same strategy as for encoder
|
// TODO(b/210591626): Pick fallback MIME type using same strategy as for encoder
|
||||||
// capabilities limitations.
|
// capabilities limitations.
|
||||||
format = format.buildUpon().setSampleMimeType(allowedMimeTypes.get(0)).build();
|
format = format.buildUpon().setSampleMimeType(allowedMimeTypes.get(0)).build();
|
||||||
|
|
@ -115,7 +115,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
@Nullable
|
@Nullable
|
||||||
Pair<MediaCodecInfo, Format> encoderAndClosestFormatSupport =
|
Pair<MediaCodecInfo, Format> encoderAndClosestFormatSupport =
|
||||||
findEncoderWithClosestFormatSupport(
|
findEncoderWithClosestFormatSupport(
|
||||||
format, videoEncoderSelector, allowedMimeTypes, disableFallback);
|
format, videoEncoderSelector, allowedMimeTypes, enableFallback);
|
||||||
if (encoderAndClosestFormatSupport == null) {
|
if (encoderAndClosestFormatSupport == null) {
|
||||||
throw TransformationException.createForCodec(
|
throw TransformationException.createForCodec(
|
||||||
new IllegalArgumentException("The requested output format is not supported."),
|
new IllegalArgumentException("The requested output format is not supported."),
|
||||||
|
|
@ -211,11 +211,11 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
Format requestedFormat,
|
Format requestedFormat,
|
||||||
EncoderSelector encoderSelector,
|
EncoderSelector encoderSelector,
|
||||||
List<String> allowedMimeTypes,
|
List<String> allowedMimeTypes,
|
||||||
boolean disableFallback) {
|
boolean enableFallback) {
|
||||||
String requestedMimeType = requestedFormat.sampleMimeType;
|
String requestedMimeType = requestedFormat.sampleMimeType;
|
||||||
@Nullable
|
@Nullable
|
||||||
String mimeType = findFallbackMimeType(encoderSelector, requestedMimeType, allowedMimeTypes);
|
String mimeType = findFallbackMimeType(encoderSelector, requestedMimeType, allowedMimeTypes);
|
||||||
if (mimeType == null || (disableFallback && !requestedMimeType.equals(mimeType))) {
|
if (mimeType == null || (!enableFallback && !requestedMimeType.equals(mimeType))) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -223,7 +223,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory {
|
||||||
if (encodersForMimeType.isEmpty()) {
|
if (encodersForMimeType.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (disableFallback) {
|
if (!enableFallback) {
|
||||||
return Pair.create(encodersForMimeType.get(0), requestedFormat);
|
return Pair.create(encodersForMimeType.get(0), requestedFormat);
|
||||||
}
|
}
|
||||||
ImmutableList<MediaCodecInfo> filteredEncoders =
|
ImmutableList<MediaCodecInfo> filteredEncoders =
|
||||||
|
|
|
||||||
|
|
@ -105,7 +105,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_videoOnlyPassthrough_completesSuccessfully() throws Exception {
|
public void startTransformation_videoOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -116,7 +116,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_audioOnlyPassthrough_completesSuccessfully() throws Exception {
|
public void startTransformation_audioOnlyPassthrough_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
|
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_ENCODER);
|
||||||
|
|
||||||
|
|
@ -130,7 +130,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_audioOnlyTranscoding_completesSuccessfully() throws Exception {
|
public void startTransformation_audioOnlyTranscoding_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder()
|
new TransformationRequest.Builder()
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||||
|
|
@ -147,7 +147,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_audioAndVideo_completesSuccessfully() throws Exception {
|
public void startTransformation_audioAndVideo_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -159,7 +159,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_withSubtitles_completesSuccessfully() throws Exception {
|
public void startTransformation_withSubtitles_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
|
new TransformationRequest.Builder().setAudioMimeType(MimeTypes.AUDIO_AAC).build())
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -174,7 +174,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_successiveTransformations_completesSuccessfully()
|
public void startTransformation_successiveTransformations_completesSuccessfully()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
// Transform first media item.
|
// Transform first media item.
|
||||||
|
|
@ -191,7 +191,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_concurrentTransformations_throwsError() throws Exception {
|
public void startTransformation_concurrentTransformations_throwsError() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -203,7 +203,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_removeAudio_completesSuccessfully() throws Exception {
|
public void startTransformation_removeAudio_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true).setRemoveAudio(true).build();
|
createTransformerBuilder(/* enableFallback= */ false).setRemoveAudio(true).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -216,7 +216,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_removeVideo_completesSuccessfully() throws Exception {
|
public void startTransformation_removeVideo_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true).setRemoveVideo(true).build();
|
createTransformerBuilder(/* enableFallback= */ false).setRemoveVideo(true).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -232,7 +232,7 @@ public final class TransformerEndToEndTest {
|
||||||
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(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
|
|
@ -253,7 +253,7 @@ public final class TransformerEndToEndTest {
|
||||||
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(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
|
|
@ -280,7 +280,7 @@ public final class TransformerEndToEndTest {
|
||||||
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(/* disableFallback= */ false)
|
createTransformerBuilder(/* enableFallback= */ true)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
|
|
@ -305,7 +305,7 @@ public final class TransformerEndToEndTest {
|
||||||
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(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.addListener(mockListener1)
|
.addListener(mockListener1)
|
||||||
.addListener(mockListener2)
|
.addListener(mockListener2)
|
||||||
.addListener(mockListener3)
|
.addListener(mockListener3)
|
||||||
|
|
@ -324,7 +324,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_flattenForSlowMotion_completesSuccessfully() throws Exception {
|
public void startTransformation_flattenForSlowMotion_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder().setFlattenForSlowMotion(true).build())
|
new TransformationRequest.Builder().setFlattenForSlowMotion(true).build())
|
||||||
.build();
|
.build();
|
||||||
|
|
@ -348,7 +348,7 @@ public final class TransformerEndToEndTest {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true).addListener(listener).build();
|
createTransformerBuilder(/* enableFallback= */ false).addListener(listener).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -364,7 +364,7 @@ public final class TransformerEndToEndTest {
|
||||||
public void startTransformation_withAudioEncoderFormatUnsupported_completesWithError()
|
public void startTransformation_withAudioEncoderFormatUnsupported_completesWithError()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder()
|
new TransformationRequest.Builder()
|
||||||
.setAudioMimeType(
|
.setAudioMimeType(
|
||||||
|
|
@ -385,7 +385,7 @@ public final class TransformerEndToEndTest {
|
||||||
public void startTransformation_withAudioDecoderFormatUnsupported_completesWithError()
|
public void startTransformation_withAudioDecoderFormatUnsupported_completesWithError()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder()
|
new TransformationRequest.Builder()
|
||||||
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
.setAudioMimeType(MimeTypes.AUDIO_AAC) // supported by encoder and muxer
|
||||||
|
|
@ -405,7 +405,7 @@ public final class TransformerEndToEndTest {
|
||||||
public void startTransformation_withVideoEncoderFormatUnsupported_completesWithError()
|
public void startTransformation_withVideoEncoderFormatUnsupported_completesWithError()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true)
|
createTransformerBuilder(/* enableFallback= */ false)
|
||||||
.setTransformationRequest(
|
.setTransformationRequest(
|
||||||
new TransformationRequest.Builder()
|
new TransformationRequest.Builder()
|
||||||
.setVideoMimeType(MimeTypes.VIDEO_H263) // unsupported encoder MIME type
|
.setVideoMimeType(MimeTypes.VIDEO_H263) // unsupported encoder MIME type
|
||||||
|
|
@ -423,7 +423,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_withIoError_completesWithError() throws Exception {
|
public void startTransformation_withIoError_completesWithError() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4");
|
MediaItem mediaItem = MediaItem.fromUri("asset:///non-existing-path.mp4");
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -436,7 +436,7 @@ public final class TransformerEndToEndTest {
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_withAudioMuxerFormatUnsupported_completesWithError()
|
public void startTransformation_withAudioMuxerFormatUnsupported_completesWithError()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -457,7 +457,7 @@ public final class TransformerEndToEndTest {
|
||||||
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(/* disableFallback= */ false).addListener(mockListener).build();
|
createTransformerBuilder(/* enableFallback= */ true).addListener(mockListener).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_UNSUPPORTED_BY_MUXER);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -471,7 +471,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_afterCancellation_completesSuccessfully() throws Exception {
|
public void startTransformation_afterCancellation_completesSuccessfully() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -491,7 +491,7 @@ public final class TransformerEndToEndTest {
|
||||||
anotherThread.start();
|
anotherThread.start();
|
||||||
Looper looper = anotherThread.getLooper();
|
Looper looper = anotherThread.getLooper();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
createTransformerBuilder(/* disableFallback= */ true).setLooper(looper).build();
|
createTransformerBuilder(/* enableFallback= */ false).setLooper(looper).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
||||||
AtomicReference<Exception> exception = new AtomicReference<>();
|
AtomicReference<Exception> exception = new AtomicReference<>();
|
||||||
CountDownLatch countDownLatch = new CountDownLatch(1);
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
|
@ -516,7 +516,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void startTransformation_fromWrongThread_throwsError() throws Exception {
|
public void startTransformation_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_AUDIO_VIDEO);
|
MediaItem mediaItem = MediaItem.fromUri(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<>();
|
||||||
|
|
@ -543,7 +543,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
|
public void getProgress_knownDuration_returnsConsistentStates() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
AtomicInteger previousProgressState =
|
AtomicInteger previousProgressState =
|
||||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||||
|
|
@ -589,7 +589,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
|
public void getProgress_knownDuration_givesIncreasingPercentages() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
List<Integer> progresses = new ArrayList<>();
|
List<Integer> progresses = new ArrayList<>();
|
||||||
Handler progressHandler =
|
Handler progressHandler =
|
||||||
|
|
@ -624,7 +624,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_noCurrentTransformation_returnsNoTransformation() throws Exception {
|
public void getProgress_noCurrentTransformation_returnsNoTransformation() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
|
@Transformer.ProgressState int stateBeforeTransform = transformer.getProgress(progressHolder);
|
||||||
|
|
@ -638,7 +638,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
|
public void getProgress_unknownDuration_returnsConsistentStates() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_UNKNOWN_DURATION);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_UNKNOWN_DURATION);
|
||||||
AtomicInteger previousProgressState =
|
AtomicInteger previousProgressState =
|
||||||
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
new AtomicInteger(PROGRESS_STATE_WAITING_FOR_AVAILABILITY);
|
||||||
|
|
@ -681,7 +681,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void getProgress_fromWrongThread_throwsError() throws Exception {
|
public void getProgress_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* 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);
|
||||||
|
|
@ -705,7 +705,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void cancel_afterCompletion_doesNotThrow() throws Exception {
|
public void cancel_afterCompletion_doesNotThrow() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* enableFallback= */ false).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
MediaItem mediaItem = MediaItem.fromUri(URI_PREFIX + FILE_VIDEO_ONLY);
|
||||||
|
|
||||||
transformer.startTransformation(mediaItem, outputPath);
|
transformer.startTransformation(mediaItem, outputPath);
|
||||||
|
|
@ -715,7 +715,7 @@ public final class TransformerEndToEndTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void cancel_fromWrongThread_throwsError() throws Exception {
|
public void cancel_fromWrongThread_throwsError() throws Exception {
|
||||||
Transformer transformer = createTransformerBuilder(/* disableFallback= */ true).build();
|
Transformer transformer = createTransformerBuilder(/* 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);
|
||||||
|
|
@ -737,11 +737,11 @@ public final class TransformerEndToEndTest {
|
||||||
assertThat(illegalStateException.get()).isNotNull();
|
assertThat(illegalStateException.get()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
private Transformer.Builder createTransformerBuilder(boolean disableFallback) {
|
private Transformer.Builder createTransformerBuilder(boolean enableFallback) {
|
||||||
return new Transformer.Builder(context)
|
return new Transformer.Builder(context)
|
||||||
.setClock(clock)
|
.setClock(clock)
|
||||||
.setMuxerFactory(new TestMuxerFactory())
|
.setMuxerFactory(new TestMuxerFactory())
|
||||||
.setEncoderFactory(new DefaultEncoderFactory(EncoderSelector.DEFAULT, disableFallback));
|
.setEncoderFactory(new DefaultEncoderFactory(EncoderSelector.DEFAULT, enableFallback));
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void createEncodersAndDecoders() {
|
private static void createEncodersAndDecoders() {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue