mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Create an AssetInfo class for AndroidTestUtil test asset information.
This is an internal refactor with no logic changed. There is a duplication in information and a lack of consistency around the use of test assets in transformer androidTest. This change refactors each asset to be defined as its own AssetInfo, with the other relevant parts stored alongside the uri. Once this is in place, we can consider other useful functionality, such as having boolean flags for what tracks an asset has, helper methods for whether an asset is local or remote, and more. This will reduce the manual overhead necessary to use more assets in tests, and in particular leads towards easily using new & existing assets in parameterized tests. PiperOrigin-RevId: 644040595
This commit is contained in:
parent
d0815d3f7b
commit
2b55a5bc2d
@ -51,6 +51,7 @@ import androidx.media3.test.utils.BitmapPixelTestUtil;
|
|||||||
import androidx.media3.test.utils.VideoDecodingWrapper;
|
import androidx.media3.test.utils.VideoDecodingWrapper;
|
||||||
import com.google.common.base.Ascii;
|
import com.google.common.base.Ascii;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.errorprone.annotations.CanIgnoreReturnValue;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -70,43 +71,119 @@ public final class AndroidTestUtil {
|
|||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()));
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()));
|
||||||
|
|
||||||
public static final String PNG_ASSET_URI_STRING = "asset:///media/png/media3test.png";
|
/** Information about a test asset. */
|
||||||
public static final String PNG_ASSET_LINES_1080P_URI_STRING =
|
public static final class AssetInfo {
|
||||||
"asset:///media/png/loremipsum_1920x720.png";
|
private static final class Builder {
|
||||||
public static final String JPG_ASSET_URI_STRING = "asset:///media/jpeg/london.jpg";
|
private final String uri;
|
||||||
public static final String JPG_PORTRAIT_ASSET_URI_STRING = "asset:///media/jpeg/tokyo.jpg";
|
@Nullable private Format videoFormat;
|
||||||
public static final String JPG_SINGLE_PIXEL_URI_STRING = "asset:///media/jpeg/white-1x1.jpg";
|
private int videoFrameCount;
|
||||||
public static final String ULTRA_HDR_URI_STRING = "asset:///media/jpeg/ultraHDR.jpg";
|
private long videoDurationUs;
|
||||||
|
|
||||||
public static final String MP4_TRIM_OPTIMIZATION_URI_STRING =
|
public Builder(String uri) {
|
||||||
"asset:///media/mp4/internal_emulator_transformer_output.mp4";
|
this.uri = uri;
|
||||||
|
videoFormat = null;
|
||||||
|
videoFrameCount = C.LENGTH_UNSET;
|
||||||
|
videoDurationUs = C.TIME_UNSET;
|
||||||
|
}
|
||||||
|
|
||||||
public static final String MP4_TRIM_OPTIMIZATION_270_URI_STRING =
|
/** See {@link AssetInfo#videoFormat}. */
|
||||||
"asset:///media/mp4/internal_emulator_transformer_output_270_rotated.mp4";
|
@CanIgnoreReturnValue
|
||||||
|
public Builder setVideoFormat(Format format) {
|
||||||
|
this.videoFormat = format;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public static final String MP4_TRIM_OPTIMIZATION_180_URI_STRING =
|
/** See {@link AssetInfo#videoFrameCount}. */
|
||||||
"asset:///media/mp4/internal_emulator_transformer_output_180_rotated.mp4";
|
@CanIgnoreReturnValue
|
||||||
|
public Builder setVideoFrameCount(int frameCount) {
|
||||||
|
// Frame count can be found using the following command for a given file:
|
||||||
|
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames <file>
|
||||||
|
this.videoFrameCount = frameCount;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public static final String MP4_TRIM_OPTIMIZATION_PIXEL_URI_STRING =
|
/** See {@link AssetInfo#videoDurationUs}. */
|
||||||
"asset:///media/mp4/pixel7_videoOnly_cleaned.mp4";
|
@CanIgnoreReturnValue
|
||||||
|
public Builder setVideoDurationUs(long durationUs) {
|
||||||
|
this.videoDurationUs = durationUs;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public static final String MP4_ASSET_URI_STRING = "asset:///media/mp4/sample.mp4";
|
/** Creates an {@link AssetInfo}. */
|
||||||
public static final Format MP4_ASSET_FORMAT =
|
public AssetInfo build() {
|
||||||
|
return new AssetInfo(uri, videoFormat, videoDurationUs, videoFrameCount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Asset uri string. */
|
||||||
|
public final String uri;
|
||||||
|
|
||||||
|
/** Video {@link Format}, or {@code null}. */
|
||||||
|
@Nullable public final Format videoFormat;
|
||||||
|
|
||||||
|
/** Video duration in microseconds, or {@link C#TIME_UNSET}. */
|
||||||
|
public final long videoDurationUs;
|
||||||
|
|
||||||
|
/** Video frame count, or {@link C#LENGTH_UNSET}. */
|
||||||
|
public final int videoFrameCount;
|
||||||
|
|
||||||
|
private AssetInfo(
|
||||||
|
String uri, @Nullable Format videoFormat, long videoDurationUs, int videoFrameCount) {
|
||||||
|
this.uri = uri;
|
||||||
|
this.videoFormat = videoFormat;
|
||||||
|
this.videoDurationUs = videoDurationUs;
|
||||||
|
this.videoFrameCount = videoFrameCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "AssetInfo(" + uri + ")";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final AssetInfo PNG_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/png/media3test.png").build();
|
||||||
|
public static final AssetInfo PNG_ASSET_LINES_1080P =
|
||||||
|
new AssetInfo.Builder("asset:///media/png/loremipsum_1920x720.png").build();
|
||||||
|
public static final AssetInfo JPG_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/jpeg/london.jpg").build();
|
||||||
|
public static final AssetInfo JPG_PORTRAIT_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/jpeg/tokyo.jpg").build();
|
||||||
|
public static final AssetInfo JPG_SINGLE_PIXEL_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/jpeg/white-1x1.jpg").build();
|
||||||
|
public static final AssetInfo JPG_ULTRA_HDR_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/jpeg/ultraHDR.jpg").build();
|
||||||
|
|
||||||
|
public static final AssetInfo MP4_TRIM_OPTIMIZATION =
|
||||||
|
new AssetInfo.Builder("asset:///media/mp4/internal_emulator_transformer_output.mp4").build();
|
||||||
|
public static final AssetInfo MP4_TRIM_OPTIMIZATION_270 =
|
||||||
|
new AssetInfo.Builder(
|
||||||
|
"asset:///media/mp4/internal_emulator_transformer_output_270_rotated.mp4")
|
||||||
|
.build();
|
||||||
|
public static final AssetInfo MP4_TRIM_OPTIMIZATION_180 =
|
||||||
|
new AssetInfo.Builder(
|
||||||
|
"asset:///media/mp4/internal_emulator_transformer_output_180_rotated.mp4")
|
||||||
|
.build();
|
||||||
|
public static final AssetInfo MP4_TRIM_OPTIMIZATION_PIXEL =
|
||||||
|
new AssetInfo.Builder("asset:///media/mp4/pixel7_videoOnly_cleaned.mp4").build();
|
||||||
|
|
||||||
|
public static final AssetInfo MP4_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/mp4/sample.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1080)
|
.setWidth(1080)
|
||||||
.setHeight(720)
|
.setHeight(720)
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
|
.setVideoDurationUs(1_024_000L)
|
||||||
|
.setVideoFrameCount(30)
|
||||||
.build();
|
.build();
|
||||||
public static final long MP4_ASSET_DURATION_US = 1_024_000L;
|
|
||||||
|
|
||||||
// Result of the following command for MP4_ASSET_URI_STRING
|
public static final AssetInfo BT601_MOV_ASSET =
|
||||||
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames sample.mp4
|
new AssetInfo.Builder("asset:///media/mp4/bt601.mov")
|
||||||
public static final int MP4_ASSET_FRAME_COUNT = 30;
|
.setVideoFormat(
|
||||||
|
|
||||||
public static final String BT601_MOV_ASSET_URI_STRING = "asset:///media/mp4/bt601.mov";
|
|
||||||
public static final Format BT601_MOV_ASSET_FORMAT =
|
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(640)
|
.setWidth(640)
|
||||||
@ -119,10 +196,12 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("avc1.4D001E")
|
.setCodecs("avc1.4D001E")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String BT601_MP4_ASSET_URI_STRING = "asset:///media/mp4/bt601.mp4";
|
public static final AssetInfo BT601_MP4_ASSET =
|
||||||
public static final Format BT601_MP4_ASSET_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/bt601.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(360)
|
.setWidth(360)
|
||||||
@ -135,112 +214,120 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("avc1.42C00D")
|
.setCodecs("avc1.42C00D")
|
||||||
|
.build())
|
||||||
|
.setVideoFrameCount(30)
|
||||||
.build();
|
.build();
|
||||||
// Result of the following command for BT601_MP4_ASSET_URI_STRING
|
|
||||||
// ffprobe -count_frames -select_streams v:0 -show_entries stream=nb_read_frames bt601.mp4
|
|
||||||
public static final int BT601_MP4_ASSET_FRAME_COUNT = 30;
|
|
||||||
|
|
||||||
public static final String MP4_PORTRAIT_ASSET_URI_STRING =
|
public static final AssetInfo MP4_PORTRAIT_ASSET =
|
||||||
"asset:///media/mp4/sample_portrait.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_portrait.mp4")
|
||||||
public static final Format MP4_PORTRAIT_ASSET_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(720)
|
.setWidth(720)
|
||||||
.setHeight(1080)
|
.setHeight(1080)
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_AV1_VIDEO_URI_STRING = "asset:///media/mp4/sample_av1.mp4";
|
public static final AssetInfo MP4_ASSET_AV1_VIDEO =
|
||||||
public static final Format MP4_ASSET_AV1_VIDEO_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/sample_av1.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_AV1)
|
.setSampleMimeType(VIDEO_AV1)
|
||||||
.setWidth(1080)
|
.setWidth(1080)
|
||||||
.setHeight(720)
|
.setHeight(720)
|
||||||
.setFrameRate(30.0f)
|
.setFrameRate(30.0f)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_CHECKERBOARD_VIDEO_URI_STRING =
|
public static final AssetInfo MP4_ASSET_CHECKERBOARD_VIDEO =
|
||||||
"asset:///media/mp4/checkerboard_854x356_avc_baseline.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/checkerboard_854x356_avc_baseline.mp4")
|
||||||
public static final Format MP4_ASSET_CHECKERBOARD_VIDEO_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(854)
|
.setWidth(854)
|
||||||
.setHeight(356)
|
.setHeight(356)
|
||||||
.setFrameRate(25.0f)
|
.setFrameRate(25.0f)
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING =
|
public static final AssetInfo MP4_ASSET_WITH_INCREASING_TIMESTAMPS =
|
||||||
"asset:///media/mp4/sample_with_increasing_timestamps.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_with_increasing_timestamps.mp4")
|
||||||
public static final Format MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
.setHeight(1080)
|
.setHeight(1080)
|
||||||
.setFrameRate(30.00f)
|
.setFrameRate(30.00f)
|
||||||
.setCodecs("avc1.42C033")
|
.setCodecs("avc1.42C033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING =
|
public static final AssetInfo MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS =
|
||||||
"asset:///media/mp4/long_1080p_videoonly_lowbitrate.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/long_1080p_videoonly_lowbitrate.mp4")
|
||||||
public static final Format MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
.setHeight(1080)
|
.setHeight(1080)
|
||||||
.setFrameRate(30.00f)
|
.setFrameRate(30.00f)
|
||||||
.setCodecs("avc1.42C028")
|
.setCodecs("avc1.42C028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
/** Baseline profile level 3.0 H.264 stream, which should be supported on all devices. */
|
/** Baseline profile level 3.0 H.264 stream, which should be supported on all devices. */
|
||||||
public static final String MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING =
|
public static final AssetInfo MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S =
|
||||||
"asset:///media/mp4/sample_with_increasing_timestamps_320w_240h.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_with_increasing_timestamps_320w_240h.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
public static final Format MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT =
|
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(320)
|
.setWidth(320)
|
||||||
.setHeight(240)
|
.setHeight(240)
|
||||||
.setFrameRate(30.00f)
|
.setFrameRate(30.00f)
|
||||||
.setCodecs("avc1.42C015")
|
.setCodecs("avc1.42C015")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_WITH_SHORTER_AUDIO_URI_STRING =
|
public static final AssetInfo MP4_ASSET_WITH_SHORTER_AUDIO =
|
||||||
"asset:///media/mp4/sample_shorter_audio.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_shorter_audio.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
public static final Format MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT =
|
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(320)
|
.setWidth(320)
|
||||||
.setHeight(240)
|
.setHeight(240)
|
||||||
.setFrameRate(30.00f)
|
.setFrameRate(30.00f)
|
||||||
.setCodecs("avc1.42C015")
|
.setCodecs("avc1.42C015")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_SEF_URI_STRING =
|
public static final AssetInfo MP4_ASSET_SEF =
|
||||||
"asset:///media/mp4/sample_sef_slow_motion.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_sef_slow_motion.mp4")
|
||||||
public static final Format MP4_ASSET_SEF_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(320)
|
.setWidth(320)
|
||||||
.setHeight(240)
|
.setHeight(240)
|
||||||
.setFrameRate(30.472f)
|
.setFrameRate(30.472f)
|
||||||
.setCodecs("avc1.64000D")
|
.setCodecs("avc1.64000D")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_SEF_H265_URI_STRING =
|
public static final AssetInfo MP4_ASSET_SEF_H265 =
|
||||||
"asset:///media/mp4/sample_sef_slow_motion_hevc.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/sample_sef_slow_motion_hevc.mp4")
|
||||||
public static final Format MP4_ASSET_SEF_H265_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
.setHeight(1080)
|
.setHeight(1080)
|
||||||
.setFrameRate(30.01679f)
|
.setFrameRate(30.01679f)
|
||||||
.setCodecs("hvc1.1.6.L120.B0")
|
.setCodecs("hvc1.1.6.L120.B0")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_BT2020_SDR = "asset:///media/mp4/bt2020-sdr.mp4";
|
public static final AssetInfo MP4_ASSET_BT2020_SDR =
|
||||||
public static final Format MP4_ASSET_BT2020_SDR_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/bt2020-sdr.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
@ -253,10 +340,12 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("avc1.640033")
|
.setCodecs("avc1.640033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_1080P_5_SECOND_HLG10 = "asset:///media/mp4/hlg-1080p.mp4";
|
public static final AssetInfo MP4_ASSET_1080P_5_SECOND_HLG10 =
|
||||||
public static final Format MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/hlg-1080p.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
@ -269,9 +358,12 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_HLG)
|
.setColorTransfer(C.COLOR_TRANSFER_HLG)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("hvc1.2.4.L153")
|
.setCodecs("hvc1.2.4.L153")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
public static final String MP4_ASSET_720P_4_SECOND_HDR10 = "asset:///media/mp4/hdr10-720p.mp4";
|
|
||||||
public static final Format MP4_ASSET_720P_4_SECOND_HDR10_FORMAT =
|
public static final AssetInfo MP4_ASSET_720P_4_SECOND_HDR10 =
|
||||||
|
new AssetInfo.Builder("asset:///media/mp4/hdr10-720p.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -284,10 +376,12 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_ST2084)
|
.setColorTransfer(C.COLOR_TRANSFER_ST2084)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("hvc1.2.4.L153")
|
.setCodecs("hvc1.2.4.L153")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_AV1_2_SECOND_HDR10 = "asset:///media/mp4/hdr10-av1.mp4";
|
public static final AssetInfo MP4_ASSET_AV1_2_SECOND_HDR10 =
|
||||||
public static final Format MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/hdr10-av1.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_AV1)
|
.setSampleMimeType(VIDEO_AV1)
|
||||||
.setWidth(720)
|
.setWidth(720)
|
||||||
@ -299,12 +393,14 @@ public final class AndroidTestUtil {
|
|||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
.setColorRange(C.COLOR_RANGE_LIMITED)
|
||||||
.setColorTransfer(C.COLOR_TRANSFER_ST2084)
|
.setColorTransfer(C.COLOR_TRANSFER_ST2084)
|
||||||
.build())
|
.build())
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// This file needs alternative MIME type, meaning the decoder needs to be configured with
|
// This file needs alternative MIME type, meaning the decoder needs to be configured with
|
||||||
// video/hevc instead of video/dolby-vision.
|
// video/hevc instead of video/dolby-vision.
|
||||||
public static final String MP4_ASSET_DOLBY_VISION_HDR = "asset:///media/mp4/dolbyVision-hdr.MOV";
|
public static final AssetInfo MP4_ASSET_DOLBY_VISION_HDR =
|
||||||
public static final Format MP4_ASSET_DOLBY_VISION_HDR_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/dolbyVision-hdr.MOV")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_DOLBY_VISION)
|
.setSampleMimeType(VIDEO_DOLBY_VISION)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -317,57 +413,66 @@ public final class AndroidTestUtil {
|
|||||||
.setColorRange(C.COLOR_RANGE_LIMITED)
|
.setColorRange(C.COLOR_RANGE_LIMITED)
|
||||||
.setColorSpace(C.COLOR_SPACE_BT2020)
|
.setColorSpace(C.COLOR_SPACE_BT2020)
|
||||||
.build())
|
.build())
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_4K60_PORTRAIT_URI_STRING =
|
public static final AssetInfo MP4_ASSET_4K60_PORTRAIT =
|
||||||
"asset:///media/mp4/portrait_4k60.mp4";
|
new AssetInfo.Builder("asset:///media/mp4/portrait_4k60.mp4")
|
||||||
public static final Format MP4_ASSET_4K60_PORTRAIT_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
.setHeight(2160)
|
.setHeight(2160)
|
||||||
.setFrameRate(60.00f)
|
.setFrameRate(60.00f)
|
||||||
.setCodecs("avc1.640033")
|
.setCodecs("avc1.640033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_10_SECONDS_URI_STRING =
|
public static final AssetInfo MP4_REMOTE_10_SECONDS =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/android-screens-10s.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_10_SECONDS_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/android-screens-10s.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
.setHeight(720)
|
.setHeight(720)
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
/** Test clip transcoded from {@link #MP4_REMOTE_10_SECONDS_URI_STRING} with H264 and MP3. */
|
/** Test clip transcoded from {@linkplain #MP4_REMOTE_10_SECONDS with H264 and MP3}. */
|
||||||
public static final String MP4_REMOTE_H264_MP3_URI_STRING =
|
public static final AssetInfo MP4_REMOTE_H264_MP3 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/%20android-screens-10s-h264-mp3.mp4";
|
new AssetInfo.Builder(
|
||||||
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/%20android-screens-10s-h264-mp3.mp4")
|
||||||
public static final Format MP4_REMOTE_H264_MP3_FORMAT =
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
.setHeight(720)
|
.setHeight(720)
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_ASSET_8K24_URI_STRING = "asset:///media/mp4/8k24fps_300ms.mp4";
|
public static final AssetInfo MP4_ASSET_8K24 =
|
||||||
public static final Format MP4_ASSET_8K24_FORMAT =
|
new AssetInfo.Builder("asset:///media/mp4/8k24fps_300ms.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(MimeTypes.VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(7680)
|
.setWidth(7680)
|
||||||
.setHeight(4320)
|
.setHeight(4320)
|
||||||
.setFrameRate(24.00f)
|
.setFrameRate(24.00f)
|
||||||
.setCodecs("hvc1.1.6.L183")
|
.setCodecs("hvc1.1.6.L183")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// The 7 HIGHMOTION files are H264 and AAC.
|
// The 7 HIGHMOTION files are H264 and AAC.
|
||||||
public static final String MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION =
|
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1280w_720h_highmotion.mp4";
|
public static final AssetInfo MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION =
|
||||||
public static final Format MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION_FORMAT =
|
new AssetInfo.Builder(
|
||||||
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1280w_720h_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -375,11 +480,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(8_939_000)
|
.setAverageBitrate(8_939_000)
|
||||||
.setFrameRate(30.075f)
|
.setFrameRate(30.075f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1440W_1440H_5_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_1440W_1440H_5_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1440w_1440h_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1440W_1440H_5_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1440w_1440h_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1440)
|
.setWidth(1440)
|
||||||
@ -387,11 +494,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(17_000_000)
|
.setAverageBitrate(17_000_000)
|
||||||
.setFrameRate(29.97f)
|
.setFrameRate(29.97f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1920W_1080H_5_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_1920W_1080H_5_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1920w_1080h_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1920W_1080H_5_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1920w_1080h_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
@ -399,11 +508,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(17_100_000)
|
.setAverageBitrate(17_100_000)
|
||||||
.setFrameRate(30.037f)
|
.setFrameRate(30.037f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/3840w_2160h_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/3840w_2160h_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
@ -411,11 +522,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(48_300_000)
|
.setAverageBitrate(48_300_000)
|
||||||
.setFrameRate(30.090f)
|
.setFrameRate(30.090f)
|
||||||
.setCodecs("avc1.640033")
|
.setCodecs("avc1.640033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1280W_720H_30_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_1280W_720H_30_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1280w_720h_30s_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1280W_720H_30_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1280w_720h_30s_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -423,11 +536,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(9_962_000)
|
.setAverageBitrate(9_962_000)
|
||||||
.setFrameRate(30.078f)
|
.setFrameRate(30.078f)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1920W_1080H_30_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_1920W_1080H_30_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1920w_1080h_30s_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1920W_1080H_30_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/1920w_1080h_30s_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
@ -435,11 +550,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(15_000_000)
|
.setAverageBitrate(15_000_000)
|
||||||
.setFrameRate(28.561f)
|
.setFrameRate(28.561f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_3840W_2160H_32_SECOND_HIGHMOTION =
|
public static final AssetInfo MP4_REMOTE_3840W_2160H_32_SECOND_HIGHMOTION =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/3840w_2160h_32s_highmotion.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_3840W_2160H_32_SECOND_HIGHMOTION_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/3840w_2160h_32s_highmotion.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
@ -447,99 +564,117 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(47_800_000)
|
.setAverageBitrate(47_800_000)
|
||||||
.setFrameRate(28.414f)
|
.setFrameRate(28.414f)
|
||||||
.setCodecs("avc1.640033")
|
.setCodecs("avc1.640033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_256w_144h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_256w_144h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(256)
|
.setWidth(256)
|
||||||
.setHeight(144)
|
.setHeight(144)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64000C")
|
.setCodecs("avc1.64000C")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_426W_240H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_426W_240H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_426w_240h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_426W_240H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_426w_240h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(426)
|
.setWidth(426)
|
||||||
.setHeight(240)
|
.setHeight(240)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.640015")
|
.setCodecs("avc1.640015")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_640W_360H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_640W_360H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_640w_360h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_640W_360H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_640w_360h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(640)
|
.setWidth(640)
|
||||||
.setHeight(360)
|
.setHeight(360)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001E")
|
.setCodecs("avc1.64001E")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_854w_480h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_downsampled_854w_480h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(854)
|
.setWidth(854)
|
||||||
.setHeight(480)
|
.setHeight(480)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_256w_144h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_256w_144h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(256)
|
.setWidth(256)
|
||||||
.setHeight(144)
|
.setHeight(144)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64000C")
|
.setCodecs("avc1.64000C")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_426W_240H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_426W_240H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_426w_240h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_426W_240H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_426w_240h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(426)
|
.setWidth(426)
|
||||||
.setHeight(240)
|
.setHeight(240)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.640015")
|
.setCodecs("avc1.640015")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_640W_360H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_640W_360H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_640w_360h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_640W_360H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_640w_360h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(640)
|
.setWidth(640)
|
||||||
.setHeight(360)
|
.setHeight(360)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001E")
|
.setCodecs("avc1.64001E")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
public static final AssetInfo MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_854w_480h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_downsampled_854w_480h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(854)
|
.setWidth(854)
|
||||||
.setHeight(480)
|
.setHeight(480)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3 =
|
public static final AssetInfo MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SonyXperiaXZ3_640w_480h_31s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SonyXperiaXZ3_640w_480h_31s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(640)
|
.setWidth(640)
|
||||||
@ -547,11 +682,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(3_578_000)
|
.setAverageBitrate(3_578_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001E")
|
.setCodecs("avc1.64001E")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1280W_720H_30_SECOND_ROOF_ONEPLUSNORD2 =
|
public static final AssetInfo MP4_REMOTE_1280W_720H_30_SECOND_ROOF_ONEPLUSNORD2 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_1280w_720h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1280W_720H_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_1280w_720h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -559,11 +696,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(8_966_000)
|
.setAverageBitrate(8_966_000)
|
||||||
.setFrameRate(29.763f)
|
.setFrameRate(29.763f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1280W_720H_32_SECOND_ROOF_REDMINOTE9 =
|
public static final AssetInfo MP4_REMOTE_1280W_720H_32_SECOND_ROOF_REDMINOTE9 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_1280w_720h_32s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1280W_720H_32_SECOND_ROOF_REDMINOTE9_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_1280w_720h_32s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1280)
|
.setWidth(1280)
|
||||||
@ -571,11 +710,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(14_100_000)
|
.setAverageBitrate(14_100_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setCodecs("avc1.64001F")
|
.setCodecs("avc1.64001F")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1440W_1440H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
public static final AssetInfo MP4_REMOTE_1440W_1440H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_1440hw_31s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1440W_1440H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_1440hw_31s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1440)
|
.setWidth(1440)
|
||||||
@ -583,11 +724,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(16_300_000)
|
.setAverageBitrate(16_300_000)
|
||||||
.setFrameRate(25.931f)
|
.setFrameRate(25.931f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_ONEPLUSNORD2 =
|
public static final AssetInfo MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_ONEPLUSNORD2 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_1920w_1080h_60fr_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_1920w_1080h_60fr_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
@ -595,11 +738,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(20_000_000)
|
.setAverageBitrate(20_000_000)
|
||||||
.setFrameRate(59.94f)
|
.setFrameRate(59.94f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_REDMINOTE9 =
|
public static final AssetInfo MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_REDMINOTE9 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_1920w_1080h_60fps_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_REDMINOTE9_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_1920w_1080h_60fps_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(1920)
|
.setWidth(1920)
|
||||||
@ -607,11 +752,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(20_100_000)
|
.setAverageBitrate(20_100_000)
|
||||||
.setFrameRate(61.069f)
|
.setFrameRate(61.069f)
|
||||||
.setCodecs("avc1.64002A")
|
.setCodecs("avc1.64002A")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_2400W_1080H_34_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
public static final AssetInfo MP4_REMOTE_2400W_1080H_34_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_2400w_1080h_34s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_2400W_1080H_34_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_2400w_1080h_34s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(2400)
|
.setWidth(2400)
|
||||||
@ -619,11 +766,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(29_500_000)
|
.setAverageBitrate(29_500_000)
|
||||||
.setFrameRate(27.472f)
|
.setFrameRate(27.472f)
|
||||||
.setCodecs("hvc1.2.4.L153.B0")
|
.setCodecs("hvc1.2.4.L153.B0")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_ONEPLUSNORD2 =
|
public static final AssetInfo MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_ONEPLUSNORD2 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_3840w_2160h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/OnePlusNord2_3840w_2160h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
@ -631,11 +780,13 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(49_800_000)
|
.setAverageBitrate(49_800_000)
|
||||||
.setFrameRate(29.802f)
|
.setFrameRate(29.802f)
|
||||||
.setCodecs("avc1.640028")
|
.setCodecs("avc1.640028")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_REDMINOTE9 =
|
public static final AssetInfo MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_REDMINOTE9 =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_3840w_2160h_30s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_REDMINOTE9_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/RedmiNote9_3840w_2160h_30s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H264)
|
.setSampleMimeType(VIDEO_H264)
|
||||||
.setWidth(3840)
|
.setWidth(3840)
|
||||||
@ -649,11 +800,13 @@ public final class AndroidTestUtil {
|
|||||||
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
.setColorTransfer(C.COLOR_TRANSFER_SDR)
|
||||||
.build())
|
.build())
|
||||||
.setCodecs("avc1.640033")
|
.setCodecs("avc1.640033")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
public static final AssetInfo MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G =
|
||||||
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_7680w_4320h_31s_roof.mp4";
|
new AssetInfo.Builder(
|
||||||
public static final Format MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT =
|
"https://storage.googleapis.com/exoplayer-test-media-1/mp4/device_videos/SsS20Ultra5G_7680w_4320h_31s_roof.mp4")
|
||||||
|
.setVideoFormat(
|
||||||
new Format.Builder()
|
new Format.Builder()
|
||||||
.setSampleMimeType(VIDEO_H265)
|
.setSampleMimeType(VIDEO_H265)
|
||||||
.setWidth(7680)
|
.setWidth(7680)
|
||||||
@ -661,9 +814,11 @@ public final class AndroidTestUtil {
|
|||||||
.setAverageBitrate(79_900_000)
|
.setAverageBitrate(79_900_000)
|
||||||
.setFrameRate(23.163f)
|
.setFrameRate(23.163f)
|
||||||
.setCodecs("hvc1.1.6.L183.B0")
|
.setCodecs("hvc1.1.6.L183.B0")
|
||||||
|
.build())
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final String MP3_ASSET_URI_STRING = "asset:///media/mp3/test-cbr-info-header.mp3";
|
public static final AssetInfo MP3_ASSET =
|
||||||
|
new AssetInfo.Builder("asset:///media/mp3/test-cbr-info-header.mp3").build();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates the GL objects needed to set up a GL environment including an {@link EGLDisplay} and an
|
* Creates the GL objects needed to set up a GL environment including an {@link EGLDisplay} and an
|
||||||
@ -851,90 +1006,6 @@ public final class AndroidTestUtil {
|
|||||||
throw new AssumptionViolatedException(skipReason);
|
throw new AssumptionViolatedException(skipReason);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the {@link Format} of the given test asset.
|
|
||||||
*
|
|
||||||
* @param uri The string {@code uri} to the test file. The {@code uri} must be defined in this
|
|
||||||
* file.
|
|
||||||
* @throws IllegalArgumentException If the given {@code uri} is not defined in this file.
|
|
||||||
*/
|
|
||||||
public static Format getFormatForTestFile(String uri) {
|
|
||||||
switch (uri) {
|
|
||||||
case MP4_ASSET_URI_STRING:
|
|
||||||
return MP4_ASSET_FORMAT;
|
|
||||||
case MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING:
|
|
||||||
return MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT;
|
|
||||||
case MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING:
|
|
||||||
return MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT;
|
|
||||||
case MP4_ASSET_SEF_URI_STRING:
|
|
||||||
return MP4_ASSET_SEF_FORMAT;
|
|
||||||
case MP4_ASSET_SEF_H265_URI_STRING:
|
|
||||||
return MP4_ASSET_SEF_H265_FORMAT;
|
|
||||||
case MP4_ASSET_4K60_PORTRAIT_URI_STRING:
|
|
||||||
return MP4_ASSET_4K60_PORTRAIT_FORMAT;
|
|
||||||
case MP4_REMOTE_10_SECONDS_URI_STRING:
|
|
||||||
return MP4_REMOTE_10_SECONDS_FORMAT;
|
|
||||||
case MP4_REMOTE_H264_MP3_URI_STRING:
|
|
||||||
return MP4_REMOTE_H264_MP3_FORMAT;
|
|
||||||
case MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_426W_240H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_426W_240H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_640W_360H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_640W_360H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_426W_240H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_426W_240H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_640W_360H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_640W_360H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED:
|
|
||||||
return MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED_FORMAT;
|
|
||||||
case MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3:
|
|
||||||
return MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3_FORMAT;
|
|
||||||
case MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_1280W_720H_30_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_1280W_720H_30_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_1280W_720H_30_SECOND_ROOF_ONEPLUSNORD2:
|
|
||||||
return MP4_REMOTE_1280W_720H_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT;
|
|
||||||
case MP4_REMOTE_1280W_720H_32_SECOND_ROOF_REDMINOTE9:
|
|
||||||
return MP4_REMOTE_1280W_720H_32_SECOND_ROOF_REDMINOTE9_FORMAT;
|
|
||||||
case MP4_REMOTE_1440W_1440H_5_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_1440W_1440H_5_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_1440W_1440H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G:
|
|
||||||
return MP4_REMOTE_1440W_1440H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT;
|
|
||||||
case MP4_REMOTE_1920W_1080H_5_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_1920W_1080H_5_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_1920W_1080H_30_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_1920W_1080H_30_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_ONEPLUSNORD2:
|
|
||||||
return MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT;
|
|
||||||
case MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_REDMINOTE9:
|
|
||||||
return MP4_REMOTE_1920W_1080H_60_FPS_30_SECOND_ROOF_REDMINOTE9_FORMAT;
|
|
||||||
case MP4_REMOTE_2400W_1080H_34_SECOND_ROOF_SAMSUNGS20ULTRA5G:
|
|
||||||
return MP4_REMOTE_2400W_1080H_34_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT;
|
|
||||||
case MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_3840W_2160H_32_SECOND_HIGHMOTION:
|
|
||||||
return MP4_REMOTE_3840W_2160H_32_SECOND_HIGHMOTION_FORMAT;
|
|
||||||
case MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_ONEPLUSNORD2:
|
|
||||||
return MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_ONEPLUSNORD2_FORMAT;
|
|
||||||
case MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_REDMINOTE9:
|
|
||||||
return MP4_REMOTE_3840W_2160H_30_SECOND_ROOF_REDMINOTE9_FORMAT;
|
|
||||||
case MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G:
|
|
||||||
return MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G_FORMAT;
|
|
||||||
case BT601_MP4_ASSET_URI_STRING:
|
|
||||||
return BT601_MP4_ASSET_FORMAT;
|
|
||||||
case BT601_MOV_ASSET_URI_STRING:
|
|
||||||
return BT601_MOV_ASSET_FORMAT;
|
|
||||||
default:
|
|
||||||
throw new IllegalArgumentException("The format for the given uri is not found.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean canDecode(Format format) {
|
private static boolean canDecode(Format format) {
|
||||||
// Check decoding capability in the same way as the default decoder factory.
|
// Check decoding capability in the same way as the default decoder factory.
|
||||||
MediaFormat mediaFormat = MediaFormatUtil.createMediaFormatFromFormat(format);
|
MediaFormat mediaFormat = MediaFormatUtil.createMediaFormatFromFormat(format);
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.common.PlaybackException.ERROR_CODE_DECODER_INIT_FAILED;
|
import static androidx.media3.common.PlaybackException.ERROR_CODE_DECODER_INIT_FAILED;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static com.google.common.util.concurrent.Futures.immediateFuture;
|
import static com.google.common.util.concurrent.Futures.immediateFuture;
|
||||||
import static org.junit.Assert.assertThrows;
|
import static org.junit.Assert.assertThrows;
|
||||||
@ -122,7 +122,7 @@ public class CompositionPlayerTest {
|
|||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
@ -142,7 +142,7 @@ public class CompositionPlayerTest {
|
|||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
@ -166,7 +166,7 @@ public class CompositionPlayerTest {
|
|||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
@ -188,7 +188,7 @@ public class CompositionPlayerTest {
|
|||||||
compositionPlayer.setComposition(
|
compositionPlayer.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build()))
|
.build()))
|
||||||
.build());
|
.build());
|
||||||
@ -232,7 +232,7 @@ public class CompositionPlayerTest {
|
|||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(1_000)
|
.setImageDurationMs(1_000)
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
@ -273,7 +273,7 @@ public class CompositionPlayerTest {
|
|||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setMimeType(MimeTypes.APPLICATION_EXTERNALLY_LOADED_IMAGE)
|
.setMimeType(MimeTypes.APPLICATION_EXTERNALLY_LOADED_IMAGE)
|
||||||
.setImageDurationMs(1_000)
|
.setImageDurationMs(1_000)
|
||||||
.build())
|
.build())
|
||||||
@ -292,7 +292,7 @@ public class CompositionPlayerTest {
|
|||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(500)
|
.setImageDurationMs(500)
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(500_000)
|
.setDurationUs(500_000)
|
||||||
@ -320,14 +320,14 @@ public class CompositionPlayerTest {
|
|||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(500)
|
.setImageDurationMs(500)
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(500_000)
|
.setDurationUs(500_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -351,13 +351,13 @@ public class CompositionPlayerTest {
|
|||||||
public void composition_videoThenImage() throws Exception {
|
public void composition_videoThenImage() throws Exception {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(500)
|
.setImageDurationMs(500)
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(500_000)
|
.setDurationUs(500_000)
|
||||||
@ -383,7 +383,7 @@ public class CompositionPlayerTest {
|
|||||||
public void playback_videoSinkProviderFails_playerRaisesError() {
|
public void playback_videoSinkProviderFails_playerRaisesError() {
|
||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -420,7 +420,7 @@ public class CompositionPlayerTest {
|
|||||||
throws Exception {
|
throws Exception {
|
||||||
PlayerTestListener playerTestListener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener playerTestListener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.build();
|
.build();
|
||||||
instrumentation.runOnMainSync(
|
instrumentation.runOnMainSync(
|
||||||
|
@ -17,8 +17,7 @@
|
|||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FRAME_COUNT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -70,18 +69,20 @@ public class ForceEndOfStreamTest {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
int framesToSkip = 4;
|
int framesToSkip = 4;
|
||||||
|
|
||||||
ExportTestResult testResult =
|
ExportTestResult testResult =
|
||||||
new TransformerAndroidTestRunner.Builder(context, buildTransformer(context, framesToSkip))
|
new TransformerAndroidTestRunner.Builder(context, buildTransformer(context, framesToSkip))
|
||||||
.build()
|
.build()
|
||||||
.run(
|
.run(testId, createComposition(MediaItem.fromUri(MP4_ASSET.uri)));
|
||||||
testId, createComposition(MediaItem.fromUri(AndroidTestUtil.MP4_ASSET_URI_STRING)));
|
|
||||||
|
|
||||||
assertThat(testResult.analysisException).isNull();
|
assertThat(testResult.analysisException).isNull();
|
||||||
assertThat(testResult.exportResult.videoFrameCount)
|
assertThat(testResult.exportResult.videoFrameCount)
|
||||||
.isEqualTo(MP4_ASSET_FRAME_COUNT - framesToSkip);
|
.isEqualTo(MP4_ASSET.videoFrameCount - framesToSkip);
|
||||||
assertThat(new File(testResult.filePath).length()).isGreaterThan(0);
|
assertThat(new File(testResult.filePath).length()).isGreaterThan(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,17 +92,19 @@ public class ForceEndOfStreamTest {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
|
|
||||||
ExportTestResult testResult =
|
ExportTestResult testResult =
|
||||||
new TransformerAndroidTestRunner.Builder(
|
new TransformerAndroidTestRunner.Builder(
|
||||||
context, buildTransformer(context, /* framesToSkip= */ 0))
|
context, buildTransformer(context, /* framesToSkip= */ 0))
|
||||||
.build()
|
.build()
|
||||||
.run(
|
.run(testId, createComposition(MediaItem.fromUri(MP4_ASSET.uri)));
|
||||||
testId, createComposition(MediaItem.fromUri(AndroidTestUtil.MP4_ASSET_URI_STRING)));
|
|
||||||
|
|
||||||
assertThat(testResult.analysisException).isNull();
|
assertThat(testResult.analysisException).isNull();
|
||||||
assertThat(testResult.exportResult.videoFrameCount).isEqualTo(MP4_ASSET_FRAME_COUNT);
|
assertThat(testResult.exportResult.videoFrameCount).isEqualTo(MP4_ASSET.videoFrameCount);
|
||||||
assertThat(new File(testResult.filePath).length()).isGreaterThan(0);
|
assertThat(new File(testResult.filePath).length()).isGreaterThan(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,7 +123,7 @@ public class ForceEndOfStreamTest {
|
|||||||
.setAssetLoaderFactory(
|
.setAssetLoaderFactory(
|
||||||
new DefaultAssetLoaderFactory(
|
new DefaultAssetLoaderFactory(
|
||||||
context,
|
context,
|
||||||
new FrameDroppingDecoderFactory(context, MP4_ASSET_FRAME_COUNT, framesToSkip),
|
new FrameDroppingDecoderFactory(context, MP4_ASSET.videoFrameCount, framesToSkip),
|
||||||
Clock.DEFAULT))
|
Clock.DEFAULT))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
@ -17,13 +17,10 @@
|
|||||||
|
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.BT601_MP4_ASSET_FRAME_COUNT;
|
import static androidx.media3.transformer.AndroidTestUtil.BT601_MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.BT601_MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FRAME_COUNT;
|
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.getFormatForTestFile;
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -36,6 +33,7 @@ import androidx.media3.common.MimeTypes;
|
|||||||
import androidx.media3.common.util.Assertions;
|
import androidx.media3.common.util.Assertions;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.effect.Presentation;
|
import androidx.media3.effect.Presentation;
|
||||||
|
import androidx.media3.transformer.AndroidTestUtil.AssetInfo;
|
||||||
import androidx.test.core.app.ApplicationProvider;
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
import com.google.common.base.Splitter;
|
import com.google.common.base.Splitter;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
@ -60,13 +58,11 @@ import org.junit.runners.Parameterized.Parameters;
|
|||||||
@RunWith(Parameterized.class)
|
@RunWith(Parameterized.class)
|
||||||
public class ParameterizedInputSequenceExportTest {
|
public class ParameterizedInputSequenceExportTest {
|
||||||
private static final ImageItemConfig PNG_ITEM =
|
private static final ImageItemConfig PNG_ITEM =
|
||||||
new ImageItemConfig(PNG_ASSET_URI_STRING, /* frameCount= */ 34);
|
new ImageItemConfig(PNG_ASSET.uri, /* frameCount= */ 34);
|
||||||
private static final ImageItemConfig JPG_ITEM =
|
private static final ImageItemConfig JPG_ITEM =
|
||||||
new ImageItemConfig(JPG_ASSET_URI_STRING, /* frameCount= */ 41);
|
new ImageItemConfig(JPG_ASSET.uri, /* frameCount= */ 41);
|
||||||
private static final VideoItemConfig BT709_ITEM =
|
private static final VideoItemConfig BT709_ITEM = new VideoItemConfig(MP4_ASSET);
|
||||||
new VideoItemConfig(MP4_ASSET_URI_STRING, MP4_ASSET_FRAME_COUNT);
|
private static final VideoItemConfig BT601_ITEM = new VideoItemConfig(BT601_MP4_ASSET);
|
||||||
private static final VideoItemConfig BT601_ITEM =
|
|
||||||
new VideoItemConfig(BT601_MP4_ASSET_URI_STRING, BT601_MP4_ASSET_FRAME_COUNT);
|
|
||||||
|
|
||||||
@Parameters(name = "{0}")
|
@Parameters(name = "{0}")
|
||||||
public static ImmutableList<SequenceConfig> params() {
|
public static ImmutableList<SequenceConfig> params() {
|
||||||
@ -264,8 +260,8 @@ public class ParameterizedInputSequenceExportTest {
|
|||||||
* <p>Audio is removed and a {@link Presentation} of specified {@code height=360}.
|
* <p>Audio is removed and a {@link Presentation} of specified {@code height=360}.
|
||||||
*/
|
*/
|
||||||
private static final class VideoItemConfig extends ItemConfig {
|
private static final class VideoItemConfig extends ItemConfig {
|
||||||
public VideoItemConfig(String uri, int frameCount) {
|
public VideoItemConfig(AssetInfo asset) {
|
||||||
super(uri, frameCount, getFormatForTestFile(uri), getFormatForTestFile(uri));
|
super(asset.uri, asset.videoFrameCount, asset.videoFormat, asset.videoFormat);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects;
|
import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap;
|
import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@ -108,8 +108,7 @@ public class RawAssetLoaderAndroidTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoTranscoding_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
public void videoTranscoding_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Bitmap bitmap =
|
Bitmap bitmap = new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET.uri)).get();
|
||||||
new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET_URI_STRING)).get();
|
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
new DefaultVideoFrameProcessor.Factory.Builder()
|
new DefaultVideoFrameProcessor.Factory.Builder()
|
||||||
.setGlObjectsProvider(new DefaultGlObjectsProvider(createOpenGlObjects()))
|
.setGlObjectsProvider(new DefaultGlObjectsProvider(createOpenGlObjects()))
|
||||||
@ -152,8 +151,7 @@ public class RawAssetLoaderAndroidTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoEditing_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
public void videoEditing_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Bitmap bitmap =
|
Bitmap bitmap = new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET.uri)).get();
|
||||||
new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET_URI_STRING)).get();
|
|
||||||
EGLContext currentContext = createOpenGlObjects();
|
EGLContext currentContext = createOpenGlObjects();
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
new DefaultVideoFrameProcessor.Factory.Builder()
|
new DefaultVideoFrameProcessor.Factory.Builder()
|
||||||
@ -199,8 +197,7 @@ public class RawAssetLoaderAndroidTest {
|
|||||||
@Test
|
@Test
|
||||||
public void audioAndVideoTranscoding_withRawData_completesWithCorrectFrameCountAndDuration()
|
public void audioAndVideoTranscoding_withRawData_completesWithCorrectFrameCountAndDuration()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Bitmap bitmap =
|
Bitmap bitmap = new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET.uri)).get();
|
||||||
new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET_URI_STRING)).get();
|
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
new DefaultVideoFrameProcessor.Factory.Builder()
|
new DefaultVideoFrameProcessor.Factory.Builder()
|
||||||
.setGlObjectsProvider(new DefaultGlObjectsProvider(createOpenGlObjects()))
|
.setGlObjectsProvider(new DefaultGlObjectsProvider(createOpenGlObjects()))
|
||||||
|
@ -18,19 +18,16 @@ package androidx.media3.transformer;
|
|||||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.common.util.Util.isRunningOnEmulator;
|
import static androidx.media3.common.util.Util.isRunningOnEmulator;
|
||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP3_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP3_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_SHORTER_AUDIO;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_180;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_SHORTER_AUDIO_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_270;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_180_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_270_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects;
|
import static androidx.media3.transformer.AndroidTestUtil.createOpenGlObjects;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap;
|
import static androidx.media3.transformer.AndroidTestUtil.generateTextureFromBitmap;
|
||||||
@ -133,16 +130,19 @@ public class TransformerEndToEndTest {
|
|||||||
public void compositionEditing_withThreeSequences_completes() throws Exception {
|
public void compositionEditing_withThreeSequences_completes() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
EditedMediaItem audioVideoItem =
|
EditedMediaItem audioVideoItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
ImmutableList.of(createSonic(/* pitch= */ 2f)),
|
ImmutableList.of(createSonic(/* pitch= */ 2f)),
|
||||||
ImmutableList.of(RgbFilter.createInvertedFilter())))
|
ImmutableList.of(RgbFilter.createInvertedFilter())))
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem imageItem =
|
EditedMediaItem imageItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET.uri))
|
||||||
.setDurationUs(1_500_000)
|
.setDurationUs(1_500_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
@ -151,7 +151,7 @@ public class TransformerEndToEndTest {
|
|||||||
new EditedMediaItemSequence(audioVideoItem, imageItem, audioVideoItem);
|
new EditedMediaItemSequence(audioVideoItem, imageItem, audioVideoItem);
|
||||||
|
|
||||||
EditedMediaItem.Builder audioBuilder =
|
EditedMediaItem.Builder audioBuilder =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)).setRemoveVideo(true);
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri)).setRemoveVideo(true);
|
||||||
|
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
@ -200,9 +200,12 @@ public class TransformerEndToEndTest {
|
|||||||
public void compositionEditing_withLongLoopingSequence_completes() throws Exception {
|
public void compositionEditing_withLongLoopingSequence_completes() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
EditedMediaItem imageItem =
|
EditedMediaItem imageItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET.uri))
|
||||||
.setDurationUs(500_000)
|
.setDurationUs(500_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
@ -210,7 +213,7 @@ public class TransformerEndToEndTest {
|
|||||||
EditedMediaItemSequence imageSequence = new EditedMediaItemSequence(imageItem);
|
EditedMediaItemSequence imageSequence = new EditedMediaItemSequence(imageItem);
|
||||||
|
|
||||||
EditedMediaItem.Builder audioBuilder =
|
EditedMediaItem.Builder audioBuilder =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING)).setRemoveVideo(true);
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri)).setRemoveVideo(true);
|
||||||
|
|
||||||
EditedMediaItemSequence loopingAudioSequence =
|
EditedMediaItemSequence loopingAudioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
@ -245,7 +248,7 @@ public class TransformerEndToEndTest {
|
|||||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||||
int expectedFrameCount = 40;
|
int expectedFrameCount = 40;
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET.uri))
|
||||||
.setDurationUs(C.MICROS_PER_SECOND)
|
.setDurationUs(C.MICROS_PER_SECOND)
|
||||||
.setFrameRate(expectedFrameCount)
|
.setFrameRate(expectedFrameCount)
|
||||||
.setEffects(effects)
|
.setEffects(effects)
|
||||||
@ -268,7 +271,7 @@ public class TransformerEndToEndTest {
|
|||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
int expectedFrameCount = 40;
|
int expectedFrameCount = 40;
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET.uri))
|
||||||
.setDurationUs(C.MICROS_PER_SECOND)
|
.setDurationUs(C.MICROS_PER_SECOND)
|
||||||
.setFrameRate(expectedFrameCount)
|
.setFrameRate(expectedFrameCount)
|
||||||
.build();
|
.build();
|
||||||
@ -287,8 +290,7 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoEditing_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
public void videoEditing_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Bitmap bitmap =
|
Bitmap bitmap = new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET.uri)).get();
|
||||||
new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET_URI_STRING)).get();
|
|
||||||
int expectedFrameCount = 2;
|
int expectedFrameCount = 2;
|
||||||
EGLContext currentContext = createOpenGlObjects();
|
EGLContext currentContext = createOpenGlObjects();
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
@ -342,8 +344,7 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoTranscoding_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
public void videoTranscoding_withTextureInput_completesWithCorrectFrameCountAndDuration()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Bitmap bitmap =
|
Bitmap bitmap = new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET.uri)).get();
|
||||||
new DataSourceBitmapLoader(context).loadBitmap(Uri.parse(PNG_ASSET_URI_STRING)).get();
|
|
||||||
int expectedFrameCount = 2;
|
int expectedFrameCount = 2;
|
||||||
EGLContext currentContext = createOpenGlObjects();
|
EGLContext currentContext = createOpenGlObjects();
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
@ -394,13 +395,16 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoEditing_completesWithConsistentFrameCount() throws Exception {
|
public void videoEditing_completesWithConsistentFrameCount() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET.uri));
|
||||||
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
||||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
@ -429,13 +433,13 @@ public class TransformerEndToEndTest {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem image1 =
|
EditedMediaItem image1 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET.uri))
|
||||||
.setDurationUs(100_000)
|
.setDurationUs(100_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
int image1FrameCount = 3;
|
int image1FrameCount = 3;
|
||||||
EditedMediaItem image2 =
|
EditedMediaItem image2 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ASSET.uri))
|
||||||
.setDurationUs(200_000)
|
.setDurationUs(200_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
@ -476,13 +480,16 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoEditing_effectsOverTime_completesWithConsistentFrameCount() throws Exception {
|
public void videoEditing_effectsOverTime_completesWithConsistentFrameCount() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET.uri));
|
||||||
ImmutableList<Effect> videoEffects =
|
ImmutableList<Effect> videoEffects =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new TimestampWrapper(
|
new TimestampWrapper(
|
||||||
@ -512,13 +519,16 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoOnly_completesWithConsistentDuration() throws Exception {
|
public void videoOnly_completesWithConsistentDuration() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(
|
.setEncoderFactory(
|
||||||
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
new DefaultEncoderFactory.Builder(context).setEnableFallback(false).build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET.uri));
|
||||||
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
ImmutableList<Effect> videoEffects = ImmutableList.of(Presentation.createForHeight(480));
|
||||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
@ -539,14 +549,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
long clippingStartMs = 10_000;
|
long clippingStartMs = 10_000;
|
||||||
long clippingEndMs = 11_000;
|
long clippingEndMs = 11_000;
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -570,14 +580,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
long clippingStartMs = 10_000;
|
long clippingStartMs = 10_000;
|
||||||
long clippingEndMs = 11_000;
|
long clippingEndMs = 11_000;
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -609,8 +619,8 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
long clippingStartMs = 10_000;
|
long clippingStartMs = 10_000;
|
||||||
@ -619,7 +629,7 @@ public class TransformerEndToEndTest {
|
|||||||
// available to match the csd.
|
// available to match the csd.
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -647,8 +657,8 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
long clippingStartMs = 10_000;
|
long clippingStartMs = 10_000;
|
||||||
@ -657,7 +667,7 @@ public class TransformerEndToEndTest {
|
|||||||
// fallback. This is because its csd doesn't match any known phone decoder.
|
// fallback. This is because its csd doesn't match any known phone decoder.
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -693,15 +703,15 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
long clippingStartMs = 10_000;
|
long clippingStartMs = 10_000;
|
||||||
long clippingEndMs = 11_000;
|
long clippingEndMs = 11_000;
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -729,14 +739,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
long clippingStartMs = 14_500;
|
long clippingStartMs = 14_500;
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
.setUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartMs)
|
.setStartPositionMs(clippingStartMs)
|
||||||
@ -770,7 +780,7 @@ public class TransformerEndToEndTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -806,7 +816,7 @@ public class TransformerEndToEndTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_270_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION_270.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -843,7 +853,7 @@ public class TransformerEndToEndTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_180_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION_180.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -880,7 +890,7 @@ public class TransformerEndToEndTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -927,7 +937,7 @@ public class TransformerEndToEndTest {
|
|||||||
}
|
}
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -973,7 +983,7 @@ public class TransformerEndToEndTest {
|
|||||||
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setEffects(effects)
|
.setEffects(effects)
|
||||||
.build();
|
.build();
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -1010,7 +1020,7 @@ public class TransformerEndToEndTest {
|
|||||||
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING))
|
MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri))
|
||||||
.setEffects(effects)
|
.setEffects(effects)
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
@ -1033,13 +1043,16 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void videoEncoderFormatUnsupported_completesWithError() throws Exception {
|
public void videoEncoderFormatUnsupported_completesWithError() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new VideoUnsupportedEncoderFactory(context))
|
.setEncoderFactory(new VideoUnsupportedEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -1062,14 +1075,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
ImmutableList<Effect> videoEffects =
|
ImmutableList<Effect> videoEffects =
|
||||||
ImmutableList.of(new SpeedChangeEffect(1.5f), new SpeedChangeEffect(2f));
|
ImmutableList.of(new SpeedChangeEffect(1.5f), new SpeedChangeEffect(2f));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)))
|
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)))
|
||||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
@ -1092,13 +1105,13 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
ImmutableList<Effect> videoEffects = ImmutableList.of(new SpeedChangeEffect(1.5f));
|
ImmutableList<Effect> videoEffects = ImmutableList.of(new SpeedChangeEffect(1.5f));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)))
|
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)))
|
||||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
@ -1119,11 +1132,13 @@ public class TransformerEndToEndTest {
|
|||||||
public void audioVideoTranscodedFromDifferentSequences_producesExpectedResult() throws Exception {
|
public void audioVideoTranscodedFromDifferentSequences_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(createSonic(1.2f));
|
ImmutableList<AudioProcessor> audioProcessors = ImmutableList.of(createSonic(1.2f));
|
||||||
ImmutableList<Effect> videoEffects = ImmutableList.of(RgbFilter.createGrayscaleFilter());
|
ImmutableList<Effect> videoEffects = ImmutableList.of(RgbFilter.createGrayscaleFilter());
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
.setEffects(new Effects(audioProcessors, videoEffects))
|
.setEffects(new Effects(audioProcessors, videoEffects))
|
||||||
@ -1166,15 +1181,17 @@ public class TransformerEndToEndTest {
|
|||||||
public void loopingTranscodedAudio_producesExpectedResult() throws Exception {
|
public void loopingTranscodedAudio_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET.uri)).build();
|
||||||
EditedMediaItemSequence loopingAudioSequence =
|
EditedMediaItemSequence loopingAudioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem), /* isLooping= */ true);
|
ImmutableList.of(audioEditedMediaItem, audioEditedMediaItem), /* isLooping= */ true);
|
||||||
EditedMediaItem videoEditedMediaItem =
|
EditedMediaItem videoEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri))
|
||||||
MediaItem.fromUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING))
|
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItemSequence videoSequence =
|
EditedMediaItemSequence videoSequence =
|
||||||
@ -1206,16 +1223,17 @@ public class TransformerEndToEndTest {
|
|||||||
public void loopingTranscodedVideo_producesExpectedResult() throws Exception {
|
public void loopingTranscodedVideo_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET.uri)).build();
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
||||||
EditedMediaItem videoEditedMediaItem =
|
EditedMediaItem videoEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri)).setRemoveAudio(true).build();
|
||||||
.setRemoveAudio(true)
|
|
||||||
.build();
|
|
||||||
EditedMediaItemSequence loopingVideoSequence =
|
EditedMediaItemSequence loopingVideoSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem), /* isLooping= */ true);
|
ImmutableList.of(videoEditedMediaItem, videoEditedMediaItem), /* isLooping= */ true);
|
||||||
@ -1244,12 +1262,12 @@ public class TransformerEndToEndTest {
|
|||||||
public void loopingImage_producesExpectedResult() throws Exception {
|
public void loopingImage_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET.uri)).build();
|
||||||
EditedMediaItemSequence audioSequence =
|
EditedMediaItemSequence audioSequence =
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
audioEditedMediaItem, audioEditedMediaItem, audioEditedMediaItem);
|
||||||
EditedMediaItem imageEditedMediaItem =
|
EditedMediaItem imageEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET.uri))
|
||||||
.setDurationUs(1_000_000)
|
.setDurationUs(1_000_000)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
@ -1281,10 +1299,10 @@ public class TransformerEndToEndTest {
|
|||||||
public void loopingImage_loopingSequenceIsLongest_producesExpectedResult() throws Exception {
|
public void loopingImage_loopingSequenceIsLongest_producesExpectedResult() throws Exception {
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem audioEditedMediaItem =
|
EditedMediaItem audioEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET_URI_STRING)).build();
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP3_ASSET.uri)).build();
|
||||||
EditedMediaItemSequence audioSequence = new EditedMediaItemSequence(audioEditedMediaItem);
|
EditedMediaItemSequence audioSequence = new EditedMediaItemSequence(audioEditedMediaItem);
|
||||||
EditedMediaItem imageEditedMediaItem =
|
EditedMediaItem imageEditedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET.uri))
|
||||||
.setDurationUs(1_050_000)
|
.setDurationUs(1_050_000)
|
||||||
.setFrameRate(20)
|
.setFrameRate(20)
|
||||||
.build();
|
.build();
|
||||||
@ -1317,7 +1335,7 @@ public class TransformerEndToEndTest {
|
|||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
ImmutableList.of(audioFormatTracker.createTeeAudioProcessor()),
|
ImmutableList.of(audioFormatTracker.createTeeAudioProcessor()),
|
||||||
@ -1341,7 +1359,7 @@ public class TransformerEndToEndTest {
|
|||||||
channelMixingAudioProcessor.putChannelMixingMatrix(
|
channelMixingAudioProcessor.putChannelMixingMatrix(
|
||||||
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 2));
|
ChannelMixingMatrix.create(/* inputChannelCount= */ 1, /* outputChannelCount= */ 2));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
@ -1360,7 +1378,7 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void audioComposition_noEffects_transmuxes() throws Exception {
|
public void audioComposition_noEffects_transmuxes() throws Exception {
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
@ -1378,7 +1396,7 @@ public class TransformerEndToEndTest {
|
|||||||
@Test
|
@Test
|
||||||
public void audioComposition_compositionEffects_transcodes() throws Exception {
|
public void audioComposition_compositionEffects_transcodes() throws Exception {
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
@ -1401,14 +1419,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
||||||
AtomicInteger audioBytesSeen = new AtomicInteger(/* initialValue= */ 0);
|
AtomicInteger audioBytesSeen = new AtomicInteger(/* initialValue= */ 0);
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)))
|
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
@ -1432,7 +1450,7 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
||||||
AtomicInteger videoFramesSeen = new AtomicInteger(/* initialValue= */ 0);
|
AtomicInteger videoFramesSeen = new AtomicInteger(/* initialValue= */ 0);
|
||||||
@ -1441,7 +1459,7 @@ public class TransformerEndToEndTest {
|
|||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)))
|
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
@ -1465,7 +1483,7 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
Transformer transformer = ExperimentalAnalyzerModeFactory.buildAnalyzer(context);
|
||||||
AtomicInteger audioBytesSeen = new AtomicInteger(/* initialValue= */ 0);
|
AtomicInteger audioBytesSeen = new AtomicInteger(/* initialValue= */ 0);
|
||||||
@ -1475,7 +1493,7 @@ public class TransformerEndToEndTest {
|
|||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)))
|
Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
ImmutableList.of(createByteCountingAudioProcessor(audioBytesSeen)),
|
ImmutableList.of(createByteCountingAudioProcessor(audioBytesSeen)),
|
||||||
@ -1500,13 +1518,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_FORMAT
|
/* outputFormat= */ MP4_ASSET
|
||||||
|
.videoFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setSampleMimeType(MimeTypes.VIDEO_AV1)
|
.setSampleMimeType(MimeTypes.VIDEO_AV1)
|
||||||
.setCodecs(null)
|
.setCodecs(null)
|
||||||
.build());
|
.build());
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET.uri));
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_AV1).build();
|
new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_AV1).build();
|
||||||
@ -1527,7 +1546,7 @@ public class TransformerEndToEndTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void transcode_withOutputAudioMimeTypeAac_completesSuccessfully() throws Exception {
|
public void transcode_withOutputAudioMimeTypeAac_completesSuccessfully() throws Exception {
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP3_ASSET_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP3_ASSET.uri));
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
new Transformer.Builder(context).setAudioMimeType(MimeTypes.AUDIO_AAC).build();
|
||||||
@ -1660,14 +1679,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat);
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_SHORTER_AUDIO_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_SHORTER_AUDIO.uri));
|
||||||
|
|
||||||
ExportTestResult exportTestResult =
|
ExportTestResult exportTestResult =
|
||||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||||
@ -1702,14 +1721,14 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat);
|
||||||
assumeTrue(
|
assumeTrue(
|
||||||
"Old SDKs have large audio encoder buffer, and hits deadlocks due to b/329087277.",
|
"Old SDKs have large audio encoder buffer, and hits deadlocks due to b/329087277.",
|
||||||
Util.SDK_INT >= 31);
|
Util.SDK_INT >= 31);
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_SHORTER_AUDIO_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_SHORTER_AUDIO.uri));
|
||||||
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
EditedMediaItem editedMediaItem = new EditedMediaItem.Builder(mediaItem).build();
|
||||||
|
|
||||||
Composition composition =
|
Composition composition =
|
||||||
@ -1748,8 +1767,8 @@ public class TransformerEndToEndTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_SHORTER_AUDIO.videoFormat);
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
SpeedProvider speedProvider =
|
SpeedProvider speedProvider =
|
||||||
TestSpeedProvider.createWithStartTimes(
|
TestSpeedProvider.createWithStartTimes(
|
||||||
@ -1761,7 +1780,7 @@ public class TransformerEndToEndTest {
|
|||||||
/* audioProcessors= */ ImmutableList.of(speedEffect.first),
|
/* audioProcessors= */ ImmutableList.of(speedEffect.first),
|
||||||
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
/* videoEffects= */ ImmutableList.of(speedEffect.second));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_WITH_SHORTER_AUDIO_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_WITH_SHORTER_AUDIO.uri))
|
||||||
.setEffects(effects)
|
.setEffects(effects)
|
||||||
.build();
|
.build();
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
|
@ -22,9 +22,8 @@ import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIX
|
|||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.maybeSaveTestBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.maybeSaveTestBitmap;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@ -83,7 +82,10 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withTwoSequencesEachWithOneVideoMediaItem_succeeds() throws Exception {
|
public void export_withTwoSequencesEachWithOneVideoMediaItem_succeeds() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
|
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
@ -93,15 +95,14 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
||||||
/* firstSequenceMediaItems= */ ImmutableList.of(
|
/* firstSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemByClippingVideo(
|
editedMediaItemByClippingVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
/* effects= */ ImmutableList.of(
|
/* effects= */ ImmutableList.of(
|
||||||
new AlphaScale(0.5f),
|
new AlphaScale(0.5f),
|
||||||
new ScaleAndRotateTransformation.Builder()
|
new ScaleAndRotateTransformation.Builder()
|
||||||
.setRotationDegrees(180)
|
.setRotationDegrees(180)
|
||||||
.build()))),
|
.build()))),
|
||||||
/* secondSequenceMediaItems= */ ImmutableList.of(
|
/* secondSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemByClippingVideo(
|
editedMediaItemByClippingVideo(MP4_ASSET.uri, /* effects= */ ImmutableList.of())),
|
||||||
MP4_ASSET_URI_STRING, /* effects= */ ImmutableList.of())),
|
|
||||||
VideoCompositorSettings.DEFAULT);
|
VideoCompositorSettings.DEFAULT);
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -117,7 +118,10 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withTwoSequencesOneWithVideoOneWithImage_succeeds() throws Exception {
|
public void export_withTwoSequencesOneWithVideoOneWithImage_succeeds() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
|
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
@ -127,15 +131,14 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
||||||
/* firstSequenceMediaItems= */ ImmutableList.of(
|
/* firstSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemByClippingVideo(
|
editedMediaItemByClippingVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
/* effects= */ ImmutableList.of(
|
/* effects= */ ImmutableList.of(
|
||||||
new AlphaScale(0.5f),
|
new AlphaScale(0.5f),
|
||||||
new ScaleAndRotateTransformation.Builder()
|
new ScaleAndRotateTransformation.Builder()
|
||||||
.setRotationDegrees(180)
|
.setRotationDegrees(180)
|
||||||
.build()))),
|
.build()))),
|
||||||
/* secondSequenceMediaItems= */ ImmutableList.of(
|
/* secondSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemOfOneFrameImage(
|
editedMediaItemOfOneFrameImage(JPG_ASSET.uri, /* effects= */ ImmutableList.of())),
|
||||||
JPG_ASSET_URI_STRING, /* effects= */ ImmutableList.of())),
|
|
||||||
VideoCompositorSettings.DEFAULT);
|
VideoCompositorSettings.DEFAULT);
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -151,7 +154,10 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withTwoSequencesWithVideoCompositorSettings_succeeds() throws Exception {
|
public void export_withTwoSequencesWithVideoCompositorSettings_succeeds() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
|
|
||||||
VideoCompositorSettings pictureInPictureVideoCompositorSettings =
|
VideoCompositorSettings pictureInPictureVideoCompositorSettings =
|
||||||
new VideoCompositorSettings() {
|
new VideoCompositorSettings() {
|
||||||
@ -183,15 +189,14 @@ public final class TransformerMultiSequenceCompositionTest {
|
|||||||
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
||||||
/* firstSequenceMediaItems= */ ImmutableList.of(
|
/* firstSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemByClippingVideo(
|
editedMediaItemByClippingVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
/* effects= */ ImmutableList.of(
|
/* effects= */ ImmutableList.of(
|
||||||
new AlphaScale(0.5f),
|
new AlphaScale(0.5f),
|
||||||
new ScaleAndRotateTransformation.Builder()
|
new ScaleAndRotateTransformation.Builder()
|
||||||
.setRotationDegrees(180)
|
.setRotationDegrees(180)
|
||||||
.build()))),
|
.build()))),
|
||||||
/* secondSequenceMediaItems= */ ImmutableList.of(
|
/* secondSequenceMediaItems= */ ImmutableList.of(
|
||||||
editedMediaItemByClippingVideo(
|
editedMediaItemByClippingVideo(MP4_ASSET.uri, /* effects= */ ImmutableList.of())),
|
||||||
MP4_ASSET_URI_STRING, /* effects= */ ImmutableList.of())),
|
|
||||||
pictureInPictureVideoCompositorSettings);
|
pictureInPictureVideoCompositorSettings);
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@ -80,8 +79,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 0,
|
/* clippingStartPositionMs= */ 0,
|
||||||
@ -132,8 +131,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 0,
|
/* clippingStartPositionMs= */ 0,
|
||||||
@ -167,8 +166,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 0,
|
/* clippingStartPositionMs= */ 0,
|
||||||
@ -222,8 +221,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 2_000L,
|
/* clippingStartPositionMs= */ 2_000L,
|
||||||
@ -274,8 +273,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 0,
|
/* clippingStartPositionMs= */ 0,
|
||||||
@ -329,8 +328,8 @@ public class TransformerPauseResumeTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
buildSingleSequenceComposition(
|
buildSingleSequenceComposition(
|
||||||
/* clippingStartPositionMs= */ 0,
|
/* clippingStartPositionMs= */ 0,
|
||||||
@ -385,7 +384,7 @@ public class TransformerPauseResumeTest {
|
|||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING)
|
.setUri(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(clippingStartPositionMs)
|
.setStartPositionMs(clippingStartPositionMs)
|
||||||
|
@ -17,7 +17,7 @@ package androidx.media3.transformer;
|
|||||||
|
|
||||||
import static androidx.media3.common.util.Assertions.checkStateNotNull;
|
import static androidx.media3.common.util.Assertions.checkStateNotNull;
|
||||||
import static androidx.media3.common.util.Util.isRunningOnEmulator;
|
import static androidx.media3.common.util.Util.isRunningOnEmulator;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION;
|
||||||
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE;
|
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_AVAILABLE;
|
||||||
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_NOT_STARTED;
|
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_NOT_STARTED;
|
||||||
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_UNAVAILABLE;
|
import static androidx.media3.transformer.Transformer.PROGRESS_STATE_UNAVAILABLE;
|
||||||
@ -115,7 +115,7 @@ public class TransformerProgressTest {
|
|||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(AndroidTestUtil.MP4_ASSET_URI_STRING))
|
MediaItem.fromUri(AndroidTestUtil.MP4_ASSET.uri))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
/* audioProcessors= */ ImmutableList.of(),
|
/* audioProcessors= */ ImmutableList.of(),
|
||||||
@ -173,7 +173,7 @@ public class TransformerProgressTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
@ -253,7 +253,7 @@ public class TransformerProgressTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
|
@ -21,21 +21,16 @@ import static androidx.media3.common.util.Assertions.checkNotNull;
|
|||||||
import static androidx.media3.common.util.Util.SDK_INT;
|
import static androidx.media3.common.util.Util.SDK_INT;
|
||||||
import static androidx.media3.effect.DebugTraceUtil.EVENT_SURFACE_TEXTURE_TRANSFORM_FIX;
|
import static androidx.media3.effect.DebugTraceUtil.EVENT_SURFACE_TEXTURE_TRANSFORM_FIX;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.BT601_MOV_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.BT601_MOV_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.BT601_MOV_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_PORTRAIT_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_PORTRAIT_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_CHECKERBOARD_VIDEO;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_CHECKERBOARD_VIDEO_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_CHECKERBOARD_VIDEO_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_LINES_1080P;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.PNG_ASSET_LINES_1080P_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
||||||
import static androidx.media3.transformer.SequenceEffectTestUtil.NO_EFFECT;
|
import static androidx.media3.transformer.SequenceEffectTestUtil.NO_EFFECT;
|
||||||
@ -112,26 +107,29 @@ public final class TransformerSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withNoCompositionPresentationAndWithPerMediaItemEffects() throws Exception {
|
public void export_withNoCompositionPresentationAndWithPerMediaItemEffects() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
OverlayEffect overlayEffect = createOverlayEffect();
|
OverlayEffect overlayEffect = createOverlayEffect();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)),
|
||||||
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
oneFrameFromImage(
|
oneFrameFromImage(
|
||||||
JPG_ASSET_URI_STRING,
|
JPG_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(72).build(),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(72).build(),
|
||||||
overlayEffect)),
|
overlayEffect)),
|
||||||
oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT),
|
oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT),
|
||||||
// Transition to a different aspect ratio.
|
// Transition to a different aspect ratio.
|
||||||
oneFrameFromImage(
|
oneFrameFromImage(
|
||||||
JPG_ASSET_URI_STRING,
|
JPG_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
EXPORT_WIDTH / 2, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT),
|
EXPORT_WIDTH / 2, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT),
|
||||||
@ -151,17 +149,19 @@ public final class TransformerSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export1080x720_withAllAvailableDecoders_doesNotStretchOutputOnAny() throws Exception {
|
public void export1080x720_withAllAvailableDecoders_doesNotStretchOutputOnAny() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_ASSET_FORMAT.sampleMimeType),
|
checkNotNull(MP4_ASSET.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(MP4_ASSET.uri, NO_EFFECT, /* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
MP4_ASSET_URI_STRING, NO_EFFECT, /* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
|
||||||
|
|
||||||
boolean atLeastOneDecoderSucceeds = false;
|
boolean atLeastOneDecoderSucceeds = false;
|
||||||
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
||||||
@ -188,20 +188,18 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_PORTRAIT_ASSET_FORMAT,
|
/* inputFormat= */ MP4_PORTRAIT_ASSET.videoFormat,
|
||||||
/* outputFormat= */ MP4_PORTRAIT_ASSET_FORMAT);
|
/* outputFormat= */ MP4_PORTRAIT_ASSET.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_PORTRAIT_ASSET_FORMAT.sampleMimeType),
|
checkNotNull(MP4_PORTRAIT_ASSET.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING,
|
MP4_PORTRAIT_ASSET.uri, NO_EFFECT, /* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
NO_EFFECT,
|
|
||||||
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
|
||||||
|
|
||||||
boolean atLeastOneDecoderSucceeds = false;
|
boolean atLeastOneDecoderSucceeds = false;
|
||||||
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
||||||
@ -228,20 +226,18 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ BT601_MOV_ASSET_FORMAT,
|
/* inputFormat= */ BT601_MOV_ASSET.videoFormat,
|
||||||
/* outputFormat= */ BT601_MOV_ASSET_FORMAT);
|
/* outputFormat= */ BT601_MOV_ASSET.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(BT601_MOV_ASSET_FORMAT.sampleMimeType),
|
checkNotNull(BT601_MOV_ASSET.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
BT601_MOV_ASSET_URI_STRING,
|
BT601_MOV_ASSET.uri, NO_EFFECT, /* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
NO_EFFECT,
|
|
||||||
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
|
||||||
|
|
||||||
boolean atLeastOneDecoderSucceeds = false;
|
boolean atLeastOneDecoderSucceeds = false;
|
||||||
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
||||||
@ -269,20 +265,18 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_AV1_VIDEO_FORMAT,
|
/* inputFormat= */ MP4_ASSET_AV1_VIDEO.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_AV1_VIDEO_FORMAT);
|
/* outputFormat= */ MP4_ASSET_AV1_VIDEO.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_ASSET_AV1_VIDEO_FORMAT.sampleMimeType),
|
checkNotNull(MP4_ASSET_AV1_VIDEO.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_AV1_VIDEO_URI_STRING,
|
MP4_ASSET_AV1_VIDEO.uri, NO_EFFECT, /* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
NO_EFFECT,
|
|
||||||
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
|
||||||
|
|
||||||
boolean atLeastOneDecoderSucceeds = false;
|
boolean atLeastOneDecoderSucceeds = false;
|
||||||
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
||||||
@ -309,11 +303,11 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_CHECKERBOARD_VIDEO_FORMAT,
|
/* inputFormat= */ MP4_ASSET_CHECKERBOARD_VIDEO.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_ASSET_CHECKERBOARD_VIDEO_FORMAT.sampleMimeType),
|
checkNotNull(MP4_ASSET_CHECKERBOARD_VIDEO.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
@ -321,7 +315,7 @@ public final class TransformerSequenceEffectTest {
|
|||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
/* width= */ 320, /* height= */ 240, Presentation.LAYOUT_SCALE_TO_FIT),
|
/* width= */ 320, /* height= */ 240, Presentation.LAYOUT_SCALE_TO_FIT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_CHECKERBOARD_VIDEO_URI_STRING,
|
MP4_ASSET_CHECKERBOARD_VIDEO.uri,
|
||||||
NO_EFFECT,
|
NO_EFFECT,
|
||||||
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
DebugTraceUtil.enableTracing = true;
|
DebugTraceUtil.enableTracing = true;
|
||||||
@ -354,12 +348,12 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT);
|
/* outputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_LINES_1080P_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_LINES_1080P.uri))
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setDurationUs(C.MICROS_PER_SECOND / 4)
|
.setDurationUs(C.MICROS_PER_SECOND / 4)
|
||||||
.build());
|
.build());
|
||||||
@ -410,7 +404,8 @@ public final class TransformerSequenceEffectTest {
|
|||||||
int exportWidth = 640;
|
int exportWidth = 640;
|
||||||
int exportHeight = 240;
|
int exportHeight = 240;
|
||||||
Format outputFormat =
|
Format outputFormat =
|
||||||
MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT
|
MP4_ASSET_WITH_INCREASING_TIMESTAMPS
|
||||||
|
.videoFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setWidth(exportWidth)
|
.setWidth(exportWidth)
|
||||||
.setHeight(exportHeight)
|
.setHeight(exportHeight)
|
||||||
@ -418,12 +413,12 @@ public final class TransformerSequenceEffectTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
outputFormat);
|
outputFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_LINES_1080P_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(PNG_ASSET_LINES_1080P.uri))
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setDurationUs(C.MICROS_PER_SECOND / 4)
|
.setDurationUs(C.MICROS_PER_SECOND / 4)
|
||||||
.setEffects(
|
.setEffects(
|
||||||
@ -472,24 +467,27 @@ public final class TransformerSequenceEffectTest {
|
|||||||
|| Ascii.equalsIgnoreCase(Util.MODEL, "vivo 1820")));
|
|| Ascii.equalsIgnoreCase(Util.MODEL, "vivo 1820")));
|
||||||
|
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
EXPORT_WIDTH, /* height= */ EXPORT_WIDTH, Presentation.LAYOUT_SCALE_TO_FIT),
|
EXPORT_WIDTH, /* height= */ EXPORT_WIDTH, Presentation.LAYOUT_SCALE_TO_FIT),
|
||||||
oneFrameFromImage(
|
oneFrameFromImage(
|
||||||
JPG_ASSET_URI_STRING,
|
JPG_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(90).build(),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(90).build(),
|
||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT))),
|
EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT))),
|
||||||
oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT),
|
oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
||||||
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_URI_STRING,
|
MP4_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
Presentation.createForWidthAndHeight(
|
Presentation.createForWidthAndHeight(
|
||||||
EXPORT_WIDTH / 2, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT),
|
EXPORT_WIDTH / 2, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT),
|
||||||
@ -509,15 +507,17 @@ public final class TransformerSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withCompositionPresentationAndNoVideoEffects() throws Exception {
|
public void export_withCompositionPresentationAndNoVideoEffects() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT),
|
oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT),
|
||||||
clippedVideo(
|
clippedVideo(MP4_PORTRAIT_ASSET.uri, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
clippedVideo(MP4_ASSET.uri, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(MP4_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
oneFrameFromImage(JPG_PORTRAIT_ASSET.uri, NO_EFFECT));
|
||||||
oneFrameFromImage(JPG_PORTRAIT_ASSET_URI_STRING, NO_EFFECT));
|
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
||||||
@ -533,13 +533,16 @@ public final class TransformerSequenceEffectTest {
|
|||||||
public void export_withCompositionPresentationAndNoVideoEffectsForFirstMediaItem()
|
public void export_withCompositionPresentationAndNoVideoEffectsForFirstMediaItem()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(MP4_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
clippedVideo(MP4_ASSET.uri, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING,
|
MP4_PORTRAIT_ASSET.uri,
|
||||||
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
||||||
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
|
|
||||||
@ -556,17 +559,20 @@ public final class TransformerSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withBt601AndBt709MediaItems() throws Exception {
|
public void export_withBt601AndBt709MediaItems() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ BT601_MOV_ASSET_FORMAT, /* outputFormat= */ null);
|
context, testId, /* inputFormat= */ BT601_MOV_ASSET.videoFormat, /* outputFormat= */ null);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
BT601_MOV_ASSET_URI_STRING,
|
BT601_MOV_ASSET.uri,
|
||||||
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
||||||
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(MP4_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
clippedVideo(MP4_ASSET.uri, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
||||||
@ -581,17 +587,20 @@ public final class TransformerSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withBt601VideoAndBt709ImageMediaItems() throws Exception {
|
public void export_withBt601VideoAndBt709ImageMediaItems() throws Exception {
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ BT601_MOV_ASSET_FORMAT, /* outputFormat= */ null);
|
context, testId, /* inputFormat= */ BT601_MOV_ASSET.videoFormat, /* outputFormat= */ null);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
BT601_MOV_ASSET_URI_STRING,
|
BT601_MOV_ASSET.uri,
|
||||||
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
ImmutableList.of(RgbFilter.createInvertedFilter()),
|
||||||
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT));
|
oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
new TransformerAndroidTestRunner.Builder(context, getLinearColorSpaceTransformer())
|
||||||
|
@ -17,8 +17,8 @@
|
|||||||
|
|
||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.ULTRA_HDR_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ULTRA_HDR_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assertSdrColors;
|
import static androidx.media3.transformer.AndroidTestUtil.assertSdrColors;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
|
import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
|
||||||
@ -85,7 +85,7 @@ public final class TransformerUltraHdrTest {
|
|||||||
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ false, oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
/* tonemap= */ false, oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -105,7 +105,7 @@ public final class TransformerUltraHdrTest {
|
|||||||
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ true, oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
/* tonemap= */ true, oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -125,7 +125,7 @@ public final class TransformerUltraHdrTest {
|
|||||||
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
/* outputFormat= */ DOWNSCALED_ULTRA_HDR_FORMAT);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT)))
|
new EditedMediaItemSequence(oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
// Downscale source bitmap to avoid "video encoding format not supported" errors on emulators.
|
||||||
@ -141,7 +141,7 @@ public final class TransformerUltraHdrTest {
|
|||||||
public void exportNonUltraHdrImage_withUltraHdrEnabled_exportsSdr() throws Exception {
|
public void exportNonUltraHdrImage_withUltraHdrEnabled_exportsSdr() throws Exception {
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ false, oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT));
|
/* tonemap= */ false, oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
@ -156,8 +156,8 @@ public final class TransformerUltraHdrTest {
|
|||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ false,
|
/* tonemap= */ false,
|
||||||
oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT),
|
oneFrameFromImage(JPG_ASSET.uri, NO_EFFECT),
|
||||||
oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.junit.Assume.assumeTrue;
|
import static org.junit.Assume.assumeTrue;
|
||||||
@ -61,7 +61,10 @@ public class TransformerWithInAppMuxerEndToEndAndroidTest {
|
|||||||
// signal a lack of support for H265_MP4's actual format, but pass this test when using
|
// signal a lack of support for H265_MP4's actual format, but pass this test when using
|
||||||
// MP4_ASSET_FORMAT for skipping.
|
// MP4_ASSET_FORMAT for skipping.
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_FORMAT, /* outputFormat= */ MP4_ASSET_FORMAT);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
|
/* outputFormat= */ MP4_ASSET.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setMuxerFactory(new InAppMuxer.Factory.Builder().build())
|
.setMuxerFactory(new InAppMuxer.Factory.Builder().build())
|
||||||
|
@ -17,9 +17,8 @@
|
|||||||
package androidx.media3.transformer;
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Util.usToMs;
|
import static androidx.media3.common.util.Util.usToMs;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_SINGLE_PIXEL_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DURATION_US;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
import android.app.Instrumentation;
|
||||||
@ -89,7 +88,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
@ -102,8 +101,8 @@ public class VideoTimestampConsistencyTest {
|
|||||||
@Test
|
@Test
|
||||||
public void oneVideoComposition_timestampsAreConsistent() throws Exception {
|
public void oneVideoComposition_timestampsAreConsistent() throws Exception {
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
compareTimestamps(ImmutableList.of(video), MP4_ASSET_FRAME_TIMESTAMPS_US);
|
compareTimestamps(ImmutableList.of(video), MP4_ASSET_FRAME_TIMESTAMPS_US);
|
||||||
@ -115,19 +114,19 @@ public class VideoTimestampConsistencyTest {
|
|||||||
long clippedStartUs = 500_000L;
|
long clippedStartUs = 500_000L;
|
||||||
EditedMediaItem video1 =
|
EditedMediaItem video1 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET_URI_STRING)
|
MediaItem.fromUri(MP4_ASSET.uri)
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(usToMs(clippedStartUs))
|
.setStartPositionMs(usToMs(clippedStartUs))
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video2 =
|
EditedMediaItem video2 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> expectedTimestamps =
|
ImmutableList<Long> expectedTimestamps =
|
||||||
@ -136,7 +135,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Lists.transform(
|
Lists.transform(
|
||||||
MP4_ASSET_FRAME_TIMESTAMPS_US,
|
MP4_ASSET_FRAME_TIMESTAMPS_US,
|
||||||
timestampUs -> ((MP4_ASSET_DURATION_US - clippedStartUs) + timestampUs)))
|
timestampUs -> ((MP4_ASSET.videoDurationUs - clippedStartUs) + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
compareTimestamps(ImmutableList.of(video1, video2), expectedTimestamps);
|
compareTimestamps(ImmutableList.of(video1, video2), expectedTimestamps);
|
||||||
@ -145,13 +144,13 @@ public class VideoTimestampConsistencyTest {
|
|||||||
@Test
|
@Test
|
||||||
public void twoVideosComposition_timestampsAreConsistent() throws Exception {
|
public void twoVideosComposition_timestampsAreConsistent() throws Exception {
|
||||||
EditedMediaItem video1 =
|
EditedMediaItem video1 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
EditedMediaItem video2 =
|
EditedMediaItem video2 =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> expectedTimestamps =
|
ImmutableList<Long> expectedTimestamps =
|
||||||
@ -160,7 +159,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Lists.transform(
|
Lists.transform(
|
||||||
MP4_ASSET_FRAME_TIMESTAMPS_US,
|
MP4_ASSET_FRAME_TIMESTAMPS_US,
|
||||||
timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
compareTimestamps(ImmutableList.of(video1, video2), expectedTimestamps);
|
compareTimestamps(ImmutableList.of(video1, video2), expectedTimestamps);
|
||||||
@ -173,7 +172,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
EditedMediaItem image1 =
|
EditedMediaItem image1 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
@ -182,7 +181,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
EditedMediaItem image2 =
|
EditedMediaItem image2 =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
@ -209,15 +208,15 @@ public class VideoTimestampConsistencyTest {
|
|||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> expectedTimestamps =
|
ImmutableList<Long> expectedTimestamps =
|
||||||
@ -236,13 +235,13 @@ public class VideoTimestampConsistencyTest {
|
|||||||
long imageDurationUs = 500_000L;
|
long imageDurationUs = 500_000L;
|
||||||
|
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
@ -255,7 +254,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Lists.transform(
|
Lists.transform(
|
||||||
IMAGE_TIMESTAMPS_US_500_MS_30_FPS,
|
IMAGE_TIMESTAMPS_US_500_MS_30_FPS,
|
||||||
timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
compareTimestamps(ImmutableList.of(video, image), expectedTimestamps);
|
compareTimestamps(ImmutableList.of(video, image), expectedTimestamps);
|
||||||
@ -268,19 +267,19 @@ public class VideoTimestampConsistencyTest {
|
|||||||
|
|
||||||
EditedMediaItem video =
|
EditedMediaItem video =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
MediaItem.fromUri(MP4_ASSET_URI_STRING)
|
MediaItem.fromUri(MP4_ASSET.uri)
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(usToMs(clippedStartUs))
|
.setStartPositionMs(usToMs(clippedStartUs))
|
||||||
.build())
|
.build())
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem image =
|
EditedMediaItem image =
|
||||||
new EditedMediaItem.Builder(
|
new EditedMediaItem.Builder(
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(JPG_SINGLE_PIXEL_URI_STRING)
|
.setUri(JPG_SINGLE_PIXEL_ASSET.uri)
|
||||||
.setImageDurationMs(usToMs(imageDurationUs))
|
.setImageDurationMs(usToMs(imageDurationUs))
|
||||||
.build())
|
.build())
|
||||||
.setDurationUs(imageDurationUs)
|
.setDurationUs(imageDurationUs)
|
||||||
@ -293,7 +292,7 @@ public class VideoTimestampConsistencyTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Lists.transform(
|
Lists.transform(
|
||||||
IMAGE_TIMESTAMPS_US_500_MS_30_FPS,
|
IMAGE_TIMESTAMPS_US_500_MS_30_FPS,
|
||||||
timestampUs -> ((MP4_ASSET_DURATION_US - clippedStartUs) + timestampUs)))
|
timestampUs -> ((MP4_ASSET.videoDurationUs - clippedStartUs) + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
compareTimestamps(ImmutableList.of(video, image), expectedTimestamps);
|
compareTimestamps(ImmutableList.of(video, image), expectedTimestamps);
|
||||||
|
@ -23,9 +23,9 @@ import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePix
|
|||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
||||||
import static androidx.media3.test.utils.TestUtil.assertBitmapsAreSimilar;
|
import static androidx.media3.test.utils.TestUtil.assertBitmapsAreSimilar;
|
||||||
import static androidx.media3.test.utils.VideoFrameProcessorTestRunner.VIDEO_FRAME_PROCESSING_WAIT_MS;
|
import static androidx.media3.test.utils.VideoFrameProcessorTestRunner.VIDEO_FRAME_PROCESSING_WAIT_MS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||||
import static androidx.media3.transformer.SequenceEffectTestUtil.PSNR_THRESHOLD;
|
import static androidx.media3.transformer.SequenceEffectTestUtil.PSNR_THRESHOLD;
|
||||||
@ -152,7 +152,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId).build();
|
videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId).build();
|
||||||
Bitmap expectedBitmap = readBitmap(ORIGINAL_PNG_ASSET_PATH);
|
Bitmap expectedBitmap = readBitmap(ORIGINAL_PNG_ASSET_PATH);
|
||||||
@ -172,7 +172,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
TextureBitmapReader consumersBitmapReader = new TextureBitmapReader();
|
TextureBitmapReader consumersBitmapReader = new TextureBitmapReader();
|
||||||
VideoFrameProcessorTestRunner texIdProducingVideoFrameProcessorTestRunner =
|
VideoFrameProcessorTestRunner texIdProducingVideoFrameProcessorTestRunner =
|
||||||
@ -200,7 +200,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
videoFrameProcessorTestRunner =
|
videoFrameProcessorTestRunner =
|
||||||
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
getDefaultFrameProcessorTestRunnerBuilder(testId)
|
||||||
@ -218,7 +218,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH);
|
Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH);
|
||||||
BitmapOverlay bitmapOverlay = BitmapOverlay.createStaticBitmapOverlay(overlayBitmap);
|
BitmapOverlay bitmapOverlay = BitmapOverlay.createStaticBitmapOverlay(overlayBitmap);
|
||||||
@ -242,7 +242,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
getApplicationContext(),
|
getApplicationContext(),
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_FORMAT,
|
/* inputFormat= */ MP4_ASSET.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH);
|
Bitmap overlayBitmap = readBitmap(OVERLAY_PNG_ASSET_PATH);
|
||||||
BitmapOverlay bitmapOverlay = BitmapOverlay.createStaticBitmapOverlay(overlayBitmap);
|
BitmapOverlay bitmapOverlay = BitmapOverlay.createStaticBitmapOverlay(overlayBitmap);
|
||||||
@ -269,7 +269,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Ignore("TODO: b/344529901 - enable this test when fixed.")
|
@Ignore("TODO: b/344529901 - enable this test when fixed.")
|
||||||
public void ultraHdrBitmapAndTextOverlay_hlg10Input_matchesGoldenFile() throws Exception {
|
public void ultraHdrBitmapAndTextOverlay_hlg10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -322,7 +322,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void ultraHdrBitmapOverlay_hlg10Input_matchesGoldenFile() throws Exception {
|
public void ultraHdrBitmapOverlay_hlg10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -369,7 +369,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void ultraHdrBitmapOverlay_hdr10Input_matchesGoldenFile() throws Exception {
|
public void ultraHdrBitmapOverlay_hdr10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -404,7 +404,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void textOverlay_hdr10Input_matchesGoldenFile() throws Exception {
|
public void textOverlay_hdr10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -450,7 +450,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hlg10Input_matchesGoldenFile() throws Exception {
|
public void noEffects_hlg10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -475,7 +475,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hlg10InputAndHdr10Output_matchesGoldenFile() throws Exception {
|
public void noEffects_hlg10InputAndHdr10Output_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format inputFormat = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format inputFormat = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
Format outputFormat =
|
Format outputFormat =
|
||||||
inputFormat
|
inputFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
@ -509,7 +509,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
public void noEffects_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -537,7 +537,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void noEffects_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
public void noEffects_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
ColorInfo outputColorInfo =
|
ColorInfo outputColorInfo =
|
||||||
new ColorInfo.Builder()
|
new ColorInfo.Builder()
|
||||||
@ -571,7 +571,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hdr10Input_matchesGoldenFile() throws Exception {
|
public void noEffects_hdr10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -596,7 +596,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hdr10InputAndHlg10Output_matchesGoldenFile() throws Exception {
|
public void noEffects_hdr10InputAndHlg10Output_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format inputFormat = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format inputFormat = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
Format outputFormat =
|
Format outputFormat =
|
||||||
inputFormat
|
inputFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
@ -630,7 +630,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noEffects_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
public void noEffects_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -658,7 +658,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void noEffects_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
public void noEffects_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
ColorInfo outputColorInfo =
|
ColorInfo outputColorInfo =
|
||||||
new ColorInfo.Builder()
|
new ColorInfo.Builder()
|
||||||
@ -692,7 +692,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hlg10Input_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hlg10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -718,7 +718,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -746,7 +746,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
ColorInfo outputColorInfo =
|
ColorInfo outputColorInfo =
|
||||||
new ColorInfo.Builder()
|
new ColorInfo.Builder()
|
||||||
@ -781,7 +781,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hdr10Input_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hdr10Input_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -807,7 +807,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
||||||
Context context = getApplicationContext();
|
Context context = getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
ColorInfo colorInfo = checkNotNull(format.colorInfo);
|
||||||
@ -835,7 +835,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void noOpEffect_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
public void noOpEffect_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
ColorInfo outputColorInfo =
|
ColorInfo outputColorInfo =
|
||||||
new ColorInfo.Builder()
|
new ColorInfo.Builder()
|
||||||
|
@ -17,18 +17,14 @@ package androidx.media3.transformer.mh;
|
|||||||
|
|
||||||
import static androidx.media3.common.util.Util.SDK_INT;
|
import static androidx.media3.common.util.Util.SDK_INT;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_8K24_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_8K24;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_8K24_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_BT2020_SDR;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_BT2020_SDR;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_BT2020_SDR_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF_H265_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF_H265;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_PIXEL;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_TRIM_OPTIMIZATION_PIXEL_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||||
import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_TRANSMUXED_AND_TRANSCODED;
|
import static androidx.media3.transformer.ExportResult.CONVERSION_PROCESS_TRANSMUXED_AND_TRANSCODED;
|
||||||
@ -92,14 +88,13 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
boolean skipCalculateSsim =
|
boolean skipCalculateSsim =
|
||||||
(Util.SDK_INT < 33 && (Util.MODEL.equals("SM-F711U1") || Util.MODEL.equals("SM-F926U1")))
|
(Util.SDK_INT < 33 && (Util.MODEL.equals("SM-F711U1") || Util.MODEL.equals("SM-F926U1")))
|
||||||
|| (Util.SDK_INT == 33 && Util.MODEL.equals("LE2121"));
|
|| (Util.SDK_INT == 33 && Util.MODEL.equals("LE2121"));
|
||||||
@ -117,8 +112,7 @@ public class ExportTest {
|
|||||||
public void exportWithoutDecodeEncode() throws Exception {
|
public void exportWithoutDecodeEncode() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
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));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
// 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.
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -135,7 +129,7 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
@ -146,8 +140,7 @@ public class ExportTest {
|
|||||||
new VideoEncoderSettings.Builder().setBitrate(5_000_000).build())
|
new VideoEncoderSettings.Builder().setBitrate(5_000_000).build())
|
||||||
.build()))
|
.build()))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
boolean skipCalculateSsim =
|
boolean skipCalculateSsim =
|
||||||
@ -169,7 +162,7 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_4K60_PORTRAIT_FORMAT,
|
/* inputFormat= */ MP4_ASSET_4K60_PORTRAIT.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
// Reference: b/262710361
|
// Reference: b/262710361
|
||||||
assumeFalse(
|
assumeFalse(
|
||||||
@ -179,7 +172,7 @@ public class ExportTest {
|
|||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_4K60_PORTRAIT_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_4K60_PORTRAIT.uri));
|
||||||
boolean skipCalculateSsim = Util.SDK_INT < 30 && Util.DEVICE.equals("joyeuse");
|
boolean skipCalculateSsim = Util.SDK_INT < 30 && Util.DEVICE.equals("joyeuse");
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
@ -203,12 +196,12 @@ public class ExportTest {
|
|||||||
|| Ascii.equalsIgnoreCase(Util.MODEL, "le2121"));
|
|| Ascii.equalsIgnoreCase(Util.MODEL, "le2121"));
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_8K24_FORMAT, /* outputFormat= */ null);
|
context, testId, /* inputFormat= */ MP4_ASSET_8K24.videoFormat, /* outputFormat= */ null);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_8K24_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_8K24.uri));
|
||||||
// TODO: b/281824052 - have requestCalculateSsim always be true after linked bug is fixed.
|
// TODO: b/281824052 - have requestCalculateSsim always be true after linked bug is fixed.
|
||||||
boolean requestCalculateSsim = !Util.MODEL.equals("SM-G991B");
|
boolean requestCalculateSsim = !Util.MODEL.equals("SM-G991B");
|
||||||
|
|
||||||
@ -231,7 +224,7 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_8K24_FORMAT,
|
/* inputFormat= */ MP4_ASSET_8K24.videoFormat,
|
||||||
/* outputFormat= */ new Format.Builder()
|
/* outputFormat= */ new Format.Builder()
|
||||||
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
.setSampleMimeType(MimeTypes.VIDEO_H264)
|
||||||
.setWidth(downscaledWidth)
|
.setWidth(downscaledWidth)
|
||||||
@ -244,7 +237,7 @@ public class ExportTest {
|
|||||||
.build()
|
.build()
|
||||||
.run(
|
.run(
|
||||||
testId,
|
testId,
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_8K24_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_8K24.uri)))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
/* audioProcessors= */ ImmutableList.of(),
|
/* audioProcessors= */ ImmutableList.of(),
|
||||||
@ -264,14 +257,13 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
boolean skipCalculateSsim =
|
boolean skipCalculateSsim =
|
||||||
@ -295,7 +287,7 @@ public class ExportTest {
|
|||||||
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET.uri)))
|
||||||
.setRemoveVideo(true)
|
.setRemoveVideo(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -318,7 +310,7 @@ public class ExportTest {
|
|||||||
}
|
}
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF.uri)))
|
||||||
.setFlattenForSlowMotion(true)
|
.setFlattenForSlowMotion(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -343,7 +335,7 @@ public class ExportTest {
|
|||||||
}
|
}
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_H265_URI_STRING)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_SEF_H265.uri)))
|
||||||
.setFlattenForSlowMotion(true)
|
.setFlattenForSlowMotion(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -361,11 +353,10 @@ public class ExportTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
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));
|
||||||
MediaItem.fromUri(Uri.parse(MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
ImmutableList<Effect> videoEffects =
|
ImmutableList<Effect> videoEffects =
|
||||||
ImmutableList.of(new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build());
|
ImmutableList.of(new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build());
|
||||||
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects);
|
||||||
@ -390,9 +381,12 @@ public class ExportTest {
|
|||||||
throw new AssumptionViolatedException(reason);
|
throw new AssumptionViolatedException(reason);
|
||||||
}
|
}
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_BT2020_SDR_FORMAT, /* outputFormat= */ null);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET_BT2020_SDR.videoFormat,
|
||||||
|
/* outputFormat= */ null);
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_BT2020_SDR));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_BT2020_SDR.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -420,7 +414,7 @@ public class ExportTest {
|
|||||||
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
new Transformer.Builder(context).experimentalSetTrimOptimizationEnabled(true).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
new MediaItem.Builder()
|
new MediaItem.Builder()
|
||||||
.setUri(MP4_TRIM_OPTIMIZATION_PIXEL_URI_STRING)
|
.setUri(MP4_TRIM_OPTIMIZATION_PIXEL.uri)
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder()
|
new MediaItem.ClippingConfiguration.Builder()
|
||||||
.setStartPositionMs(500)
|
.setStartPositionMs(500)
|
||||||
|
@ -18,9 +18,7 @@ package androidx.media3.transformer.mh;
|
|||||||
import static androidx.media3.common.util.Util.SDK_INT;
|
import static androidx.media3.common.util.Util.SDK_INT;
|
||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
@ -74,7 +72,8 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
|||||||
|
|
||||||
// Force interpret HDR as SDR signals SDR input to the decoder, even if the actual input is HDR.
|
// Force interpret HDR as SDR signals SDR input to the decoder, even if the actual input is HDR.
|
||||||
Format decoderInputFormat =
|
Format decoderInputFormat =
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT
|
MP4_ASSET_720P_4_SECOND_HDR10
|
||||||
|
.videoFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setColorInfo(ColorInfo.SDR_BT709_LIMITED)
|
.setColorInfo(ColorInfo.SDR_BT709_LIMITED)
|
||||||
.build();
|
.build();
|
||||||
@ -82,7 +81,7 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
|||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri)))
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||||
@ -114,7 +113,8 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
|||||||
|
|
||||||
// Force interpret HDR as SDR signals SDR input to the decoder, even if the actual input is HDR.
|
// Force interpret HDR as SDR signals SDR input to the decoder, even if the actual input is HDR.
|
||||||
Format decoderInputFormat =
|
Format decoderInputFormat =
|
||||||
MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT
|
MP4_ASSET_1080P_5_SECOND_HLG10
|
||||||
|
.videoFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setColorInfo(ColorInfo.SDR_BT709_LIMITED)
|
.setColorInfo(ColorInfo.SDR_BT709_LIMITED)
|
||||||
.build();
|
.build();
|
||||||
@ -122,7 +122,8 @@ public class ForceInterpretHdrVideoAsSdrTest {
|
|||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri)))
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||||
|
@ -19,13 +19,9 @@ import static androidx.media3.effect.DefaultVideoFrameProcessor.WORKING_COLOR_SP
|
|||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||||
import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR;
|
import static androidx.media3.transformer.Composition.HDR_MODE_KEEP_HDR;
|
||||||
@ -92,11 +88,11 @@ public final class HdrEditingTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri));
|
||||||
|
|
||||||
ExportTestResult exportTestResult =
|
ExportTestResult exportTestResult =
|
||||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||||
@ -123,11 +119,11 @@ public final class HdrEditingTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri));
|
||||||
|
|
||||||
ExportTestResult exportTestResult =
|
ExportTestResult exportTestResult =
|
||||||
new TransformerAndroidTestRunner.Builder(context, transformer)
|
new TransformerAndroidTestRunner.Builder(context, transformer)
|
||||||
@ -144,13 +140,13 @@ public final class HdrEditingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void exportAndTranscode_hdr10File_whenHdrEditingIsSupported() throws Exception {
|
public void exportAndTranscode_hdr10File_whenHdrEditingIsSupported() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -169,13 +165,13 @@ public final class HdrEditingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void exportAndTranscode_hlg10File_whenHdrEditingIsSupported() throws Exception {
|
public void exportAndTranscode_hlg10File_whenHdrEditingIsSupported() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -194,13 +190,13 @@ public final class HdrEditingTest {
|
|||||||
@Test
|
@Test
|
||||||
public void exportAndTranscode_dolbyVisionFile_whenHdrEditingIsSupported() throws Exception {
|
public void exportAndTranscode_dolbyVisionFile_whenHdrEditingIsSupported() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_DOLBY_VISION_HDR_FORMAT;
|
Format format = MP4_ASSET_DOLBY_VISION_HDR.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_DOLBY_VISION_HDR));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_DOLBY_VISION_HDR.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -221,7 +217,7 @@ public final class HdrEditingTest {
|
|||||||
exportAndTranscode_av1FileWithAv1HdrEditingUnsupportedAndHevcHdrEditingSupported_fallsBackToH265()
|
exportAndTranscode_av1FileWithAv1HdrEditingUnsupportedAndHevcHdrEditingSupported_fallsBackToH265()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_AV1_2_SECOND_HDR10.videoFormat;
|
||||||
if (EncoderUtil.getSupportedEncodersForHdrEditing(MimeTypes.VIDEO_H265, format.colorInfo)
|
if (EncoderUtil.getSupportedEncodersForHdrEditing(MimeTypes.VIDEO_H265, format.colorInfo)
|
||||||
.isEmpty()) {
|
.isEmpty()) {
|
||||||
String skipReason = "No H265 HDR editing support for " + format.colorInfo;
|
String skipReason = "No H265 HDR editing support for " + format.colorInfo;
|
||||||
@ -242,7 +238,7 @@ public final class HdrEditingTest {
|
|||||||
/* outputFormat= */ format.buildUpon().setSampleMimeType(MimeTypes.VIDEO_H265).build());
|
/* outputFormat= */ format.buildUpon().setSampleMimeType(MimeTypes.VIDEO_H265).build());
|
||||||
|
|
||||||
Transformer transformer = new Transformer.Builder(context).build();
|
Transformer transformer = new Transformer.Builder(context).build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_AV1_2_SECOND_HDR10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_AV1_2_SECOND_HDR10.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -260,7 +256,7 @@ public final class HdrEditingTest {
|
|||||||
public void exportAndTranscodeHdr_ignoringSdrWorkingColorSpace_whenHdrEditingIsSupported()
|
public void exportAndTranscodeHdr_ignoringSdrWorkingColorSpace_whenHdrEditingIsSupported()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceSupportsHdrEditing(testId, format);
|
assumeDeviceSupportsHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ format);
|
||||||
@ -273,7 +269,8 @@ public final class HdrEditingTest {
|
|||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri)))
|
||||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -293,7 +290,7 @@ public final class HdrEditingTest {
|
|||||||
public void exportAndTranscode_hdr10File_whenHdrEditingUnsupported_toneMapsOrThrows()
|
public void exportAndTranscode_hdr10File_whenHdrEditingUnsupported_toneMapsOrThrows()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
Format format = MP4_ASSET_720P_4_SECOND_HDR10.videoFormat;
|
||||||
assumeDeviceDoesNotSupportHdrEditing(testId, format);
|
assumeDeviceDoesNotSupportHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -317,7 +314,7 @@ public final class HdrEditingTest {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -352,7 +349,7 @@ public final class HdrEditingTest {
|
|||||||
public void exportAndTranscode_hlg10File_whenHdrEditingUnsupported_toneMapsOrThrows()
|
public void exportAndTranscode_hlg10File_whenHdrEditingUnsupported_toneMapsOrThrows()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
Format format = MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat;
|
||||||
assumeDeviceDoesNotSupportHdrEditing(testId, format);
|
assumeDeviceDoesNotSupportHdrEditing(testId, format);
|
||||||
|
|
||||||
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
assumeFormatsSupported(context, testId, /* inputFormat= */ format, /* outputFormat= */ null);
|
||||||
@ -374,7 +371,7 @@ public final class HdrEditingTest {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
|
@ -18,9 +18,7 @@ package androidx.media3.transformer.mh;
|
|||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -67,7 +65,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
@ -87,7 +85,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri)))
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||||
@ -127,7 +125,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
@ -147,7 +145,8 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri)))
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
new Composition.Builder(new EditedMediaItemSequence(editedMediaItem))
|
||||||
@ -187,7 +186,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
@ -207,7 +206,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_720P_4_SECOND_HDR10.uri)))
|
||||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
@ -248,7 +247,7 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
@ -268,7 +267,8 @@ public class ToneMapHdrToSdrUsingMediaCodecTest {
|
|||||||
})
|
})
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10)))
|
new EditedMediaItem.Builder(
|
||||||
|
MediaItem.fromUri(Uri.parse(MP4_ASSET_1080P_5_SECOND_HLG10.uri)))
|
||||||
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
.setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS)
|
||||||
.build();
|
.build();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
|
@ -17,11 +17,8 @@ package androidx.media3.transformer.mh;
|
|||||||
|
|
||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION_HDR_FORMAT;
|
|
||||||
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsOpenGlToneMapping;
|
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsOpenGlToneMapping;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -61,25 +58,25 @@ public class ToneMapHdrToSdrUsingOpenGlTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_toneMap_hlg10File_toneMaps() throws Exception {
|
public void export_toneMap_hlg10File_toneMaps() throws Exception {
|
||||||
assumeDeviceSupportsOpenGlToneMapping(
|
assumeDeviceSupportsOpenGlToneMapping(
|
||||||
testId, /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
testId, /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
|
|
||||||
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10);
|
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10.uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void export_toneMap_hdr10File_toneMaps() throws Exception {
|
public void export_toneMap_hdr10File_toneMaps() throws Exception {
|
||||||
assumeDeviceSupportsOpenGlToneMapping(
|
assumeDeviceSupportsOpenGlToneMapping(
|
||||||
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
|
|
||||||
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_720P_4_SECOND_HDR10);
|
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_720P_4_SECOND_HDR10.uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void export_toneMap_dolbyVisionFile_toneMaps() throws Exception {
|
public void export_toneMap_dolbyVisionFile_toneMaps() throws Exception {
|
||||||
assumeDeviceSupportsOpenGlToneMapping(
|
assumeDeviceSupportsOpenGlToneMapping(
|
||||||
testId, /* inputFormat= */ MP4_ASSET_DOLBY_VISION_HDR_FORMAT);
|
testId, /* inputFormat= */ MP4_ASSET_DOLBY_VISION_HDR.videoFormat);
|
||||||
|
|
||||||
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_DOLBY_VISION_HDR);
|
runTransformerWithOpenGlToneMapping(testId, MP4_ASSET_DOLBY_VISION_HDR.uri);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void runTransformerWithOpenGlToneMapping(String testId, String fileUri) throws Exception {
|
private void runTransformerWithOpenGlToneMapping(String testId, String fileUri) throws Exception {
|
||||||
|
@ -60,8 +60,8 @@ public final class TranscodeQualityTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT);
|
/* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat);
|
||||||
// Skip on specific pre-API 34 devices where calculating SSIM fails.
|
// Skip on specific pre-API 34 devices where calculating SSIM fails.
|
||||||
assumeFalse(
|
assumeFalse(
|
||||||
(Util.SDK_INT < 33 && (Util.MODEL.equals("SM-F711U1") || Util.MODEL.equals("SM-F926U1")))
|
(Util.SDK_INT < 33 && (Util.MODEL.equals("SM-F711U1") || Util.MODEL.equals("SM-F926U1")))
|
||||||
@ -80,8 +80,7 @@ public final class TranscodeQualityTest {
|
|||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
|
|
||||||
@ -103,8 +102,9 @@ public final class TranscodeQualityTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT
|
/* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS
|
||||||
|
.videoFormat
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setSampleMimeType(MimeTypes.VIDEO_H265)
|
.setSampleMimeType(MimeTypes.VIDEO_H265)
|
||||||
.build());
|
.build());
|
||||||
@ -114,8 +114,7 @@ public final class TranscodeQualityTest {
|
|||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_H265).build();
|
new Transformer.Builder(context).setVideoMimeType(MimeTypes.VIDEO_H265).build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS.uri));
|
||||||
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
|
|
||||||
@ -145,8 +144,7 @@ public final class TranscodeQualityTest {
|
|||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
MediaItem.fromUri(
|
MediaItem.fromUri(
|
||||||
Uri.parse(
|
Uri.parse(AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S.uri));
|
||||||
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveAudio(true).build();
|
||||||
|
|
||||||
|
@ -16,8 +16,8 @@
|
|||||||
package androidx.media3.transformer.mh;
|
package androidx.media3.transformer.mh;
|
||||||
|
|
||||||
import static androidx.media3.common.MimeTypes.VIDEO_H264;
|
import static androidx.media3.common.MimeTypes.VIDEO_H264;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ULTRA_HDR_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.ULTRA_HDR_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -63,15 +63,15 @@ public class TranscodeSpeedTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
/* outputFormat= */ AndroidTestUtil.MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT);
|
/* outputFormat= */ MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setVideoMimeType(MimeTypes.VIDEO_H264)
|
.setVideoMimeType(MimeTypes.VIDEO_H264)
|
||||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem =
|
||||||
MediaItem.fromUri(Uri.parse(MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING))
|
MediaItem.fromUri(Uri.parse(MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS.uri))
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setClippingConfiguration(
|
.setClippingConfiguration(
|
||||||
new MediaItem.ClippingConfiguration.Builder().setEndPositionMs(15_000).build())
|
new MediaItem.ClippingConfiguration.Builder().setEndPositionMs(15_000).build())
|
||||||
@ -101,7 +101,7 @@ public class TranscodeSpeedTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT,
|
/* inputFormat= */ MP4_LONG_ASSET_WITH_INCREASING_TIMESTAMPS.videoFormat,
|
||||||
outputFormat);
|
outputFormat);
|
||||||
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
DefaultVideoFrameProcessor.Factory videoFrameProcessorFactory =
|
||||||
new DefaultVideoFrameProcessor.Factory.Builder()
|
new DefaultVideoFrameProcessor.Factory.Builder()
|
||||||
@ -126,7 +126,7 @@ public class TranscodeSpeedTest {
|
|||||||
// This test uses ULTRA_HDR_URI_STRING because it's high resolution.
|
// This test uses ULTRA_HDR_URI_STRING because it's high resolution.
|
||||||
// Ultra HDR gainmap is ignored.
|
// Ultra HDR gainmap is ignored.
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(ULTRA_HDR_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(JPG_ULTRA_HDR_ASSET.uri))
|
||||||
.setFrameRate(30)
|
.setFrameRate(30)
|
||||||
.setDurationUs(isHighPerformance ? 45_000_000 : 15_000_000)
|
.setDurationUs(isHighPerformance ? 45_000_000 : 15_000_000)
|
||||||
.setEffects(
|
.setEffects(
|
||||||
|
@ -19,12 +19,9 @@ package androidx.media3.transformer.mh;
|
|||||||
|
|
||||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo;
|
||||||
import static androidx.media3.transformer.SequenceEffectTestUtil.NO_EFFECT;
|
import static androidx.media3.transformer.SequenceEffectTestUtil.NO_EFFECT;
|
||||||
@ -89,17 +86,17 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withSdrThenHdr() throws Exception {
|
public void export_withSdrThenHdr() throws Exception {
|
||||||
assumeDeviceSupportsOpenGlToneMapping(
|
assumeDeviceSupportsOpenGlToneMapping(
|
||||||
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING,
|
MP4_PORTRAIT_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
@ -122,22 +119,22 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void export_withHdrThenSdr_whenHdrEditingSupported_throws() throws Exception {
|
public void export_withHdrThenSdr_whenHdrEditingSupported_throws() throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING,
|
MP4_PORTRAIT_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
@ -161,24 +158,24 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
*/
|
*/
|
||||||
@Test
|
@Test
|
||||||
public void export_withHdrThenSdr_whenHdrEditingUnsupported() throws Exception {
|
public void export_withHdrThenSdr_whenHdrEditingUnsupported() throws Exception {
|
||||||
assumeDeviceDoesNotSupportHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceDoesNotSupportHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeDeviceSupportsOpenGlToneMapping(
|
assumeDeviceSupportsOpenGlToneMapping(
|
||||||
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_PORTRAIT_ASSET_URI_STRING,
|
MP4_PORTRAIT_ASSET.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
new Crop(/* left= */ -1, /* right= */ 0, /* bottom= */ -1, /* top= */ 0)),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
@ -198,22 +195,22 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withHdr10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame()
|
public void export_withHdr10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
@ -232,28 +229,28 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export_withHlg10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame()
|
public void export_withHlg10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
Presentation.createForHeight(EXPORT_HEIGHT),
|
Presentation.createForHeight(EXPORT_HEIGHT),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_1080P_5_SECOND_HLG10,
|
MP4_ASSET_1080P_5_SECOND_HLG10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS),
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_720P_4_SECOND_HDR10,
|
MP4_ASSET_720P_4_SECOND_HDR10.uri,
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()),
|
||||||
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
/* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS));
|
||||||
@ -273,22 +270,22 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export1920x1080Hlg_withAllAvailableDecoders_doesNotStretchOutputOnAny()
|
public void export1920x1080Hlg_withAllAvailableDecoders_doesNotStretchOutputOnAny()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
/* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.sampleMimeType),
|
checkNotNull(MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(
|
clippedVideo(
|
||||||
MP4_ASSET_1080P_5_SECOND_HLG10,
|
MP4_ASSET_1080P_5_SECOND_HLG10.uri,
|
||||||
NO_EFFECT,
|
NO_EFFECT,
|
||||||
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
/* endPositionMs= */ C.MILLIS_PER_SECOND / 4));
|
||||||
|
|
||||||
@ -312,21 +309,21 @@ public final class TransformerHdrSequenceEffectTest {
|
|||||||
@Test
|
@Test
|
||||||
public void export720x1280Av1Hdr10_withAllAvailableDecoders_doesNotStretchOutputOnAny()
|
public void export720x1280Av1Hdr10_withAllAvailableDecoders_doesNotStretchOutputOnAny()
|
||||||
throws Exception {
|
throws Exception {
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_AV1_2_SECOND_HDR10.videoFormat);
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT,
|
/* inputFormat= */ MP4_ASSET_AV1_2_SECOND_HDR10.videoFormat,
|
||||||
/* outputFormat= */ MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT);
|
/* outputFormat= */ MP4_ASSET_AV1_2_SECOND_HDR10.videoFormat);
|
||||||
List<MediaCodecInfo> mediaCodecInfoList =
|
List<MediaCodecInfo> mediaCodecInfoList =
|
||||||
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
MediaCodecSelector.DEFAULT.getDecoderInfos(
|
||||||
checkNotNull(MP4_ASSET_AV1_2_SECOND_HDR10_FORMAT.sampleMimeType),
|
checkNotNull(MP4_ASSET_AV1_2_SECOND_HDR10.videoFormat.sampleMimeType),
|
||||||
/* requiresSecureDecoder= */ false,
|
/* requiresSecureDecoder= */ false,
|
||||||
/* requiresTunnelingDecoder= */ false);
|
/* requiresTunnelingDecoder= */ false);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(MP4_ASSET_AV1_2_SECOND_HDR10, NO_EFFECT, C.MILLIS_PER_SECOND / 4));
|
clippedVideo(MP4_ASSET_AV1_2_SECOND_HDR10.uri, NO_EFFECT, C.MILLIS_PER_SECOND / 4));
|
||||||
|
|
||||||
boolean atLeastOneDecoderSucceeds = false;
|
boolean atLeastOneDecoderSucceeds = false;
|
||||||
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
for (MediaCodecInfo mediaCodecInfo : mediaCodecInfoList) {
|
||||||
|
@ -18,9 +18,8 @@
|
|||||||
package androidx.media3.transformer.mh;
|
package androidx.media3.transformer.mh;
|
||||||
|
|
||||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.JPG_ULTRA_HDR_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.ULTRA_HDR_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assertSdrColors;
|
import static androidx.media3.transformer.AndroidTestUtil.assertSdrColors;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||||
import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
|
import static androidx.media3.transformer.Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
|
||||||
@ -76,7 +75,7 @@ public final class TransformerMhUltraHdrTest {
|
|||||||
assumeDeviceSupportsUltraHdrEditing();
|
assumeDeviceSupportsUltraHdrEditing();
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ false, oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
/* tonemap= */ false, oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
@ -95,8 +94,8 @@ public final class TransformerMhUltraHdrTest {
|
|||||||
Composition composition =
|
Composition composition =
|
||||||
createComposition(
|
createComposition(
|
||||||
/* presentation= */ null,
|
/* presentation= */ null,
|
||||||
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10, NO_EFFECT, ONE_FRAME_END_POSITION_MS),
|
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10.uri, NO_EFFECT, ONE_FRAME_END_POSITION_MS),
|
||||||
oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
@ -115,8 +114,8 @@ public final class TransformerMhUltraHdrTest {
|
|||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ false,
|
/* tonemap= */ false,
|
||||||
oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT),
|
oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT),
|
||||||
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10, NO_EFFECT, ONE_FRAME_END_POSITION_MS));
|
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10.uri, NO_EFFECT, ONE_FRAME_END_POSITION_MS));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
@ -131,12 +130,12 @@ public final class TransformerMhUltraHdrTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void exportTonemappedHdrVideoThenUltraHdrImage_exportsSdr() throws Exception {
|
public void exportTonemappedHdrVideoThenUltraHdrImage_exportsSdr() throws Exception {
|
||||||
assumeDeviceSupportsOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
assumeDeviceSupportsOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
Composition composition =
|
Composition composition =
|
||||||
createUltraHdrComposition(
|
createUltraHdrComposition(
|
||||||
/* tonemap= */ true,
|
/* tonemap= */ true,
|
||||||
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10, NO_EFFECT, ONE_FRAME_END_POSITION_MS),
|
clippedVideo(MP4_ASSET_1080P_5_SECOND_HLG10.uri, NO_EFFECT, ONE_FRAME_END_POSITION_MS),
|
||||||
oneFrameFromImage(ULTRA_HDR_URI_STRING, NO_EFFECT));
|
oneFrameFromImage(JPG_ULTRA_HDR_ASSET.uri, NO_EFFECT));
|
||||||
|
|
||||||
ExportTestResult result =
|
ExportTestResult result =
|
||||||
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build())
|
||||||
@ -163,6 +162,6 @@ public final class TransformerMhUltraHdrTest {
|
|||||||
getApplicationContext(), testId, "Ultra HDR is not supported on this API level.");
|
getApplicationContext(), testId, "Ultra HDR is not supported on this API level.");
|
||||||
throw new AssumptionViolatedException("Ultra HDR is not supported on this API level.");
|
throw new AssumptionViolatedException("Ultra HDR is not supported on this API level.");
|
||||||
}
|
}
|
||||||
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10.videoFormat);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -15,8 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package androidx.media3.transformer.mh;
|
package androidx.media3.transformer.mh;
|
||||||
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_AV1_VIDEO_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -57,13 +56,16 @@ public class TransformerWithInAppMuxerEndToEndMhTest {
|
|||||||
public void videoEditing_forAv1Video_completesSuccessfully() throws Exception {
|
public void videoEditing_forAv1Video_completesSuccessfully() throws Exception {
|
||||||
Context context = ApplicationProvider.getApplicationContext();
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context, testId, /* inputFormat= */ MP4_ASSET_AV1_VIDEO_FORMAT, /* outputFormat= */ null);
|
context,
|
||||||
|
testId,
|
||||||
|
/* inputFormat= */ MP4_ASSET_AV1_VIDEO.videoFormat,
|
||||||
|
/* outputFormat= */ null);
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
.setMuxerFactory(new InAppMuxer.Factory.Builder().build())
|
.setMuxerFactory(new InAppMuxer.Factory.Builder().build())
|
||||||
.build();
|
.build();
|
||||||
ImmutableList<Effect> videoEffects = ImmutableList.of(RgbFilter.createGrayscaleFilter());
|
ImmutableList<Effect> videoEffects = ImmutableList.of(RgbFilter.createGrayscaleFilter());
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_AV1_VIDEO_URI_STRING));
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_AV1_VIDEO.uri));
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||||
|
@ -41,6 +41,7 @@ import android.net.Uri;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.util.Assertions;
|
import androidx.media3.common.util.Assertions;
|
||||||
import androidx.media3.transformer.AndroidTestUtil;
|
import androidx.media3.transformer.AndroidTestUtil;
|
||||||
|
import androidx.media3.transformer.AndroidTestUtil.AssetInfo;
|
||||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||||
import androidx.media3.transformer.EditedMediaItem;
|
import androidx.media3.transformer.EditedMediaItem;
|
||||||
import androidx.media3.transformer.Transformer;
|
import androidx.media3.transformer.Transformer;
|
||||||
@ -68,7 +69,7 @@ import org.junit.runners.Parameterized.Parameters;
|
|||||||
"Analysis tests are not used for confirming Transformer is running properly, and not configured"
|
"Analysis tests are not used for confirming Transformer is running properly, and not configured"
|
||||||
+ " for this use as they're missing skip checks for unsupported devices.")
|
+ " for this use as they're missing skip checks for unsupported devices.")
|
||||||
public class BitrateAnalysisTest {
|
public class BitrateAnalysisTest {
|
||||||
private static final ImmutableList<String> INPUT_FILES =
|
private static final ImmutableList<AssetInfo> INPUT_ASSETS =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3,
|
MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3,
|
||||||
MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION,
|
MP4_REMOTE_1280W_720H_5_SECOND_HIGHMOTION,
|
||||||
@ -102,15 +103,15 @@ public class BitrateAnalysisTest {
|
|||||||
public int bitrateMode;
|
public int bitrateMode;
|
||||||
|
|
||||||
@Parameter(2)
|
@Parameter(2)
|
||||||
public @MonotonicNonNull String fileUri;
|
public @MonotonicNonNull AssetInfo assetInfo;
|
||||||
|
|
||||||
@Parameters(name = "analyzeBitrate_{0}_{1}_{2}")
|
@Parameters(name = "analyzeBitrate_{0}_{1}_{2}")
|
||||||
public static List<Object[]> parameters() {
|
public static List<Object[]> parameters() {
|
||||||
List<Object[]> parameterList = new ArrayList<>();
|
List<Object[]> parameterList = new ArrayList<>();
|
||||||
for (int bitrate = START_BITRATE; bitrate <= END_BITRATE; bitrate += BITRATE_INTERVAL) {
|
for (int bitrate = START_BITRATE; bitrate <= END_BITRATE; bitrate += BITRATE_INTERVAL) {
|
||||||
for (int mode : INPUT_BITRATE_MODES) {
|
for (int mode : INPUT_BITRATE_MODES) {
|
||||||
for (String file : INPUT_FILES) {
|
for (AssetInfo assetInfo : INPUT_ASSETS) {
|
||||||
parameterList.add(new Object[] {bitrate, mode, file});
|
parameterList.add(new Object[] {bitrate, mode, assetInfo});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -120,8 +121,9 @@ public class BitrateAnalysisTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void analyzeBitrate() throws Exception {
|
public void analyzeBitrate() throws Exception {
|
||||||
Assertions.checkNotNull(fileUri);
|
Assertions.checkNotNull(assetInfo);
|
||||||
String fileName = Assertions.checkNotNull(Iterables.getLast(Splitter.on("/").split(fileUri)));
|
String fileName =
|
||||||
|
Assertions.checkNotNull(Iterables.getLast(Splitter.on("/").split(assetInfo.uri)));
|
||||||
String testId = String.format("analyzeBitrate_ssim_%s_%d_%s", bitrate, bitrateMode, fileName);
|
String testId = String.format("analyzeBitrate_ssim_%s_%d_%s", bitrate, bitrateMode, fileName);
|
||||||
|
|
||||||
Map<String, Object> inputValues = new HashMap<>();
|
Map<String, Object> inputValues = new HashMap<>();
|
||||||
@ -137,11 +139,8 @@ public class BitrateAnalysisTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri),
|
/* inputFormat= */ assetInfo.videoFormat,
|
||||||
/* outputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri)
|
/* outputFormat= */ assetInfo.videoFormat.buildUpon().setAverageBitrate(bitrate).build());
|
||||||
.buildUpon()
|
|
||||||
.setAverageBitrate(bitrate)
|
|
||||||
.build());
|
|
||||||
|
|
||||||
Transformer transformer =
|
Transformer transformer =
|
||||||
new Transformer.Builder(context)
|
new Transformer.Builder(context)
|
||||||
@ -157,7 +156,7 @@ public class BitrateAnalysisTest {
|
|||||||
.build()))
|
.build()))
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(fileUri)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(assetInfo.uri)))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -27,6 +27,7 @@ import android.net.Uri;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.transformer.AndroidTestUtil;
|
import androidx.media3.transformer.AndroidTestUtil;
|
||||||
|
import androidx.media3.transformer.AndroidTestUtil.AssetInfo;
|
||||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||||
import androidx.media3.transformer.EditedMediaItem;
|
import androidx.media3.transformer.EditedMediaItem;
|
||||||
import androidx.media3.transformer.Transformer;
|
import androidx.media3.transformer.Transformer;
|
||||||
@ -51,11 +52,11 @@ import org.junit.runners.Parameterized.Parameters;
|
|||||||
+ " for this use as they're missing skip checks for unsupported devices.")
|
+ " for this use as they're missing skip checks for unsupported devices.")
|
||||||
public class EncoderPerformanceAnalysisTest {
|
public class EncoderPerformanceAnalysisTest {
|
||||||
|
|
||||||
private static final ImmutableList<String> INPUT_FILES =
|
private static final ImmutableList<AssetInfo> INPUT_ASSETS =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S_URI_STRING,
|
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_320W_240H_15S,
|
||||||
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_URI_STRING,
|
AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS,
|
||||||
AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT_URI_STRING);
|
AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT);
|
||||||
|
|
||||||
private static final ImmutableList<Integer> OPERATING_RATE_SETTINGS =
|
private static final ImmutableList<Integer> OPERATING_RATE_SETTINGS =
|
||||||
ImmutableList.of(VideoEncoderSettings.NO_VALUE, 30, Integer.MAX_VALUE);
|
ImmutableList.of(VideoEncoderSettings.NO_VALUE, 30, Integer.MAX_VALUE);
|
||||||
@ -68,7 +69,7 @@ public class EncoderPerformanceAnalysisTest {
|
|||||||
MEDIA_CODEC_PRIORITY_REALTIME);
|
MEDIA_CODEC_PRIORITY_REALTIME);
|
||||||
|
|
||||||
@Parameter(0)
|
@Parameter(0)
|
||||||
public @MonotonicNonNull String fileUri;
|
public @MonotonicNonNull AssetInfo assetInfo;
|
||||||
|
|
||||||
@Parameter(1)
|
@Parameter(1)
|
||||||
public int operatingRate;
|
public int operatingRate;
|
||||||
@ -79,12 +80,12 @@ public class EncoderPerformanceAnalysisTest {
|
|||||||
@Parameters(name = "analyzePerformance_{0}_OpRate={1}_Priority={2}")
|
@Parameters(name = "analyzePerformance_{0}_OpRate={1}_Priority={2}")
|
||||||
public static ImmutableList<Object[]> parameters() {
|
public static ImmutableList<Object[]> parameters() {
|
||||||
ImmutableList.Builder<Object[]> parametersBuilder = new ImmutableList.Builder<>();
|
ImmutableList.Builder<Object[]> parametersBuilder = new ImmutableList.Builder<>();
|
||||||
for (int i = 0; i < INPUT_FILES.size(); i++) {
|
for (int i = 0; i < INPUT_ASSETS.size(); i++) {
|
||||||
for (int j = 0; j < OPERATING_RATE_SETTINGS.size(); j++) {
|
for (int j = 0; j < OPERATING_RATE_SETTINGS.size(); j++) {
|
||||||
for (int k = 0; k < PRIORITY_SETTINGS.size(); k++) {
|
for (int k = 0; k < PRIORITY_SETTINGS.size(); k++) {
|
||||||
parametersBuilder.add(
|
parametersBuilder.add(
|
||||||
new Object[] {
|
new Object[] {
|
||||||
INPUT_FILES.get(i), OPERATING_RATE_SETTINGS.get(j), PRIORITY_SETTINGS.get(k)
|
INPUT_ASSETS.get(i), OPERATING_RATE_SETTINGS.get(j), PRIORITY_SETTINGS.get(k)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -94,8 +95,8 @@ public class EncoderPerformanceAnalysisTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void analyzeEncoderPerformance() throws Exception {
|
public void analyzeEncoderPerformance() throws Exception {
|
||||||
checkNotNull(fileUri);
|
checkNotNull(assetInfo.uri);
|
||||||
String filename = checkNotNull(Uri.parse(fileUri).getLastPathSegment());
|
String filename = checkNotNull(Uri.parse(assetInfo.uri).getLastPathSegment());
|
||||||
String testId =
|
String testId =
|
||||||
Util.formatInvariant(
|
Util.formatInvariant(
|
||||||
"analyzePerformance_%s_OpRate_%d_Priority_%d", filename, operatingRate, priority);
|
"analyzePerformance_%s_OpRate_%d_Priority_%d", filename, operatingRate, priority);
|
||||||
@ -104,8 +105,8 @@ public class EncoderPerformanceAnalysisTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
context,
|
context,
|
||||||
testId,
|
testId,
|
||||||
/* inputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri),
|
/* inputFormat= */ assetInfo.videoFormat,
|
||||||
/* outputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri));
|
/* outputFormat= */ assetInfo.videoFormat);
|
||||||
|
|
||||||
if (Util.SDK_INT < 23) {
|
if (Util.SDK_INT < 23) {
|
||||||
recordTestSkipped(
|
recordTestSkipped(
|
||||||
@ -133,7 +134,7 @@ public class EncoderPerformanceAnalysisTest {
|
|||||||
.build()))
|
.build()))
|
||||||
.build();
|
.build();
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(fileUri)))
|
new EditedMediaItem.Builder(MediaItem.fromUri(Uri.parse(assetInfo.uri)))
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
@ -54,8 +54,7 @@ public final class RepeatedTranscodeTest {
|
|||||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
new EditedMediaItem.Builder(mediaItem).setEffects(FORCE_TRANSCODE_VIDEO_EFFECTS).build();
|
||||||
|
|
||||||
@ -84,8 +83,7 @@ public final class RepeatedTranscodeTest {
|
|||||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem)
|
new EditedMediaItem.Builder(mediaItem)
|
||||||
.setRemoveAudio(true)
|
.setRemoveAudio(true)
|
||||||
@ -118,8 +116,7 @@ public final class RepeatedTranscodeTest {
|
|||||||
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
.setEncoderFactory(new AndroidTestUtil.ForceEncodeEncoderFactory(context))
|
||||||
.build())
|
.build())
|
||||||
.build();
|
.build();
|
||||||
MediaItem mediaItem =
|
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS.uri));
|
||||||
MediaItem.fromUri(Uri.parse(AndroidTestUtil.MP4_REMOTE_10_SECONDS_URI_STRING));
|
|
||||||
EditedMediaItem editedMediaItem =
|
EditedMediaItem editedMediaItem =
|
||||||
new EditedMediaItem.Builder(mediaItem).setRemoveVideo(true).build();
|
new EditedMediaItem.Builder(mediaItem).setRemoveVideo(true).build();
|
||||||
|
|
||||||
|
@ -42,7 +42,6 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_7680W_4320H
|
|||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
import static androidx.media3.transformer.AndroidTestUtil.assumeFormatsSupported;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.getFormatForTestFile;
|
|
||||||
import static androidx.media3.transformer.ExportTestResult.SSIM_UNSET;
|
import static androidx.media3.transformer.ExportTestResult.SSIM_UNSET;
|
||||||
import static com.google.common.collect.Iterables.getLast;
|
import static com.google.common.collect.Iterables.getLast;
|
||||||
|
|
||||||
@ -53,7 +52,7 @@ import androidx.media3.common.Format;
|
|||||||
import androidx.media3.common.MediaItem;
|
import androidx.media3.common.MediaItem;
|
||||||
import androidx.media3.common.MimeTypes;
|
import androidx.media3.common.MimeTypes;
|
||||||
import androidx.media3.common.util.Util;
|
import androidx.media3.common.util.Util;
|
||||||
import androidx.media3.transformer.AndroidTestUtil;
|
import androidx.media3.transformer.AndroidTestUtil.AssetInfo;
|
||||||
import androidx.media3.transformer.DefaultEncoderFactory;
|
import androidx.media3.transformer.DefaultEncoderFactory;
|
||||||
import androidx.media3.transformer.EditedMediaItem;
|
import androidx.media3.transformer.EditedMediaItem;
|
||||||
import androidx.media3.transformer.Transformer;
|
import androidx.media3.transformer.Transformer;
|
||||||
@ -88,7 +87,7 @@ public class SsimMapperTest {
|
|||||||
|
|
||||||
// When running this test, input file list should be restricted more than this. Binary search can
|
// When running this test, input file list should be restricted more than this. Binary search can
|
||||||
// take up to 40 minutes to complete for a single clip on lower end devices.
|
// take up to 40 minutes to complete for a single clip on lower end devices.
|
||||||
private static final ImmutableList<String> INPUT_FILES =
|
private static final ImmutableList<AssetInfo> INPUT_ASSETS =
|
||||||
ImmutableList.of(
|
ImmutableList.of(
|
||||||
MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED,
|
MP4_REMOTE_256W_144H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED,
|
||||||
MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED,
|
MP4_REMOTE_256W_144H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED,
|
||||||
@ -117,11 +116,11 @@ public class SsimMapperTest {
|
|||||||
@Parameters
|
@Parameters
|
||||||
public static List<Object[]> parameters() {
|
public static List<Object[]> parameters() {
|
||||||
List<Object[]> parameterList = new ArrayList<>();
|
List<Object[]> parameterList = new ArrayList<>();
|
||||||
for (String file : INPUT_FILES) {
|
for (AssetInfo assetInfo : INPUT_ASSETS) {
|
||||||
parameterList.add(new Object[] {file, MimeTypes.VIDEO_H264});
|
parameterList.add(new Object[] {assetInfo, MimeTypes.VIDEO_H264});
|
||||||
// TODO(b/210593256): Test pre 24 once in-app muxing implemented.
|
// TODO(b/210593256): Test pre 24 once in-app muxing implemented.
|
||||||
if (Util.SDK_INT >= 24) {
|
if (Util.SDK_INT >= 24) {
|
||||||
parameterList.add(new Object[] {file, MimeTypes.VIDEO_H265});
|
parameterList.add(new Object[] {assetInfo, MimeTypes.VIDEO_H265});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return parameterList;
|
return parameterList;
|
||||||
@ -129,7 +128,7 @@ public class SsimMapperTest {
|
|||||||
|
|
||||||
@Parameter(0)
|
@Parameter(0)
|
||||||
@Nullable
|
@Nullable
|
||||||
public String fileUri;
|
public AssetInfo assetInfo;
|
||||||
|
|
||||||
@Parameter(1)
|
@Parameter(1)
|
||||||
@Nullable
|
@Nullable
|
||||||
@ -137,7 +136,6 @@ public class SsimMapperTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void findSsimMapping() throws Exception {
|
public void findSsimMapping() throws Exception {
|
||||||
String fileUri = checkNotNull(this.fileUri);
|
|
||||||
String mimeType = checkNotNull(this.mimeType);
|
String mimeType = checkNotNull(this.mimeType);
|
||||||
|
|
||||||
String testIdPrefix =
|
String testIdPrefix =
|
||||||
@ -147,11 +145,11 @@ public class SsimMapperTest {
|
|||||||
assumeFormatsSupported(
|
assumeFormatsSupported(
|
||||||
ApplicationProvider.getApplicationContext(),
|
ApplicationProvider.getApplicationContext(),
|
||||||
testIdPrefix + "_codecSupport",
|
testIdPrefix + "_codecSupport",
|
||||||
/* inputFormat= */ getFormatForTestFile(fileUri),
|
/* inputFormat= */ assetInfo.videoFormat,
|
||||||
/* outputFormat= */ null);
|
/* outputFormat= */ null);
|
||||||
|
|
||||||
new SsimBinarySearcher(
|
new SsimBinarySearcher(
|
||||||
ApplicationProvider.getApplicationContext(), testIdPrefix, fileUri, mimeType)
|
ApplicationProvider.getApplicationContext(), testIdPrefix, assetInfo, mimeType)
|
||||||
.search();
|
.search();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,18 +176,18 @@ public class SsimMapperTest {
|
|||||||
*
|
*
|
||||||
* @param context The {@link Context}.
|
* @param context The {@link Context}.
|
||||||
* @param testIdPrefix The test ID prefix.
|
* @param testIdPrefix The test ID prefix.
|
||||||
* @param videoUri The URI of the video to transform.
|
* @param assetInfo The video {@link AssetInfo} to transform.
|
||||||
* @param outputMimeType The video sample MIME type to output, see {@link
|
* @param outputMimeType The video sample MIME type to output, see {@link
|
||||||
* Transformer.Builder#setVideoMimeType}.
|
* Transformer.Builder#setVideoMimeType}.
|
||||||
*/
|
*/
|
||||||
public SsimBinarySearcher(
|
public SsimBinarySearcher(
|
||||||
Context context, String testIdPrefix, String videoUri, String outputMimeType) {
|
Context context, String testIdPrefix, AssetInfo assetInfo, String outputMimeType) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.testIdPrefix = testIdPrefix;
|
this.testIdPrefix = testIdPrefix;
|
||||||
this.videoUri = videoUri;
|
this.videoUri = assetInfo.uri;
|
||||||
this.outputMimeType = outputMimeType;
|
this.outputMimeType = outputMimeType;
|
||||||
exportsLeft = MAX_EXPORTS;
|
exportsLeft = MAX_EXPORTS;
|
||||||
format = AndroidTestUtil.getFormatForTestFile(videoUri);
|
format = assetInfo.videoFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -20,8 +20,7 @@ import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIX
|
|||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.createArgb8888BitmapFromRgba8888Image;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888;
|
||||||
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
|
||||||
import static androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay;
|
import static androidx.media3.transformer.mh.performance.PlaybackTestUtil.createTimestampOverlay;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static com.google.common.truth.Truth.assertWithMessage;
|
import static com.google.common.truth.Truth.assertWithMessage;
|
||||||
@ -91,8 +90,8 @@ public class CompositionPlaybackTest {
|
|||||||
ConditionVariable hasRenderedFirstFrameCondition = new ConditionVariable();
|
ConditionVariable hasRenderedFirstFrameCondition = new ConditionVariable();
|
||||||
outputImageReader =
|
outputImageReader =
|
||||||
ImageReader.newInstance(
|
ImageReader.newInstance(
|
||||||
MP4_ASSET_FORMAT.width,
|
MP4_ASSET.videoFormat.width,
|
||||||
MP4_ASSET_FORMAT.height,
|
MP4_ASSET.videoFormat.height,
|
||||||
PixelFormat.RGBA_8888,
|
PixelFormat.RGBA_8888,
|
||||||
/* maxImages= */ 1);
|
/* maxImages= */ 1);
|
||||||
|
|
||||||
@ -110,11 +109,11 @@ public class CompositionPlaybackTest {
|
|||||||
|
|
||||||
player.setVideoSurface(
|
player.setVideoSurface(
|
||||||
outputImageReader.getSurface(),
|
outputImageReader.getSurface(),
|
||||||
new Size(MP4_ASSET_FORMAT.width, MP4_ASSET_FORMAT.height));
|
new Size(MP4_ASSET.videoFormat.width, MP4_ASSET.videoFormat.height));
|
||||||
player.setComposition(
|
player.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setEffects(
|
.setEffects(
|
||||||
new Effects(
|
new Effects(
|
||||||
/* audioProcessors= */ ImmutableList.of(),
|
/* audioProcessors= */ ImmutableList.of(),
|
||||||
|
@ -17,8 +17,7 @@
|
|||||||
package androidx.media3.transformer.mh.performance;
|
package androidx.media3.transformer.mh.performance;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Util.usToMs;
|
import static androidx.media3.common.util.Util.usToMs;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DURATION_US;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
|
||||||
import static com.google.common.collect.Iterables.getLast;
|
import static com.google.common.collect.Iterables.getLast;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -131,7 +130,8 @@ public class CompositionPlayerSeekTest {
|
|||||||
// Plays the second video
|
// Plays the second video
|
||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
MP4_ASSET_TIMESTAMPS_US, timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
MP4_ASSET_TIMESTAMPS_US,
|
||||||
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
// Seeked after the first playback ends, so the timestamps are repeated twice.
|
// Seeked after the first playback ends, so the timestamps are repeated twice.
|
||||||
ImmutableList<Long> expectedTimestampsUs =
|
ImmutableList<Long> expectedTimestampsUs =
|
||||||
@ -160,7 +160,8 @@ public class CompositionPlayerSeekTest {
|
|||||||
// Plays the second video
|
// Plays the second video
|
||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
MP4_ASSET_TIMESTAMPS_US, timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
MP4_ASSET_TIMESTAMPS_US,
|
||||||
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> actualTimestampsUs =
|
ImmutableList<Long> actualTimestampsUs =
|
||||||
@ -188,7 +189,7 @@ public class CompositionPlayerSeekTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
Iterables.skip(MP4_ASSET_TIMESTAMPS_US, /* numberToSkip= */ 3),
|
Iterables.skip(MP4_ASSET_TIMESTAMPS_US, /* numberToSkip= */ 3),
|
||||||
timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> actualTimestampsUs =
|
ImmutableList<Long> actualTimestampsUs =
|
||||||
@ -214,13 +215,14 @@ public class CompositionPlayerSeekTest {
|
|||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
Iterables.limit(MP4_ASSET_TIMESTAMPS_US, /* limitSize= */ 15),
|
Iterables.limit(MP4_ASSET_TIMESTAMPS_US, /* limitSize= */ 15),
|
||||||
timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
// Seek to the first, skipping the first three frames.
|
// Seek to the first, skipping the first three frames.
|
||||||
.addAll(Iterables.skip(MP4_ASSET_TIMESTAMPS_US, /* numberToSkip= */ 3))
|
.addAll(Iterables.skip(MP4_ASSET_TIMESTAMPS_US, /* numberToSkip= */ 3))
|
||||||
// Plays the second video
|
// Plays the second video
|
||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
MP4_ASSET_TIMESTAMPS_US, timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
MP4_ASSET_TIMESTAMPS_US,
|
||||||
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> actualTimestampsUs =
|
ImmutableList<Long> actualTimestampsUs =
|
||||||
@ -236,7 +238,7 @@ public class CompositionPlayerSeekTest {
|
|||||||
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
PlayerTestListener listener = new PlayerTestListener(TEST_TIMEOUT_MS);
|
||||||
int numberOfFramesBeforeSeeking = 15;
|
int numberOfFramesBeforeSeeking = 15;
|
||||||
// Seek to the duration of the first video.
|
// Seek to the duration of the first video.
|
||||||
long seekTimeMs = usToMs(MP4_ASSET_DURATION_US);
|
long seekTimeMs = usToMs(MP4_ASSET.videoDurationUs);
|
||||||
|
|
||||||
ImmutableList<Long> expectedTimestampsUs =
|
ImmutableList<Long> expectedTimestampsUs =
|
||||||
new ImmutableList.Builder<Long>()
|
new ImmutableList.Builder<Long>()
|
||||||
@ -245,7 +247,8 @@ public class CompositionPlayerSeekTest {
|
|||||||
// Plays the second video
|
// Plays the second video
|
||||||
.addAll(
|
.addAll(
|
||||||
Iterables.transform(
|
Iterables.transform(
|
||||||
MP4_ASSET_TIMESTAMPS_US, timestampUs -> (MP4_ASSET_DURATION_US + timestampUs)))
|
MP4_ASSET_TIMESTAMPS_US,
|
||||||
|
timestampUs -> (MP4_ASSET.videoDurationUs + timestampUs)))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> actualTimestampsUs =
|
ImmutableList<Long> actualTimestampsUs =
|
||||||
@ -268,7 +271,7 @@ public class CompositionPlayerSeekTest {
|
|||||||
// Play the first 15 frames of the first video
|
// Play the first 15 frames of the first video
|
||||||
.addAll(Iterables.limit(MP4_ASSET_TIMESTAMPS_US, /* limitSize= */ 15))
|
.addAll(Iterables.limit(MP4_ASSET_TIMESTAMPS_US, /* limitSize= */ 15))
|
||||||
// Seeking to/beyond the end plays the last frame.
|
// Seeking to/beyond the end plays the last frame.
|
||||||
.add(MP4_ASSET_DURATION_US + getLast(MP4_ASSET_TIMESTAMPS_US))
|
.add(MP4_ASSET.videoDurationUs + getLast(MP4_ASSET_TIMESTAMPS_US))
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
ImmutableList<Long> actualTimestampsUs =
|
ImmutableList<Long> actualTimestampsUs =
|
||||||
@ -279,9 +282,9 @@ public class CompositionPlayerSeekTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plays the {@link AndroidTestUtil#MP4_ASSET_URI_STRING} for {@code videoLoopCount} times, seeks
|
* Plays the {@link AndroidTestUtil#MP4_ASSET} for {@code videoLoopCount} times, seeks after
|
||||||
* after {@code numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the
|
* {@code numberOfFramesBeforeSeeking} frames to {@code seekTimeMs}, and returns the timestamps of
|
||||||
* timestamps of the processed frames, in microsecond.
|
* the processed frames, in microsecond.
|
||||||
*/
|
*/
|
||||||
private ImmutableList<Long> playCompositionOfTwoVideosAndGetTimestamps(
|
private ImmutableList<Long> playCompositionOfTwoVideosAndGetTimestamps(
|
||||||
PlayerTestListener listener, int numberOfFramesBeforeSeeking, long seekTimeMs)
|
PlayerTestListener listener, int numberOfFramesBeforeSeeking, long seekTimeMs)
|
||||||
@ -353,8 +356,8 @@ public class CompositionPlayerSeekTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static EditedMediaItem createEditedMediaItem(List<Effect> videoEffects) {
|
private static EditedMediaItem createEditedMediaItem(List<Effect> videoEffects) {
|
||||||
return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET_URI_STRING))
|
return new EditedMediaItem.Builder(MediaItem.fromUri(MP4_ASSET.uri))
|
||||||
.setDurationUs(MP4_ASSET_DURATION_US)
|
.setDurationUs(MP4_ASSET.videoDurationUs)
|
||||||
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
.setEffects(new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
package androidx.media3.transformer.mh.performance;
|
package androidx.media3.transformer.mh.performance;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
@ -97,8 +97,8 @@ public class VideoCompositionPreviewPerformanceTest {
|
|||||||
player.setComposition(
|
player.setComposition(
|
||||||
new Composition.Builder(
|
new Composition.Builder(
|
||||||
new EditedMediaItemSequence(
|
new EditedMediaItemSequence(
|
||||||
getClippedEditedMediaItem(MP4_ASSET_URI_STRING, new Contrast(.2f)),
|
getClippedEditedMediaItem(MP4_ASSET.uri, new Contrast(.2f)),
|
||||||
getClippedEditedMediaItem(MP4_ASSET_URI_STRING, new Contrast(-.2f))))
|
getClippedEditedMediaItem(MP4_ASSET.uri, new Contrast(-.2f))))
|
||||||
.build());
|
.build());
|
||||||
player.prepare();
|
player.prepare();
|
||||||
});
|
});
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
package androidx.media3.transformer.mh.performance;
|
package androidx.media3.transformer.mh.performance;
|
||||||
|
|
||||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING;
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET;
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import android.app.Instrumentation;
|
import android.app.Instrumentation;
|
||||||
@ -80,7 +80,7 @@ public class VideoEffectsPreviewPerformanceTest {
|
|||||||
player.addAnalyticsListener(listener);
|
player.addAnalyticsListener(listener);
|
||||||
// Adding an EventLogger to use its log output in case the test fails.
|
// Adding an EventLogger to use its log output in case the test fails.
|
||||||
player.addAnalyticsListener(new EventLogger());
|
player.addAnalyticsListener(new EventLogger());
|
||||||
MediaItem mediaItem = getClippedMediaItem(MP4_ASSET_URI_STRING);
|
MediaItem mediaItem = getClippedMediaItem(MP4_ASSET.uri);
|
||||||
// Use the same media item so that format changes do not force exoplayer to re-init codecs
|
// Use the same media item so that format changes do not force exoplayer to re-init codecs
|
||||||
// between item transitions.
|
// between item transitions.
|
||||||
player.addMediaItems(ImmutableList.of(mediaItem, mediaItem, mediaItem, mediaItem));
|
player.addMediaItems(ImmutableList.of(mediaItem, mediaItem, mediaItem, mediaItem));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user