From 272fada10e1bb6654eae77bb30956b73a5826a8e Mon Sep 17 00:00:00 2001 From: tofunmi Date: Thu, 28 Mar 2024 05:52:57 -0700 Subject: [PATCH] Signal assetloader output format in image case the output format conatins key information about the output of the assetloader being hdr, so we must signal the output format, not the input format to the sample exporter fixes mh ultraHdr test failures. Also discovered images created are very device specfic so got rid of the pixel tests, we have pixel tests in the effects library that cover the same case. PiperOrigin-RevId: 619899249 --- .../transformer/TransformerUltraHdrTest.java | 2 +- ...st.java => TransformerMhUltraHdrTest.java} | 41 ++----------------- .../transformer/TransformerInternal.java | 2 +- 3 files changed, 5 insertions(+), 40 deletions(-) rename libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/{TransformerMhUltraHdrPixelTest.java => TransformerMhUltraHdrTest.java} (78%) diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerUltraHdrTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerUltraHdrTest.java index 1bd84b6e10..f412695df9 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerUltraHdrTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerUltraHdrTest.java @@ -48,7 +48,7 @@ import org.junit.runner.RunWith; /** * Tests for Ultra HDR support in Transformer that can run on an emulator. * - *

See {@code TransformerMhUltraHdrPixelTest} for other UltraHdr tests. + *

See {@code TransformerMhUltraHdrTest} for other UltraHdr tests. */ @RunWith(AndroidJUnit4.class) public final class TransformerUltraHdrTest { diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrPixelTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrTest.java similarity index 78% rename from libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrPixelTest.java rename to libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrTest.java index 08d4debd12..a8301710c3 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrPixelTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerMhUltraHdrTest.java @@ -17,29 +17,21 @@ package androidx.media3.transformer.mh; -import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_LUMA; -import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceFp16; -import static androidx.media3.test.utils.BitmapPixelTestUtil.maybeSaveTestBitmap; -import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; 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_FORMAT; import static androidx.media3.transformer.AndroidTestUtil.ULTRA_HDR_URI_STRING; -import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo; 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.SequenceEffectTestUtil.NO_EFFECT; import static androidx.media3.transformer.SequenceEffectTestUtil.clippedVideo; import static androidx.media3.transformer.SequenceEffectTestUtil.createComposition; import static androidx.media3.transformer.SequenceEffectTestUtil.oneFrameFromImage; +import static androidx.media3.transformer.mh.HdrCapabilitiesUtil.assumeDeviceSupportsOpenGlToneMapping; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Bitmap.Config; -import androidx.annotation.RequiresApi; import androidx.media3.common.C; import androidx.media3.common.ColorInfo; import androidx.media3.common.util.Util; @@ -54,7 +46,6 @@ import androidx.media3.transformer.TransformerAndroidTestRunner; import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import java.io.IOException; -import java.util.List; import org.json.JSONException; import org.junit.AssumptionViolatedException; import org.junit.Before; @@ -65,11 +56,9 @@ import org.junit.runner.RunWith; /** Tests for Ultra HDR support in Transformer that should only run in mobile harness. */ @RunWith(AndroidJUnit4.class) -public final class TransformerMhUltraHdrPixelTest { +public final class TransformerMhUltraHdrTest { private static final int ONE_FRAME_END_POSITION_MS = 30; - private static final String PNG_ASSET_BASE_PATH = - "test-generated-goldens/TransformerUltraHdrPixelTest"; @Rule public final TestName testName = new TestName(); private final Context context = ApplicationProvider.getApplicationContext(); @@ -99,8 +88,6 @@ public final class TransformerMhUltraHdrPixelTest { retrieveTrackFormat(context, result.filePath, C.TRACK_TYPE_VIDEO).colorInfo; assertThat(colorInfo.colorSpace).isEqualTo(C.COLOR_SPACE_BT2020); assertThat(colorInfo.colorTransfer).isEqualTo(C.COLOR_TRANSFER_HLG); - assertFp16BitmapsMatchExpectedAndSave( - extractBitmapsFromVideo(context, result.filePath, Config.RGBA_F16), testId); } @Test @@ -122,8 +109,6 @@ public final class TransformerMhUltraHdrPixelTest { retrieveTrackFormat(context, result.filePath, C.TRACK_TYPE_VIDEO).colorInfo; assertThat(colorInfo.colorSpace).isEqualTo(C.COLOR_SPACE_BT2020); assertThat(colorInfo.colorTransfer).isEqualTo(C.COLOR_TRANSFER_HLG); - assertFp16BitmapsMatchExpectedAndSave( - extractBitmapsFromVideo(context, result.filePath, Config.RGBA_F16), testId); } @Test @@ -149,6 +134,7 @@ public final class TransformerMhUltraHdrPixelTest { @Test public void exportTonemappedHdrVideoThenUltraHdrImage_exportsSdr() throws Exception { + assumeDeviceSupportsOpenGlToneMapping(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT); Composition composition = createUltraHdrComposition( /* tonemap= */ true, @@ -167,27 +153,6 @@ public final class TransformerMhUltraHdrPixelTest { assertThat(colorInfo.colorTransfer).isEqualTo(C.COLOR_TRANSFER_SDR); } - @RequiresApi(29) // getBitmapAveragePixelAbsoluteDifferenceFp16() - public static void assertFp16BitmapsMatchExpectedAndSave( - List actualBitmaps, String testId) throws IOException { - for (int i = 0; i < actualBitmaps.size(); i++) { - maybeSaveTestBitmap( - testId, /* bitmapLabel= */ String.valueOf(i), actualBitmaps.get(i), /* path= */ null); - } - - for (int i = 0; i < actualBitmaps.size(); i++) { - String subTestId = testId + "_" + i; - String expectedPath = Util.formatInvariant("%s/%s.png", PNG_ASSET_BASE_PATH, subTestId); - Bitmap expectedBitmap = readBitmap(expectedPath); - - float averagePixelAbsoluteDifference = - getBitmapAveragePixelAbsoluteDifferenceFp16(expectedBitmap, actualBitmaps.get(i)); - assertWithMessage("For expected bitmap " + expectedPath) - .that(averagePixelAbsoluteDifference) - .isAtMost(MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_LUMA); - } - } - private static Composition createUltraHdrComposition( boolean tonemap, EditedMediaItem editedMediaItem, EditedMediaItem... editedMediaItems) { Composition.Builder builder = diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java index 7a26c9d2f5..1adf5c1de6 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java @@ -703,7 +703,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; firstAssetLoaderInputFormat.buildUpon().setColorInfo(decoderOutputColor).build(); } else if (MimeTypes.isImage(assetLoaderOutputFormat.sampleMimeType)) { firstFormat = - firstAssetLoaderInputFormat + assetLoaderOutputFormat .buildUpon() .setColorInfo(getValidColor(assetLoaderOutputFormat.colorInfo)) .build();