diff --git a/libraries/common/src/main/java/androidx/media3/common/C.java b/libraries/common/src/main/java/androidx/media3/common/C.java index 3bf09ad735..f2cfb1ac41 100644 --- a/libraries/common/src/main/java/androidx/media3/common/C.java +++ b/libraries/common/src/main/java/androidx/media3/common/C.java @@ -1087,8 +1087,8 @@ public final class C { // LINT.IfChange(color_space) /** - * Video colorspaces. One of {@link Format#NO_VALUE}, {@link #COLOR_SPACE_BT601}, {@link - * #COLOR_SPACE_BT709} or {@link #COLOR_SPACE_BT2020}. + * Video color spaces, also referred to as color standards. One of {@link Format#NO_VALUE}, {@link + * #COLOR_SPACE_BT601}, {@link #COLOR_SPACE_BT709} or {@link #COLOR_SPACE_BT2020}. */ @UnstableApi @Documented diff --git a/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java b/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java index fdfc4f364a..42defabd3a 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/DefaultShaderProgram.java @@ -367,9 +367,6 @@ import java.util.List; glProgram.setIntUniform("uOutputColorTransfer", outputColorTransfer); } else { glProgram.setIntUniform("uEnableColorTransfer", enableColorTransfers ? GL_TRUE : GL_FALSE); - checkArgument( - outputColorInfo.colorSpace != C.COLOR_SPACE_BT2020, - "Converting from SDR to HDR is not supported."); checkArgument(inputColorInfo.colorSpace == outputColorInfo.colorSpace); checkArgument( outputColorTransfer == C.COLOR_TRANSFER_SDR diff --git a/libraries/test_data/src/test/assets/media/mp4/bt2020-sdr.mp4 b/libraries/test_data/src/test/assets/media/mp4/bt2020-sdr.mp4 new file mode 100644 index 0000000000..47c30b6af7 Binary files /dev/null and b/libraries/test_data/src/test/assets/media/mp4/bt2020-sdr.mp4 differ diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index 7a7a769bd7..530ec14e5d 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -101,6 +101,22 @@ public final class AndroidTestUtil { .setCodecs("avc1.64000D") .build(); + public static final String MP4_ASSET_BT2020_SDR = "asset:///media/mp4/bt2020-sdr.mp4"; + public static final Format MP4_ASSET_BT2020_SDR_FORMAT = + new Format.Builder() + .setSampleMimeType(VIDEO_H264) + .setWidth(3840) + .setHeight(2160) + .setFrameRate(29.822f) + .setColorInfo( + new ColorInfo.Builder() + .setColorSpace(C.COLOR_SPACE_BT2020) + .setColorRange(C.COLOR_RANGE_LIMITED) + .setColorTransfer(C.COLOR_TRANSFER_SDR) + .build()) + .setCodecs("avc1.640033") + .build(); + public static final String MP4_ASSET_1080P_5_SECOND_HLG10 = "asset:///media/mp4/hlg-1080p.mp4"; public static final Format MP4_ASSET_1080P_5_SECOND_HLG10_FORMAT = new Format.Builder() diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java index b3185d9a4a..e02f5adc5c 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ExportTest.java @@ -17,6 +17,8 @@ package androidx.media3.transformer.mh; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT_FORMAT; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_4K60_PORTRAIT_URI_STRING; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_BT2020_SDR; +import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_BT2020_SDR_FORMAT; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_SEF_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI_STRING; import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_WITH_INCREASING_TIMESTAMPS_FORMAT; @@ -253,4 +255,29 @@ public class ExportTest { .build() .run(testId, editedMediaItem); } + + @Test + public void exportTranscodeBt2020Sdr() throws Exception { + String testId = TAG + "exportBt2020Sdr"; + Context context = ApplicationProvider.getApplicationContext(); + if (AndroidTestUtil.skipAndLogIfFormatsUnsupported( + context, + testId, + /* inputFormat= */ MP4_ASSET_BT2020_SDR_FORMAT, + /* outputFormat= */ null)) { + return; + } + + Transformer transformer = new Transformer.Builder(context).build(); + MediaItem mediaItem = MediaItem.fromUri(Uri.parse(MP4_ASSET_BT2020_SDR)); + ImmutableList videoEffects = + ImmutableList.of(new ScaleAndRotateTransformation.Builder().setRotationDegrees(45).build()); + Effects effects = new Effects(/* audioProcessors= */ ImmutableList.of(), videoEffects); + EditedMediaItem editedMediaItem = + new EditedMediaItem.Builder(mediaItem).setEffects(effects).build(); + + new TransformerAndroidTestRunner.Builder(context, transformer) + .build() + .run(testId, editedMediaItem); + } }