From 6d9baa6e99b3893181a3000a014b7e418dc3590b Mon Sep 17 00:00:00 2001 From: andrewlewis Date: Wed, 15 Feb 2023 13:17:09 +0000 Subject: [PATCH] Skip tests if muxing is unsupported PiperOrigin-RevId: 509802784 --- .../transformer/AndroidTestUtil.java | 39 ++++++++++++------- .../mh/ForceInterpretHdrVideoAsSdrTest.java | 12 +++--- .../ToneMapHdrToSdrUsingOpenGlPixelTest.java | 14 +++---- .../mh/ToneMapHdrToSdrUsingOpenGlTest.java | 12 +++--- .../transformer/mh/TranscodeQualityTest.java | 12 +++--- .../transformer/mh/TransformationTest.java | 13 +++---- .../mh/analysis/BitrateAnalysisTest.java | 8 ++-- .../EncoderPerformanceAnalysisTest.java | 6 +-- .../mh/analysis/SsimMapperTest.java | 8 ++-- 9 files changed, 67 insertions(+), 57 deletions(-) diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java index c0afd0dc0e..880a34d7b7 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/AndroidTestUtil.java @@ -580,43 +580,48 @@ public final class AndroidTestUtil { } /** - * Checks whether the test should be skipped because the device is incapable of decoding and - * encoding the given formats. + * Returns whether the test should be skipped because the device is incapable of decoding the + * input format, or encoding/muxing the output format. Assumes the input will always need to be + * decoded, and both encoded and muxed if {@code outputFormat} is non-null. * *

If the test should be skipped, logs the reason for skipping. * * @param context The {@link Context context}. * @param testId The test ID. - * @param decodingFormat The {@link Format format} to decode. - * @param encodingFormat The {@link Format format} to encode, optional. + * @param inputFormat The {@link Format format} to decode. + * @param outputFormat The {@link Format format} to encode/mux or {@code null} if the output won't + * be encoded or muxed. * @return Whether the test should be skipped. */ - public static boolean skipAndLogIfInsufficientCodecSupport( - Context context, String testId, Format decodingFormat, @Nullable Format encodingFormat) + public static boolean skipAndLogIfFormatsUnsupported( + Context context, String testId, Format inputFormat, @Nullable Format outputFormat) throws IOException, JSONException { boolean canDecode = false; @Nullable MediaCodecUtil.DecoderQueryException queryException = null; try { - canDecode = canDecode(decodingFormat); + canDecode = canDecode(inputFormat); } catch (MediaCodecUtil.DecoderQueryException e) { queryException = e; } - boolean canEncode = encodingFormat == null || canEncode(encodingFormat); - - if (canDecode && canEncode) { + boolean canEncode = outputFormat == null || canEncode(outputFormat); + boolean canMux = outputFormat == null || canMux(outputFormat); + if (canDecode && canEncode && canMux) { return false; } StringBuilder skipReasonBuilder = new StringBuilder(); if (!canDecode) { - skipReasonBuilder.append("Cannot decode ").append(decodingFormat).append('\n'); + skipReasonBuilder.append("Cannot decode ").append(inputFormat).append('\n'); if (queryException != null) { skipReasonBuilder.append(queryException).append('\n'); } } if (!canEncode) { - skipReasonBuilder.append("Cannot encode ").append(encodingFormat); + skipReasonBuilder.append("Cannot encode ").append(outputFormat); + } + if (!canMux) { + skipReasonBuilder.append("Cannot mux ").append(outputFormat); } recordTestSkipped(context, testId, skipReasonBuilder.toString()); return true; @@ -714,7 +719,7 @@ public final class AndroidTestUtil { } /** - * Checks whether the top ranked encoder from {@link EncoderUtil#getSupportedEncoders} supports + * Returns whether the top ranked encoder from {@link EncoderUtil#getSupportedEncoders} supports * the given resolution and {@linkplain Format#averageBitrate bitrate}. * *

Assumes support encoding if the {@link Format#averageBitrate bitrate} is not set. @@ -737,6 +742,14 @@ public final class AndroidTestUtil { return sizeSupported && bitrateSupported; } + /** Returns whether the specified format can be muxed via the default muxer. */ + private static boolean canMux(Format format) { + String mimeType = checkNotNull(format.sampleMimeType); + return new DefaultMuxer.Factory() + .getSupportedSampleMimeTypes(MimeTypes.getTrackType(mimeType)) + .contains(mimeType); + } + /** * Creates a {@link File} of the {@code fileName} in the application cache directory. * diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java index 9d4f15f702..5a43422f1f 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java @@ -51,11 +51,11 @@ public class ForceInterpretHdrVideoAsSdrTest { String testId = "forceInterpretHdrVideoAsSdrTest_hdr10File_transformsOrThrows"; Context context = ApplicationProvider.getApplicationContext(); - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, + /* outputFormat= */ null)) { return; } @@ -87,11 +87,11 @@ public class ForceInterpretHdrVideoAsSdrTest { String testId = "forceInterpretHdrVideoAsSdrTest_hlg10File_transformsOrThrows"; Context context = ApplicationProvider.getApplicationContext(); - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, + /* outputFormat= */ null)) { return; } diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java index 4c89491754..4c57ae4eb7 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java @@ -21,7 +21,7 @@ import static com.google.android.exoplayer2.testutil.BitmapPixelTestUtil.readBit import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.recordTestSkipped; -import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfInsufficientCodecSupport; +import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported; import static com.google.common.truth.Truth.assertThat; import android.graphics.Bitmap; @@ -95,11 +95,11 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV); return; } - if (skipAndLogIfInsufficientCodecSupport( + if (skipAndLogIfFormatsUnsupported( getApplicationContext(), testId, - /* decodingFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, + /* outputFormat= */ null)) { return; } ColorInfo hlgColor = @@ -158,11 +158,11 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV); return; } - if (skipAndLogIfInsufficientCodecSupport( + if (skipAndLogIfFormatsUnsupported( getApplicationContext(), testId, - /* decodingFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, + /* outputFormat= */ null)) { return; } ColorInfo pqColor = diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java index 2f40b5106d..d033892df4 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java @@ -68,11 +68,11 @@ public class ToneMapHdrToSdrUsingOpenGlTest { return; } - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( getApplicationContext(), testId, - /* decodingFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, + /* outputFormat= */ null)) { return; } @@ -119,11 +119,11 @@ public class ToneMapHdrToSdrUsingOpenGlTest { return; } - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( getApplicationContext(), testId, - /* decodingFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_ASSET_1080P_4_SECOND_HDR10_FORMAT, + /* outputFormat= */ null)) { return; } diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java index af53257379..6da9fb099b 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TranscodeQualityTest.java @@ -44,11 +44,11 @@ public final class TranscodeQualityTest { Context context = ApplicationProvider.getApplicationContext(); String testId = "transformHighQualityTargetingAvcToAvc1920x1080_ssim"; - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT, - /* encodingFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT)) { + /* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT, + /* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT)) { return; } @@ -86,11 +86,11 @@ public final class TranscodeQualityTest { Context context = ApplicationProvider.getApplicationContext(); String testId = "transcodeAvcToHevc_ssim"; - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT, - /* encodingFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT + /* inputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT, + /* outputFormat= */ AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT .buildUpon() .setSampleMimeType(MimeTypes.VIDEO_H265) .build())) { diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java index 6e0d18096b..dd41f006be 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/TransformationTest.java @@ -105,11 +105,11 @@ public class TransformationTest { String testId = TAG + "_transform4K60"; Context context = ApplicationProvider.getApplicationContext(); - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ MP4_REMOTE_4K60_PORTRAIT_FORMAT, - /* encodingFormat= */ null)) { + /* inputFormat= */ MP4_REMOTE_4K60_PORTRAIT_FORMAT, + /* outputFormat= */ null)) { return; } @@ -130,11 +130,8 @@ public class TransformationTest { String testId = TAG + "_transform8K24"; Context context = ApplicationProvider.getApplicationContext(); - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( - context, - testId, - /* decodingFormat= */ MP4_REMOTE_8K24_FORMAT, - /* encodingFormat= */ null)) { + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( + context, testId, /* inputFormat= */ MP4_REMOTE_8K24_FORMAT, /* outputFormat= */ null)) { return; } Transformer transformer = diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java index e0ec151c1c..765f96773f 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/BitrateAnalysisTest.java @@ -34,7 +34,7 @@ import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMO import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMOTE_3840W_2160H_5_SECOND_HIGHMOTION; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMOTE_640W_480H_31_SECOND_ROOF_SONYXPERIAXZ3; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMOTE_7680W_4320H_31_SECOND_ROOF_SAMSUNGS20ULTRA5G; -import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfInsufficientCodecSupport; +import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported; import android.content.Context; import android.net.Uri; @@ -130,11 +130,11 @@ public class BitrateAnalysisTest { } Context context = ApplicationProvider.getApplicationContext(); - if (skipAndLogIfInsufficientCodecSupport( + if (skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri), - /* encodingFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri) + /* inputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri), + /* outputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri) .buildUpon() .setAverageBitrate(bitrate) .build())) { diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java index 34b3ba2546..576917c569 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/EncoderPerformanceAnalysisTest.java @@ -96,11 +96,11 @@ public class EncoderPerformanceAnalysisTest { "analyzePerformance_%s_OpRate_%d_Priority_%d", filename, operatingRate, priority); Context context = ApplicationProvider.getApplicationContext(); - if (AndroidTestUtil.skipAndLogIfInsufficientCodecSupport( + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( context, testId, - /* decodingFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri), - /* encodingFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri))) { + /* inputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri), + /* outputFormat= */ AndroidTestUtil.getFormatForTestFile(fileUri))) { return; } diff --git a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/SsimMapperTest.java b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/SsimMapperTest.java index edaadb6dbc..83322e87cb 100644 --- a/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/SsimMapperTest.java +++ b/library/transformer/src/androidTest/java/com/google/android/exoplayer2/transformer/mh/analysis/SsimMapperTest.java @@ -40,7 +40,7 @@ import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMO import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_ONEPLUSNORD2_DOWNSAMPLED; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.MP4_REMOTE_854W_480H_30_SECOND_ROOF_REDMINOTE9_DOWNSAMPLED; import static com.google.android.exoplayer2.transformer.AndroidTestUtil.getFormatForTestFile; -import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfInsufficientCodecSupport; +import static com.google.android.exoplayer2.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported; import static com.google.android.exoplayer2.transformer.ExportTestResult.SSIM_UNSET; import static com.google.android.exoplayer2.util.Assertions.checkNotNull; import static com.google.android.exoplayer2.util.Assertions.checkState; @@ -141,11 +141,11 @@ public class SsimMapperTest { String.format( "ssim_search_VBR_%s", checkNotNull(getLast(FORWARD_SLASH_SPLITTER.split(mimeType)))); - if (skipAndLogIfInsufficientCodecSupport( + if (skipAndLogIfFormatsUnsupported( ApplicationProvider.getApplicationContext(), testIdPrefix + "_codecSupport", - /* decodingFormat= */ getFormatForTestFile(fileUri), - /* encodingFormat= */ null)) { + /* inputFormat= */ getFormatForTestFile(fileUri), + /* outputFormat= */ null)) { return; }