From 3e59c113d711beb97fd01a7d466fae86e21f42c5 Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Tue, 30 Jan 2024 09:17:52 -0800 Subject: [PATCH] Transformer: Allow single-sequence mixing HDR and SDR input. Previously, input assets had to be all SDR or all HDR. After this CL, if tone-mapping is requested, HDR and SDR may mix in any order. If tone-mapping is not requested, SDR may precede HDR, but not vice versa, until SDR to HDR tone-mapping is implemented Some changes to accomplish this include: 1. Inputting the decoded format's color to VideoFrameProcessor.registerInputStream for each stream. 2. Calculating the estimated decoded format's color for each stream, by estimating it based on MediaCodec tone-mapping. PiperOrigin-RevId: 602747837 --- ...HdrThenSdr_whenHdrEditingUnsupported_0.png | Bin 0 -> 34124 bytes ...HdrThenSdr_whenHdrEditingUnsupported_1.png | Bin 0 -> 32799 bytes ...HdrThenSdr_whenHdrEditingUnsupported_2.png | Bin 0 -> 27124 bytes .../export_withSdrThenHdr_0.png | Bin 0 -> 26096 bytes .../export_withSdrThenHdr_1.png | Bin 0 -> 20450 bytes .../export_withSdrThenHdr_2.png | Bin 0 -> 21321 bytes .../transformer/SequenceEffectTestUtil.java | 118 ++++++++++ .../TransformerSequenceEffectTest.java | 109 +++------ .../TransformerSequenceEffectTestWithHdr.java | 206 ++++++++++++++++++ .../media3/transformer/AudioGraphInput.java | 12 +- .../transformer/EncodedSampleExporter.java | 2 +- .../ExoAssetLoaderBaseRenderer.java | 17 +- .../ExoAssetLoaderVideoRenderer.java | 31 ++- .../OnMediaItemChangedListener.java | 8 +- .../transformer/SequenceAssetLoader.java | 7 +- .../transformer/TextureAssetLoader.java | 7 +- .../transformer/TransformerInternal.java | 4 +- .../VideoFrameProcessingWrapper.java | 19 +- .../transformer/VideoSampleExporter.java | 29 ++- 19 files changed, 440 insertions(+), 129 deletions(-) create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_0.png create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_1.png create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_2.png create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_0.png create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_1.png create mode 100644 libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_2.png create mode 100644 libraries/transformer/src/androidTest/java/androidx/media3/transformer/SequenceEffectTestUtil.java create mode 100644 libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerSequenceEffectTestWithHdr.java diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_0.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_0.png new file mode 100644 index 0000000000000000000000000000000000000000..1a3a97b271726b551aff9ac18a352115fe62905a GIT binary patch literal 34124 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_1.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_1.png new file mode 100644 index 0000000000000000000000000000000000000000..aaa24ca839c09a30f7554e46007d19099a417f2b GIT binary patch literal 32799 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 SvdswiqbR2)TlSxk|NjAH^uqoC literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_2.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withHdrThenSdr_whenHdrEditingUnsupported_2.png new file mode 100644 index 0000000000000000000000000000000000000000..f0f2bbc6b5f53b833562275039557db4131aeaf2 GIT binary patch literal 27124 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 Qa}xq}OGl;nhGoS609woWt^fc4 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_0.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_0.png new file mode 100644 index 0000000000000000000000000000000000000000..8d41ad9e75bb5b3a89c1ab52bad553d285d4f55c GIT binary patch literal 26096 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 literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_1.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_1.png new file mode 100644 index 0000000000000000000000000000000000000000..ce34d0e80ef2564b30255914455b06775923a624 GIT binary patch literal 20450 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 VlD3?AXB;_w6b?Hoyp@$G{U1^9dHDbU literal 0 HcmV?d00001 diff --git a/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_2.png b/libraries/test_data/src/test/assets/media/bitmap/transformer_sequence_effect_test/export_withSdrThenHdr_2.png new file mode 100644 index 0000000000000000000000000000000000000000..48742f75615f6145e745b5b933c340671d2bdde9 GIT binary patch literal 21321 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 may be used to, for example, clip to only the first frame of a video. + */ + public static EditedMediaItem clippedVideo(String uri, List effects, long endPositionMs) { + return new EditedMediaItem.Builder( + MediaItem.fromUri(uri) + .buildUpon() + .setClippingConfiguration( + new MediaItem.ClippingConfiguration.Builder() + .setEndPositionMs(endPositionMs) + .build()) + .build()) + .setRemoveAudio(true) + .setEffects( + new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.copyOf(effects))) + .build(); + } + + /** + * Creates an {@link EditedMediaItem} with an image at {@code uri}, shown once, with {@code + * effects} applied. + */ + public static EditedMediaItem oneFrameFromImage(String uri, List effects) { + return new EditedMediaItem.Builder(MediaItem.fromUri(uri)) + // 50ms for a 20-fps video is one frame. + .setFrameRate(20) + .setDurationUs(50_000) + .setEffects( + new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.copyOf(effects))) + .build(); + } + + /** + * Assert that the bitmaps output in {@link #PNG_ASSET_BASE_PATH} match those written in {code + * actualBitmaps}. + * + *

Also saves {@code actualBitmaps} bitmaps, in case they differ from expected bitmaps, stored + * at {@link #PNG_ASSET_BASE_PATH}/{@code testId}_id.png. + */ + public static void assertBitmapsMatchExpectedAndSave(List actualBitmaps, String testId) + throws IOException { + for (int i = 0; i < actualBitmaps.size(); i++) { + Bitmap actualBitmap = actualBitmaps.get(i); + maybeSaveTestBitmap( + testId, /* bitmapLabel= */ String.valueOf(i), actualBitmap, /* path= */ null); + String subTestId = testId + "_" + i; + String expectedPath = Util.formatInvariant("%s/%s.png", PNG_ASSET_BASE_PATH, subTestId); + Bitmap expectedBitmap = readBitmap(expectedPath); + + float averagePixelAbsoluteDifference = + getBitmapAveragePixelAbsoluteDifferenceArgb8888(expectedBitmap, actualBitmap, subTestId); + assertWithMessage("For expected bitmap " + expectedPath) + .that(averagePixelAbsoluteDifference) + .isAtMost(MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_LUMA); + } + } +} diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerSequenceEffectTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerSequenceEffectTest.java index edac2a7e5a..04af39f6e1 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerSequenceEffectTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/TransformerSequenceEffectTest.java @@ -19,9 +19,6 @@ package androidx.media3.transformer; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Util.SDK_INT; -import static androidx.media3.test.utils.BitmapPixelTestUtil.MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_LUMA; -import static androidx.media3.test.utils.BitmapPixelTestUtil.getBitmapAveragePixelAbsoluteDifferenceArgb8888; -import static androidx.media3.test.utils.BitmapPixelTestUtil.maybeSaveTestBitmap; import static androidx.media3.test.utils.BitmapPixelTestUtil.readBitmap; import static androidx.media3.transformer.AndroidTestUtil.JPG_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.JPG_PORTRAIT_ASSET_URI_STRING; @@ -29,13 +26,15 @@ import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_FORMAT; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo; +import static androidx.media3.transformer.SequenceEffectTestUtil.SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS; +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.SequenceEffectTestUtil.oneFrameFromImage; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.Assume.assumeFalse; import android.content.Context; -import android.graphics.Bitmap; -import androidx.annotation.Nullable; import androidx.media3.common.Effect; import androidx.media3.common.MediaItem; import androidx.media3.common.util.Util; @@ -49,19 +48,17 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.base.Ascii; import com.google.common.collect.ImmutableList; import java.io.IOException; -import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; /** * Tests for using different {@linkplain Effect effects} for {@link MediaItem MediaItems} in one - * {@link EditedMediaItemSequence} . + * {@link EditedMediaItemSequence}. */ @RunWith(AndroidJUnit4.class) public final class TransformerSequenceEffectTest { private static final ImmutableList NO_EFFECT = ImmutableList.of(); - private static final String PNG_ASSET_BASE_PATH = "media/bitmap/transformer_sequence_effect_test"; private static final String OVERLAY_PNG_ASSET_PATH = "media/bitmap/input_images/media3test.png"; private static final int EXPORT_WIDTH = 360; private static final int EXPORT_HEIGHT = 240; @@ -82,11 +79,12 @@ public final class TransformerSequenceEffectTest { Composition composition = createComposition( /* presentation= */ null, - oneFrameFromVideo( + clippedVideo( MP4_ASSET_URI_STRING, ImmutableList.of( Presentation.createForWidthAndHeight( - EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT))), + EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT)), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), oneFrameFromImage( JPG_ASSET_URI_STRING, ImmutableList.of( @@ -108,7 +106,7 @@ public final class TransformerSequenceEffectTest { .run(testId, composition); assertThat(result.filePath).isNotNull(); - assertBitmapsMatchExpected( + assertBitmapsMatchExpectedAndSave( extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); } @@ -142,14 +140,17 @@ public final class TransformerSequenceEffectTest { Presentation.createForWidthAndHeight( EXPORT_WIDTH, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT))), oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT), - oneFrameFromVideo( - MP4_ASSET_URI_STRING, ImmutableList.of(RgbFilter.createInvertedFilter())), - oneFrameFromVideo( + clippedVideo( + MP4_ASSET_URI_STRING, + ImmutableList.of(RgbFilter.createInvertedFilter()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( MP4_ASSET_URI_STRING, ImmutableList.of( Presentation.createForWidthAndHeight( EXPORT_WIDTH / 2, EXPORT_HEIGHT, Presentation.LAYOUT_SCALE_TO_FIT), - createOverlayEffect()))); + createOverlayEffect()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS)); ExportTestResult result = new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build()) @@ -157,7 +158,7 @@ public final class TransformerSequenceEffectTest { .run(testId, composition); assertThat(result.filePath).isNotNull(); - assertBitmapsMatchExpected( + assertBitmapsMatchExpectedAndSave( extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); } @@ -175,8 +176,9 @@ public final class TransformerSequenceEffectTest { createComposition( Presentation.createForHeight(EXPORT_HEIGHT), oneFrameFromImage(JPG_ASSET_URI_STRING, NO_EFFECT), - oneFrameFromVideo(MP4_PORTRAIT_ASSET_URI_STRING, NO_EFFECT), - oneFrameFromVideo(MP4_ASSET_URI_STRING, NO_EFFECT), + clippedVideo( + MP4_PORTRAIT_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo(MP4_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), oneFrameFromImage(JPG_PORTRAIT_ASSET_URI_STRING, NO_EFFECT)); ExportTestResult result = @@ -185,7 +187,7 @@ public final class TransformerSequenceEffectTest { .run(testId, composition); assertThat(result.filePath).isNotNull(); - assertBitmapsMatchExpected( + assertBitmapsMatchExpectedAndSave( extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); } @@ -203,9 +205,11 @@ public final class TransformerSequenceEffectTest { Composition composition = createComposition( Presentation.createForHeight(EXPORT_HEIGHT), - oneFrameFromVideo(MP4_ASSET_URI_STRING, NO_EFFECT), - oneFrameFromVideo( - MP4_PORTRAIT_ASSET_URI_STRING, ImmutableList.of(RgbFilter.createInvertedFilter()))); + clippedVideo(MP4_ASSET_URI_STRING, NO_EFFECT, SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_PORTRAIT_ASSET_URI_STRING, + ImmutableList.of(RgbFilter.createInvertedFilter()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS)); ExportTestResult result = new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build()) @@ -213,7 +217,7 @@ public final class TransformerSequenceEffectTest { .run(testId, composition); assertThat(result.filePath).isNotNull(); - assertBitmapsMatchExpected( + assertBitmapsMatchExpectedAndSave( extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); } @@ -222,61 +226,4 @@ public final class TransformerSequenceEffectTest { ImmutableList.of( BitmapOverlay.createStaticBitmapOverlay(readBitmap(OVERLAY_PNG_ASSET_PATH)))); } - - private static Composition createComposition( - @Nullable Presentation presentation, - EditedMediaItem editedMediaItem, - EditedMediaItem... editedMediaItems) { - Composition.Builder builder = - new Composition.Builder(new EditedMediaItemSequence(editedMediaItem, editedMediaItems)); - if (presentation != null) { - builder.setEffects( - new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.of(presentation))); - } - return builder.build(); - } - - private static EditedMediaItem oneFrameFromVideo(String uri, List effects) { - return new EditedMediaItem.Builder( - MediaItem.fromUri(uri) - .buildUpon() - .setClippingConfiguration( - new MediaItem.ClippingConfiguration.Builder() - // Clip to only the first frame. - .setEndPositionMs(50) - .build()) - .build()) - .setRemoveAudio(true) - .setEffects( - new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.copyOf(effects))) - .build(); - } - - private static EditedMediaItem oneFrameFromImage(String uri, List effects) { - return new EditedMediaItem.Builder(MediaItem.fromUri(uri)) - // 50ms for a 20-fps video is one frame. - .setFrameRate(20) - .setDurationUs(50_000) - .setEffects( - new Effects(/* audioProcessors= */ ImmutableList.of(), ImmutableList.copyOf(effects))) - .build(); - } - - private static void assertBitmapsMatchExpected(List actualBitmaps, String testId) - throws IOException { - for (int i = 0; i < actualBitmaps.size(); i++) { - Bitmap actualBitmap = actualBitmaps.get(i); - String subTestId = testId + "_" + i; - Bitmap expectedBitmap = - readBitmap(Util.formatInvariant("%s/%s.png", PNG_ASSET_BASE_PATH, subTestId)); - - maybeSaveTestBitmap( - testId, /* bitmapLabel= */ String.valueOf(i), actualBitmap, /* path= */ null); - float averagePixelAbsoluteDifference = - getBitmapAveragePixelAbsoluteDifferenceArgb8888(expectedBitmap, actualBitmap, subTestId); - assertWithMessage("For expected bitmap %s.png", subTestId) - .that(averagePixelAbsoluteDifference) - .isAtMost(MAXIMUM_AVERAGE_PIXEL_ABSOLUTE_DIFFERENCE_LUMA); - } - } } diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerSequenceEffectTestWithHdr.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerSequenceEffectTestWithHdr.java new file mode 100644 index 0000000000..c1f91dbd78 --- /dev/null +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/TransformerSequenceEffectTestWithHdr.java @@ -0,0 +1,206 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package androidx.media3.transformer.mh; + +import static androidx.media3.common.MimeTypes.VIDEO_H265; +import static androidx.media3.common.util.Assertions.checkNotNull; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_720P_4_SECOND_HDR10_FORMAT; +import static androidx.media3.transformer.AndroidTestUtil.MP4_PORTRAIT_ASSET_URI_STRING; +import static androidx.media3.transformer.AndroidTestUtil.extractBitmapsFromVideo; +import static androidx.media3.transformer.AndroidTestUtil.skipAndLogIfFormatsUnsupported; +import static androidx.media3.transformer.SequenceEffectTestUtil.SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS; +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.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; +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; +import androidx.media3.transformer.TransformerAndroidTestRunner; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.common.collect.ImmutableList; +import org.checkerframework.checker.nullness.qual.EnsuresNonNull; +import org.checkerframework.checker.nullness.qual.MonotonicNonNull; +import org.checkerframework.checker.nullness.qual.RequiresNonNull; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.junit.runner.RunWith; + +/** + * Tests for using different {@linkplain Effect effects} for {@link MediaItem MediaItems} in one + * {@link EditedMediaItemSequence}, with HDR assets. + */ +@RunWith(AndroidJUnit4.class) +public final class TransformerSequenceEffectTestWithHdr { + + private static final int EXPORT_HEIGHT = 240; + @Rule public final TestName testName = new TestName(); + + private final Context context = ApplicationProvider.getApplicationContext(); + + private @MonotonicNonNull String testId; + + @Before + @EnsuresNonNull({"testId"}) + public void setUp() { + testId = testName.getMethodName(); + } + + @Test + @RequiresNonNull("testId") + public void export_withSdrThenHdr() throws Exception { + assumeFalse( + skipAndLogIfOpenGlToneMappingUnsupported( + testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT)); + Composition composition = + createComposition( + Presentation.createForHeight(EXPORT_HEIGHT), + clippedVideo( + MP4_PORTRAIT_ASSET_URI_STRING, + ImmutableList.of(RgbFilter.createInvertedFilter()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_ASSET_720P_4_SECOND_HDR10, + ImmutableList.of( + new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()), + 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); + } + + /** + * If the first asset in a sequence is HDR, then Transformer will output HDR. However, because SDR + * to HDR tone-mapping is not implemented, VideoFrameProcessor cannot take a later SDR input asset + * after already being configured for HDR output. + */ + @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))); + assumeFalse( + skipAndLogIfFormatsUnsupported( + 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()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_PORTRAIT_ASSET_URI_STRING, + ImmutableList.of(RgbFilter.createInvertedFilter()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS)); + + @Nullable ExportException expectedException = null; + try { + new TransformerAndroidTestRunner.Builder(context, new Transformer.Builder(context).build()) + .build() + .run(testId, composition); + } catch (ExportException e) { + expectedException = e; + } + assertThat(expectedException).isNotNull(); + assertThat(checkNotNull(checkNotNull(expectedException).getMessage())) + .isEqualTo("Video frame processing error"); + } + + /** + * If the first asset in a sequence is HDR, but HDR editing is not supported, then the first asset + * will fallback to OpenGL tone-mapping, and configure VideoFrameProcessor for SDR output. + */ + @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))); + assumeFalse( + skipAndLogIfOpenGlToneMappingUnsupported( + testId, /* inputFormat= */ MP4_ASSET_720P_4_SECOND_HDR10_FORMAT)); + assumeFalse( + skipAndLogIfFormatsUnsupported( + 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()), + SINGLE_30_FPS_VIDEO_FRAME_THRESHOLD_MS), + clippedVideo( + MP4_PORTRAIT_ASSET_URI_STRING, + ImmutableList.of(RgbFilter.createInvertedFilter()), + 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 Samsung S22 Ultra (US), because emulators don't + // support decoding HDR, and the Pixel 7 Pro does support HDR editing. + assertBitmapsMatchExpectedAndSave( + extractBitmapsFromVideo(context, checkNotNull(result.filePath)), testId); + } + + private static boolean deviceSupportsHdrEditing(String mimeType, ColorInfo colorInfo) { + return !EncoderUtil.getSupportedEncodersForHdrEditing(mimeType, colorInfo).isEmpty(); + } +} diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java index 7be7d0b9bc..7fd9f3f1ff 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/AudioGraphInput.java @@ -119,19 +119,19 @@ import java.util.concurrent.atomic.AtomicReference; public void onMediaItemChanged( EditedMediaItem editedMediaItem, long durationUs, - @Nullable Format trackFormat, + @Nullable Format decodedFormat, boolean isLast) { - if (trackFormat == null) { + if (decodedFormat == null) { checkState( durationUs != C.TIME_UNSET, "Could not generate silent audio because duration is unknown."); } else { - checkState(MimeTypes.isAudio(trackFormat.sampleMimeType)); - AudioFormat trackAudioFormat = new AudioFormat(trackFormat); - checkState(isInputAudioFormatValid(trackAudioFormat), /* errorMessage= */ trackAudioFormat); + checkState(MimeTypes.isAudio(decodedFormat.sampleMimeType)); + AudioFormat audioFormat = new AudioFormat(decodedFormat); + checkState(isInputAudioFormatValid(audioFormat), /* errorMessage= */ audioFormat); } pendingMediaItemChange.set( - new MediaItemChange(editedMediaItem, durationUs, trackFormat, isLast)); + new MediaItemChange(editedMediaItem, durationUs, decodedFormat, isLast)); } @Override diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java index 1b64ab6af1..03097e1119 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/EncodedSampleExporter.java @@ -82,7 +82,7 @@ import java.util.concurrent.atomic.AtomicLong; public void onMediaItemChanged( EditedMediaItem editedMediaItem, long durationUs, - @Nullable Format trackFormat, + @Nullable Format decodedFormat, boolean isLast) { mediaItemOffsetUs = nextMediaItemOffsetUs.get(); nextMediaItemOffsetUs.addAndGet(durationUs); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java index 1a155ea4ac..d67842e23f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderBaseRenderer.java @@ -156,9 +156,14 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; } } - /** Overrides the {@code inputFormat}. */ - protected Format overrideFormat(Format inputFormat) { - return inputFormat; + /** Overrides the input {@code format}. */ + protected Format overrideInputFormat(Format format) { + return format; + } + + /** Overrides the output {@code format}. */ + protected Format overrideOutputFormat(Format format) { + return format; } /** Called when the {@link Format} of the samples fed to the renderer is known. */ @@ -212,7 +217,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; if (result != C.RESULT_FORMAT_READ) { return false; } - inputFormat = overrideFormat(checkNotNull(formatHolder.format)); + inputFormat = overrideInputFormat(checkNotNull(formatHolder.format)); onInputFormatRead(inputFormat); shouldInitDecoder = assetLoaderListener.onTrackAdded( @@ -257,11 +262,11 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; if (decoderOutputFormat == null) { return false; } - outputFormat = decoderOutputFormat; + outputFormat = overrideOutputFormat(decoderOutputFormat); } else { // TODO(b/278259383): Move surface creation out of video sampleConsumer. Init decoder and // get decoderOutput Format before init sampleConsumer. - outputFormat = inputFormat; + outputFormat = overrideOutputFormat(inputFormat); } } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java index b522bd4f2d..a64921cfe9 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/ExoAssetLoaderVideoRenderer.java @@ -15,6 +15,7 @@ */ package androidx.media3.transformer; +import static androidx.media3.common.ColorInfo.SDR_BT709_LIMITED; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkStateNotNull; @@ -56,18 +57,38 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; decodeOnlyPresentationTimestamps = new ArrayList<>(); } + public static ColorInfo getDecoderOutputColor( + ColorInfo decoderInputColor, boolean isMediaCodecToneMappingRequested) { + if (isMediaCodecToneMappingRequested && ColorInfo.isTransferHdr(decoderInputColor)) { + return SDR_BT709_LIMITED; + } + return decoderInputColor; + } + @Override public String getName() { return TAG; } @Override - protected Format overrideFormat(Format inputFormat) { + protected Format overrideInputFormat(Format format) { if (hdrMode == Composition.HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR - && ColorInfo.isTransferHdr(inputFormat.colorInfo)) { - return inputFormat.buildUpon().setColorInfo(ColorInfo.SDR_BT709_LIMITED).build(); + && ColorInfo.isTransferHdr(format.colorInfo)) { + return format.buildUpon().setColorInfo(ColorInfo.SDR_BT709_LIMITED).build(); } - return inputFormat; + return format; + } + + @Override + protected Format overrideOutputFormat(Format format) { + // Gets the expected output color from the decoder, based on the input track format, if + // tone-mapping is applied. + ColorInfo validColor = VideoSampleExporter.getValidColor(format.colorInfo); + boolean isDecoderToneMappingRequested = + hdrMode == Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; + ColorInfo outputColor = getDecoderOutputColor(validColor, isDecoderToneMappingRequested); + + return format.buildUpon().setColorInfo(outputColor).build(); } @Override @@ -89,7 +110,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; checkStateNotNull(sampleConsumer); boolean isDecoderToneMappingRequired = ColorInfo.isTransferHdr(inputFormat.colorInfo) - && !ColorInfo.isTransferHdr(sampleConsumer.getExpectedInputColorInfo()); + && hdrMode == Composition.HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; decoder = decoderFactory.createForVideoDecoding( inputFormat, diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/OnMediaItemChangedListener.java b/libraries/transformer/src/main/java/androidx/media3/transformer/OnMediaItemChangedListener.java index 03e498c263..4f4fef1e99 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/OnMediaItemChangedListener.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/OnMediaItemChangedListener.java @@ -28,15 +28,15 @@ import androidx.media3.common.MediaItem; * * @param editedMediaItem The {@link MediaItem} with the transformations to apply to it. * @param durationUs The duration of the {@link MediaItem}, in microseconds. - * @param trackFormat The {@link Format} extracted (and possibly decoded) from the {@link - * MediaItem} track, which represents the samples input to the {@link SampleExporter}. {@code - * null} if no such track was extracted. + * @param decodedFormat The {@link Format} decoded from the {@link MediaItem} track, which + * represents the samples output from the {@link SampleExporter}. {@code null} if no such + * track was decoded. * @param isLast Whether the {@link MediaItem} is the last one passed to the {@link * SampleExporter}. */ void onMediaItemChanged( EditedMediaItem editedMediaItem, long durationUs, - @Nullable Format trackFormat, + @Nullable Format decodedFormat, boolean isLast); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java index 960aca68cb..f7931a655f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SequenceAssetLoader.java @@ -285,24 +285,25 @@ import java.util.concurrent.atomic.AtomicInteger; sampleConsumersByTrackType.entrySet()) { int outputTrackType = entry.getKey(); if (trackType != outputTrackType) { - onMediaItemChanged(outputTrackType, /* format= */ null); + onMediaItemChanged(outputTrackType, /* outputFormat= */ null); } } } return sampleConsumer; } - private void onMediaItemChanged(int trackType, @Nullable Format format) { + private void onMediaItemChanged(int trackType, @Nullable Format outputFormat) { @Nullable OnMediaItemChangedListener onMediaItemChangedListener = mediaItemChangedListenersByTrackType.get(trackType); if (onMediaItemChangedListener == null) { return; } + onMediaItemChangedListener.onMediaItemChanged( editedMediaItems.get(currentMediaItemIndex), currentAssetDurationUs, - format, + /* decodedFormat= */ outputFormat, /* isLast= */ currentMediaItemIndex == editedMediaItems.size() - 1); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TextureAssetLoader.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TextureAssetLoader.java index a04ccdcf48..bedcb4293d 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TextureAssetLoader.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TextureAssetLoader.java @@ -80,7 +80,12 @@ public final class TextureAssetLoader implements AssetLoader { checkArgument(format.height != Format.NO_VALUE && format.width != Format.NO_VALUE); this.editedMediaItem = editedMediaItem; this.assetLoaderListener = assetLoaderListener; - this.format = format.buildUpon().setSampleMimeType(MimeTypes.VIDEO_RAW).build(); + this.format = + format + .buildUpon() + .setColorInfo(VideoSampleExporter.getValidColor(format.colorInfo)) + .setSampleMimeType(MimeTypes.VIDEO_RAW) + .build(); this.frameProcessedListener = frameProcessedListener; progressState = PROGRESS_STATE_NOT_STARTED; } 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 4c860f79fe..2a5bfea02f 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerInternal.java @@ -584,10 +584,10 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; GraphInput sampleExporterInput = sampleExporter.getInput(firstEditedMediaItem, assetLoaderOutputFormat); OnMediaItemChangedListener onMediaItemChangedListener = - (editedMediaItem, durationUs, trackFormat, isLast) -> { + (editedMediaItem, durationUs, decodedFormat, isLast) -> { onMediaItemChanged(trackType, durationUs, isLast); sampleExporterInput.onMediaItemChanged( - editedMediaItem, durationUs, trackFormat, isLast); + editedMediaItem, durationUs, decodedFormat, isLast); }; sequenceAssetLoaders .get(sequenceIndex) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoFrameProcessingWrapper.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoFrameProcessingWrapper.java index 69beafcece..53fef7ddda 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoFrameProcessingWrapper.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoFrameProcessingWrapper.java @@ -64,19 +64,18 @@ import java.util.concurrent.atomic.AtomicLong; public void onMediaItemChanged( EditedMediaItem editedMediaItem, long durationUs, - @Nullable Format trackFormat, + @Nullable Format decodedFormat, boolean isLast) { - if (trackFormat != null) { - Size decodedSize = getDecodedSize(trackFormat); - ColorInfo colorInfo = - trackFormat.colorInfo == null || !trackFormat.colorInfo.isDataSpaceValid() - ? inputColorInfo - : trackFormat.colorInfo; + if (decodedFormat != null) { + Size decodedSize = getDecodedSize(decodedFormat); videoFrameProcessor.registerInputStream( - getInputType(checkNotNull(trackFormat.sampleMimeType)), + getInputType(checkNotNull(decodedFormat.sampleMimeType)), createEffectListWithPresentation(editedMediaItem.effects.videoEffects, presentation), - new FrameInfo.Builder(colorInfo, decodedSize.getWidth(), decodedSize.getHeight()) - .setPixelWidthHeightRatio(trackFormat.pixelWidthHeightRatio) + new FrameInfo.Builder( + checkNotNull(decodedFormat.colorInfo), + decodedSize.getWidth(), + decodedSize.getHeight()) + .setPixelWidthHeightRatio(decodedFormat.pixelWidthHeightRatio) .setOffsetToAddUs(initialTimestampOffsetUs + mediaItemOffsetUs.get()) .build()); } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSampleExporter.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSampleExporter.java index 146247d2b1..8f22a42c42 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSampleExporter.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSampleExporter.java @@ -74,6 +74,18 @@ import org.checkerframework.dataflow.qual.Pure; private boolean hasMuxedTimestampZero; + // TODO: b/307952514 - Move this method to a color utility. + /** + * Adjust for invalid {@link ColorInfo} values, by defaulting to {@link + * ColorInfo#SDR_BT709_LIMITED}. + */ + public static ColorInfo getValidColor(@Nullable ColorInfo colorInfo) { + if (colorInfo == null || !colorInfo.isDataSpaceValid()) { + return ColorInfo.SDR_BT709_LIMITED; + } + return colorInfo; + } + public VideoSampleExporter( Context context, Format firstInputFormat, @@ -95,12 +107,7 @@ import org.checkerframework.dataflow.qual.Pure; this.initialTimestampOffsetUs = initialTimestampOffsetUs; finalFramePresentationTimeUs = C.TIME_UNSET; - ColorInfo decoderInputColor; - if (firstInputFormat.colorInfo == null || !firstInputFormat.colorInfo.isDataSpaceValid()) { - decoderInputColor = ColorInfo.SDR_BT709_LIMITED; - } else { - decoderInputColor = firstInputFormat.colorInfo; - } + ColorInfo decoderInputColor = getValidColor(firstInputFormat.colorInfo); encoderWrapper = new EncoderWrapper( encoderFactory, @@ -112,11 +119,13 @@ import org.checkerframework.dataflow.qual.Pure; new DecoderInputBuffer(DecoderInputBuffer.BUFFER_REPLACEMENT_MODE_DISABLED); @Composition.HdrMode int hdrModeAfterFallback = encoderWrapper.getHdrModeAfterFallback(); - boolean isMediaCodecToneMapping = - hdrModeAfterFallback == HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC - && ColorInfo.isTransferHdr(decoderInputColor); + boolean isMediaCodecToneMappingRequested = + hdrModeAfterFallback == HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC; + // TODO: b/278259383 - After solving the bug, we can use the decoder output format, and no + // longer need to import this color conversion method. ColorInfo videoGraphInputColor = - isMediaCodecToneMapping ? SDR_BT709_LIMITED : decoderInputColor; + ExoAssetLoaderVideoRenderer.getDecoderOutputColor( + decoderInputColor, isMediaCodecToneMappingRequested); boolean isGlToneMapping = hdrModeAfterFallback == HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL