From 797ee99baf697cf070002bd1255d06e6c1346815 Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Wed, 7 Jun 2023 15:14:09 +0000 Subject: [PATCH] Test: Move duplicated GL tone mapping logic into helper methods. PiperOrigin-RevId: 538491957 (cherry picked from commit 9dad207603ed778bbdd428b1ebe501a94747a088) --- .../ToneMapHdrToSdrUsingOpenGlPixelTest.java | 90 ++++++++----------- .../mh/ToneMapHdrToSdrUsingOpenGlTest.java | 8 +- 2 files changed, 39 insertions(+), 59 deletions(-) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java index 1615e45135..b88d65b21a 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlPixelTest.java @@ -15,6 +15,7 @@ */ package androidx.media3.transformer.mh; +import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888; import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT; @@ -24,10 +25,12 @@ import static androidx.media3.transformer.AndroidTestUtil.skipAndLogIfFormatsUns import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; +import android.content.Context; import android.graphics.Bitmap; import android.util.Log; import androidx.media3.common.C; 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.effect.DefaultVideoFrameProcessor; @@ -75,6 +78,13 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { "OpenGL-based HDR to SDR tone mapping is unsupported below API 29."; private static final String SKIP_REASON_NO_YUV = "Device lacks YUV extension support."; + private static final ColorInfo TONE_MAP_SDR_COLOR = + new ColorInfo.Builder() + .setColorSpace(C.COLOR_SPACE_BT709) + .setColorRange(C.COLOR_RANGE_LIMITED) + .setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2) + .build(); + private @MonotonicNonNull VideoFrameProcessorTestRunner videoFrameProcessorTestRunner; @After @@ -87,38 +97,14 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { @Test public void toneMap_hlgFrame_matchesGoldenFile() throws Exception { String testId = "toneMap_hlgFrame_matchesGoldenFile"; - if (Util.SDK_INT < 29) { - recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_OPENGL_UNDER_API_29); + if (!deviceSupportsOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT)) { return; } - if (!GlUtil.isYuvTargetExtensionSupported()) { - recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV); - return; - } - if (skipAndLogIfFormatsUnsupported( - getApplicationContext(), - testId, - /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, - /* outputFormat= */ null)) { - return; - } - ColorInfo hlgColor = - new ColorInfo.Builder() - .setColorSpace(C.COLOR_SPACE_BT2020) - .setColorRange(C.COLOR_RANGE_LIMITED) - .setColorTransfer(C.COLOR_TRANSFER_HLG) - .build(); - ColorInfo toneMapSdrColor = - new ColorInfo.Builder() - .setColorSpace(C.COLOR_SPACE_BT709) - .setColorRange(C.COLOR_RANGE_LIMITED) - .setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2) - .build(); videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) .setVideoAssetPath(INPUT_HLG_MP4_ASSET_STRING) - .setInputColorInfo(hlgColor) - .setOutputColorInfo(toneMapSdrColor) + .setInputColorInfo(checkNotNull(MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT.colorInfo)) + .setOutputColorInfo(TONE_MAP_SDR_COLOR) .build(); Bitmap expectedBitmap = readBitmap(TONE_MAP_HLG_TO_SDR_PNG_ASSET_PATH); @@ -151,38 +137,15 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { public void toneMap_pqFrame_matchesGoldenFile() throws Exception { // TODO(b/239735341): Move this test to mobileharness testing. String testId = "toneMap_pqFrame_matchesGoldenFile"; - if (Util.SDK_INT < 29) { - recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_OPENGL_UNDER_API_29); + if (!deviceSupportsOpenGlToneMapping(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT)) { return; } - if (!GlUtil.isYuvTargetExtensionSupported()) { - recordTestSkipped(getApplicationContext(), testId, SKIP_REASON_NO_YUV); - return; - } - if (skipAndLogIfFormatsUnsupported( - getApplicationContext(), - testId, - /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT, - /* outputFormat= */ null)) { - return; - } - ColorInfo pqColor = - new ColorInfo.Builder() - .setColorSpace(C.COLOR_SPACE_BT2020) - .setColorRange(C.COLOR_RANGE_LIMITED) - .setColorTransfer(C.COLOR_TRANSFER_ST2084) - .build(); - ColorInfo toneMapSdrColor = - new ColorInfo.Builder() - .setColorSpace(C.COLOR_SPACE_BT709) - .setColorRange(C.COLOR_RANGE_LIMITED) - .setColorTransfer(C.COLOR_TRANSFER_GAMMA_2_2) - .build(); + videoFrameProcessorTestRunner = getDefaultFrameProcessorTestRunnerBuilder(testId) .setVideoAssetPath(INPUT_PQ_MP4_ASSET_STRING) - .setInputColorInfo(pqColor) - .setOutputColorInfo(toneMapSdrColor) + .setInputColorInfo(checkNotNull(MP4_ASSET_720P_4_SECOND_HDR10_FORMAT.colorInfo)) + .setOutputColorInfo(TONE_MAP_SDR_COLOR) .build(); Bitmap expectedBitmap = readBitmap(TONE_MAP_PQ_TO_SDR_PNG_ASSET_PATH); @@ -211,7 +174,24 @@ public final class ToneMapHdrToSdrUsingOpenGlPixelTest { .isAtMost(MAXIMUM_DEVICE_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE); } - private VideoFrameProcessorTestRunner.Builder getDefaultFrameProcessorTestRunnerBuilder( + private static boolean deviceSupportsOpenGlToneMapping(String testId, Format inputFormat) + throws Exception { + Context context = getApplicationContext(); + if (Util.SDK_INT < 29) { + recordTestSkipped(context, testId, SKIP_REASON_NO_OPENGL_UNDER_API_29); + return false; + } + if (!GlUtil.isYuvTargetExtensionSupported()) { + recordTestSkipped(context, testId, SKIP_REASON_NO_YUV); + return false; + } + if (skipAndLogIfFormatsUnsupported(context, testId, inputFormat, /* outputFormat= */ null)) { + return false; + } + return true; + } + + private static VideoFrameProcessorTestRunner.Builder getDefaultFrameProcessorTestRunnerBuilder( String testId) { return new VideoFrameProcessorTestRunner.Builder() .setTestId(testId) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java index f3ecec4def..bce9d556d8 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ToneMapHdrToSdrUsingOpenGlTest.java @@ -104,22 +104,22 @@ public class ToneMapHdrToSdrUsingOpenGlTest { private static boolean deviceSupportsOpenGlToneMapping(String testId, Format inputFormat) throws JSONException, IOException, MediaCodecUtil.DecoderQueryException { + Context context = getApplicationContext(); if (Util.SDK_INT < 29) { recordTestSkipped( - ApplicationProvider.getApplicationContext(), + context, testId, /* reason= */ "OpenGL-based HDR to SDR tone mapping is only supported on API 29+."); return false; } if (!GlUtil.isYuvTargetExtensionSupported()) { - recordTestSkipped( - getApplicationContext(), testId, /* reason= */ "Device lacks YUV extension support."); + recordTestSkipped(context, testId, /* reason= */ "Device lacks YUV extension support."); return false; } return !AndroidTestUtil.skipAndLogIfFormatsUnsupported( - getApplicationContext(), + context, testId, inputFormat, /* outputFormat= */ inputFormat