mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Test: Use AssumptionViolatedException for HDR capability check.
Also, use a common util method PiperOrigin-RevId: 616815502
This commit is contained in:
parent
e8612a0c02
commit
2fa38d15dd
@ -26,7 +26,7 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECO
|
||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||
import static androidx.media3.transformer.EncoderUtil.getSupportedEncodersForHdrEditing;
|
||||
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
|
||||
import static androidx.media3.transformer.mh.UnoptimizedGlEffect.NO_OP_EFFECT;
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@ -230,7 +230,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noEffects_hlg10Input_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -258,7 +258,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noEffects_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -288,7 +288,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
|
||||
@Test
|
||||
public void noEffects_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||
assumeDeviceSupportsHdrEditing(MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT);
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId,
|
||||
MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.sampleMimeType,
|
||||
MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.colorInfo);
|
||||
assumeDeviceSupportsUltraHdrEditing();
|
||||
ColorInfo outputColorInfo =
|
||||
new ColorInfo.Builder()
|
||||
@ -323,7 +326,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noEffects_hdr10Input_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -351,7 +354,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noEffects_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -381,7 +384,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
|
||||
@Test
|
||||
public void noEffects_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
|
||||
assumeDeviceSupportsUltraHdrEditing();
|
||||
ColorInfo outputColorInfo =
|
||||
new ColorInfo.Builder()
|
||||
@ -416,7 +422,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noOpEffect_hlg10Input_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -445,7 +451,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noOpEffect_hlg10TextureInput_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -475,7 +481,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
|
||||
@Test
|
||||
public void noOpEffect_hlg10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
|
||||
assumeDeviceSupportsUltraHdrEditing();
|
||||
ColorInfo outputColorInfo =
|
||||
new ColorInfo.Builder()
|
||||
@ -511,7 +520,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noOpEffect_hdr10Input_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -540,7 +549,7 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
public void noOpEffect_hdr10TextureInput_matchesGoldenFile() throws Exception {
|
||||
Context context = getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
assumeDeviceSupportsHdrEditing(format);
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
return;
|
||||
@ -570,7 +579,10 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
|
||||
@Test
|
||||
public void noOpEffect_hdr10UltraHDRImageInput_matchesGoldenFile() throws Exception {
|
||||
assumeDeviceSupportsHdrEditing(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT);
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.sampleMimeType,
|
||||
MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
|
||||
assumeDeviceSupportsUltraHdrEditing();
|
||||
ColorInfo outputColorInfo =
|
||||
new ColorInfo.Builder()
|
||||
@ -694,17 +706,6 @@ public final class DefaultVideoFrameProcessorTextureOutputPixelTest {
|
||||
.setBitmapReader(textureBitmapReader);
|
||||
}
|
||||
|
||||
private void assumeDeviceSupportsHdrEditing(Format format) throws JSONException, IOException {
|
||||
if (getSupportedEncodersForHdrEditing(format.sampleMimeType, format.colorInfo).isEmpty()) {
|
||||
String skipReason =
|
||||
format.colorInfo.colorTransfer == C.COLOR_TRANSFER_HLG
|
||||
? "No HLG editing support."
|
||||
: "No PQ editing support.";
|
||||
recordTestSkipped(getApplicationContext(), testId, skipReason);
|
||||
throw new AssumptionViolatedException(skipReason);
|
||||
}
|
||||
}
|
||||
|
||||
private void assumeDeviceSupportsUltraHdrEditing() throws JSONException, IOException {
|
||||
if (Util.SDK_INT < 34) {
|
||||
recordTestSkipped(
|
||||
|
@ -15,17 +15,21 @@
|
||||
*/
|
||||
package androidx.media3.transformer.mh;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkState;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.recordTestSkipped;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported;
|
||||
import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.media3.common.ColorInfo;
|
||||
import androidx.media3.common.Format;
|
||||
import androidx.media3.common.util.GlUtil;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.exoplayer.mediacodec.MediaCodecUtil;
|
||||
import androidx.media3.transformer.EncoderUtil;
|
||||
import java.io.IOException;
|
||||
import org.json.JSONException;
|
||||
import org.junit.AssumptionViolatedException;
|
||||
|
||||
/** Utility class for checking HDR capabilities. */
|
||||
public final class HdrCapabilitiesUtil {
|
||||
@ -56,5 +60,20 @@ public final class HdrCapabilitiesUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Assumes that the device supports HDR editing for the given {@code colorInfo}.
|
||||
*
|
||||
* @throws AssumptionViolatedException if the device does not support HDR editing.
|
||||
*/
|
||||
public static void assumeDeviceSupportsHdrEditing(
|
||||
String testId, String mimeType, ColorInfo colorInfo) throws JSONException, IOException {
|
||||
checkState(ColorInfo.isTransferHdr(colorInfo));
|
||||
if (EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty()) {
|
||||
String skipReason = "No HDR editing support for " + colorInfo;
|
||||
recordTestSkipped(getApplicationContext(), testId, skipReason);
|
||||
throw new AssumptionViolatedException(skipReason);
|
||||
}
|
||||
}
|
||||
|
||||
private HdrCapabilitiesUtil() {}
|
||||
}
|
||||
|
@ -15,8 +15,6 @@
|
||||
*/
|
||||
package androidx.media3.transformer.mh;
|
||||
|
||||
import static androidx.media3.common.MimeTypes.VIDEO_H265;
|
||||
import static androidx.media3.common.util.Assertions.checkState;
|
||||
import static androidx.media3.test.utils.TestUtil.retrieveTrackFormat;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.FORCE_TRANSCODE_VIDEO_EFFECTS;
|
||||
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10;
|
||||
@ -28,19 +26,18 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_DOLBY_VISION
|
||||
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_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL;
|
||||
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import androidx.media3.common.C;
|
||||
import androidx.media3.common.ColorInfo;
|
||||
import androidx.media3.common.Format;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.common.util.Util;
|
||||
import androidx.media3.transformer.AndroidTestUtil;
|
||||
import androidx.media3.transformer.Composition;
|
||||
import androidx.media3.transformer.EditedMediaItem;
|
||||
import androidx.media3.transformer.EncoderUtil;
|
||||
import androidx.media3.transformer.ExportException;
|
||||
import androidx.media3.transformer.ExportTestResult;
|
||||
import androidx.media3.transformer.TransformationRequest;
|
||||
@ -143,10 +140,7 @@ public final class HdrEditingTest {
|
||||
public void exportAndTranscode_hdr10File_whenHdrEditingIsSupported() throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
|
||||
recordTestSkipped(context, testId, /* reason= */ "Device lacks HDR10 editing support.");
|
||||
return;
|
||||
}
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
|
||||
@ -174,10 +168,7 @@ public final class HdrEditingTest {
|
||||
public void exportAndTranscode_hlg10File_whenHdrEditingIsSupported() throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
|
||||
recordTestSkipped(context, testId, /* reason= */ "Device lacks HLG10 editing support.");
|
||||
return;
|
||||
}
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
|
||||
@ -205,10 +196,7 @@ public final class HdrEditingTest {
|
||||
public void exportAndTranscode_dolbyVisionFile_whenHdrEditingIsSupported() throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Format format = MP4_ASSET_DOLBY_VISION_HDR_FORMAT;
|
||||
if (!deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
|
||||
recordTestSkipped(context, testId, /* reason= */ "Device lacks HLG10 editing support.");
|
||||
return;
|
||||
}
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ format)) {
|
||||
@ -237,10 +225,7 @@ public final class HdrEditingTest {
|
||||
throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Format format = MP4_ASSET_720P_4_SECOND_HDR10_FORMAT;
|
||||
if (deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
|
||||
recordTestSkipped(context, testId, /* reason= */ "Device supports HDR10 editing.");
|
||||
return;
|
||||
}
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
@ -302,10 +287,7 @@ public final class HdrEditingTest {
|
||||
throws Exception {
|
||||
Context context = ApplicationProvider.getApplicationContext();
|
||||
Format format = MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT;
|
||||
if (deviceSupportsHdrEditing(VIDEO_H265, format.colorInfo)) {
|
||||
recordTestSkipped(context, testId, /* reason= */ "Device supports HLG10 editing.");
|
||||
return;
|
||||
}
|
||||
assumeDeviceSupportsHdrEditing(testId, format.sampleMimeType, format.colorInfo);
|
||||
|
||||
if (AndroidTestUtil.skipAndLogIfFormatsUnsupported(
|
||||
context, testId, /* inputFormat= */ format, /* outputFormat= */ null)) {
|
||||
@ -359,9 +341,4 @@ public final class HdrEditingTest {
|
||||
throw exception;
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {
|
||||
checkState(ColorInfo.isTransferHdr(colorInfo));
|
||||
return !EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty();
|
||||
}
|
||||
}
|
||||
|
@ -28,14 +28,13 @@ import static androidx.media3.transformer.SequenceEffectTestUtil.SINGLE_30_FPS_V
|
||||
import static androidx.media3.transformer.SequenceEffectTestUtil.assertBitmapsMatchExpectedAndSave;
|
||||
import static androidx.media3.transformer.SequenceEffectTestUtil.clippedVideo;
|
||||
import static androidx.media3.transformer.SequenceEffectTestUtil.createComposition;
|
||||
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsHdrEditing;
|
||||
import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.skipAndLogIfOpenGlToneMappingUnsupported;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assume.assumeFalse;
|
||||
import static org.junit.Assume.assumeTrue;
|
||||
|
||||
import android.content.Context;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.media3.common.ColorInfo;
|
||||
import androidx.media3.common.Effect;
|
||||
import androidx.media3.common.MediaItem;
|
||||
import androidx.media3.effect.Presentation;
|
||||
@ -43,7 +42,6 @@ import androidx.media3.effect.RgbFilter;
|
||||
import androidx.media3.effect.ScaleAndRotateTransformation;
|
||||
import androidx.media3.transformer.Composition;
|
||||
import androidx.media3.transformer.EditedMediaItemSequence;
|
||||
import androidx.media3.transformer.EncoderUtil;
|
||||
import androidx.media3.transformer.ExportException;
|
||||
import androidx.media3.transformer.ExportTestResult;
|
||||
import androidx.media3.transformer.Transformer;
|
||||
@ -119,10 +117,8 @@ public final class TransformerSequenceEffectTestWithHdr {
|
||||
@Test
|
||||
@RequiresNonNull("testId")
|
||||
public void export_withHdrThenSdr_throws_whenHdrEditingSupported() throws Exception {
|
||||
assumeTrue(
|
||||
"Device does not support HDR10 editing.",
|
||||
deviceSupportsHdrEditing(
|
||||
VIDEO_H265, checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo)));
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId, VIDEO_H265, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
|
||||
assumeFalse(
|
||||
skipAndLogIfFormatsUnsupported(
|
||||
context,
|
||||
@ -162,10 +158,8 @@ public final class TransformerSequenceEffectTestWithHdr {
|
||||
@Test
|
||||
@RequiresNonNull("testId")
|
||||
public void export_withHdrThenSdr_whenHdrEditingUnsupported() throws Exception {
|
||||
assumeFalse(
|
||||
"Device supports HDR10 editing.",
|
||||
deviceSupportsHdrEditing(
|
||||
VIDEO_H265, checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo)));
|
||||
assumeDeviceSupportsHdrEditing(
|
||||
testId, VIDEO_H265, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo);
|
||||
assumeFalse(
|
||||
skipAndLogIfOpenGlToneMappingUnsupported(
|
||||
testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT));
|
||||
@ -199,8 +193,4 @@ public final class TransformerSequenceEffectTestWithHdr {
|
||||
assertBitmapsMatchExpectedAndSave(
|
||||
extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId);
|
||||
}
|
||||
|
||||
private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) {
|
||||
return !EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty();
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user