diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_0.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_0.png new file mode 100644 index 0000000000..e04f258d4c Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_0.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_1.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_1.png new file mode 100644 index 0000000000..fd61985e6a Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_1.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_2.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_2.png new file mode 100644 index 0000000000..13b34137e0 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_2.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_3.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_3.png new file mode 100644 index 0000000000..e2e00d5346 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHdr10ThenHdr10_whenHdrEditingSupported_completes_3.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_0.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_0.png new file mode 100644 index 0000000000..bdf7793122 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_0.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_1.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_1.png new file mode 100644 index 0000000000..51e4fffef9 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_1.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_2.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_2.png new file mode 100644 index 0000000000..3e0ae1fad6 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_2.png differ diff --git a/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_3.png b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_3.png new file mode 100644 index 0000000000..846d4be850 Binary files /dev/null and b/libraries/test_data/src/test/assets/test-generated-goldens/transformer_sequence_effect_test/export_withHlg10ThenHdr10_whenHdrEditingSupported_completes_3.png differ diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerHdrSequenceEffectTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerHdrSequenceEffectTest.java index 2bfc23f188..53322e293f 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerHdrSequenceEffectTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerHdrSequenceEffectTest.java @@ -195,6 +195,81 @@ public final class TransformerHdrSequenceEffectTest { extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); } + @Test + public void export_withHdr10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame() + throws Exception { + assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT); + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT, + /* outputFormat= */ null); + Composition composition = + createComposition( + Presentation.createForHeight(EXPORT_HEIGHT), + clippedVideo( + MP4_ASSET_720P_4_SECOND_HDR10, + ImmutableList.of( + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), + /* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_ASSET_720P_4_SECOND_HDR10, + ImmutableList.of( + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), + /* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS)); + + ExportTestResult result = + new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build()) + .build() + .run(testId, composition); + assertThat(result.filePath).isNotNull(); + // Expected bitmaps were generated on the Pixel 7 Pro, because emulators don't support decoding + // HDR. + assertBitmapsMatchExpectedAndSave( + extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); + } + + @Test + public void export_withHlg10ThenHdr10_whenHdrEditingSupported_producesExpectedFrame() + throws Exception { + assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT); + assumeDeviceSupportsHdrEditing(testId, MP4_ASSET_720P_4_SECOND_HDR10_FORMAT); + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT, + /* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT); + assumeFormatsSupported( + context, + testId, + /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT, + /* outputFormat= */ MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT); + Composition composition = + createComposition( + Presentation.createForHeight(EXPORT_HEIGHT), + clippedVideo( + MP4_ASSET_1080P_5_SECOND_HLG10, + ImmutableList.of( + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), + /* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_ASSET_720P_4_SECOND_HDR10, + ImmutableList.of( + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), + /* endPositionMs= */ SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS)); + + ExportTestResult result = + new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build()) + .build() + .run(testId, composition); + + assertThat(result.filePath).isNotNull(); + // Expected bitmaps were generated on the Pixel 7 Pro, because emulators don't support decoding + // HDR. + assertBitmapsMatchExpectedAndSave( + extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); + } + @Test public void export1920x1080Hlg_withAllAvailableDecoders_doesNotStretchOutputOnAny() throws Exception {