diff --git a/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java b/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java index db10f7f4b9..a4b871a64f 100644 --- a/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java +++ b/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java @@ -31,6 +31,15 @@ import org.checkerframework.dataflow.qual.Pure; /** Stores color info. */ @UnstableApi public final class ColorInfo implements Bundleable { + + /** Color info representing SDR BT.709 limited range, which is a common SDR video color format. */ + public static final ColorInfo SDR_BT709_LIMITED = + new ColorInfo( + C.COLOR_SPACE_BT709, + C.COLOR_RANGE_LIMITED, + C.COLOR_TRANSFER_SDR, + /* hdrStaticInfo= */ null); + /** * Returns the {@link C.ColorSpace} corresponding to the given ISO color primary code, as per * table A.7.21.1 in Rec. ITU-T T.832 (03/2009), or {@link Format#NO_VALUE} if no mapping can be diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java index f48046c5b6..9032f62256 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java @@ -384,6 +384,11 @@ import org.checkerframework.dataflow.qual.Pure; } boolean isInputToneMapped = ColorInfo.isHdr(inputFormat.colorInfo) && !isHdrEditingEnabled(); + // When tone-mapping HDR to SDR is enabled, assume we get BT.709 to avoid having the encoder + // populate default color info, which depends on the resolution. + // TODO(b/237674316): Get the color info from the decoder output media format instead. + ColorInfo outputColorInfo = + isInputToneMapped ? ColorInfo.SDR_BT709_LIMITED : inputFormat.colorInfo; Format requestedEncoderFormat = new Format.Builder() .setWidth(requestedWidth) @@ -391,7 +396,7 @@ import org.checkerframework.dataflow.qual.Pure; .setRotationDegrees(0) .setFrameRate(inputFormat.frameRate) .setSampleMimeType(requestedOutputMimeType) - .setColorInfo(isInputToneMapped ? null : inputFormat.colorInfo) + .setColorInfo(outputColorInfo) .build(); encoder =