From 35161c748956d96e8e83cee007143615ef6f9d07 Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Tue, 9 Aug 2022 11:28:31 +0000 Subject: [PATCH] HDR: Rename ColorInfo#isHdr to isTransferHdr. While HDR is most closely tied to the color transfer (ex. COLOR_TRANSFER_SDR is the only one explicitly mentioning dynamic range), technically color spaces may be associated with HDR as well, like BT.2020 commonly being used for HDR rather than BT.709 for SDR. Therefore, it's more specific to mention just that the transfer is HDR. PiperOrigin-RevId: 466316960 --- .../main/java/androidx/media3/common/ColorInfo.java | 2 +- .../FinalMatrixTransformationProcessorWrapper.java | 2 +- .../media3/effect/GlEffectsFrameProcessor.java | 4 ++-- .../effect/MatrixTransformationProcessor.java | 10 +++++----- .../media3/transformer/DefaultEncoderFactory.java | 2 +- .../transformer/TransformerVideoRenderer.java | 2 +- .../transformer/VideoTranscodingSamplePipeline.java | 13 +++++++------ 7 files changed, 18 insertions(+), 17 deletions(-) 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 b1ee267326..aae29250d1 100644 --- a/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java +++ b/libraries/common/src/main/java/androidx/media3/common/ColorInfo.java @@ -90,7 +90,7 @@ public final class ColorInfo implements Bundleable { } /** Returns whether the {@code ColorInfo} uses an HDR {@link C.ColorTransfer}. */ - public static boolean isHdr(@Nullable ColorInfo colorInfo) { + public static boolean isTransferHdr(@Nullable ColorInfo colorInfo) { return colorInfo != null && colorInfo.colorTransfer != Format.NO_VALUE && colorInfo.colorTransfer != C.COLOR_TRANSFER_SDR; diff --git a/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java b/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java index 91f2e7e130..bd4ac4283a 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java @@ -218,7 +218,7 @@ import org.checkerframework.checker.nullness.qual.MonotonicNonNull; SurfaceInfo outputSurfaceInfo = this.outputSurfaceInfo; @Nullable EGLSurface outputEglSurface = this.outputEglSurface; if (outputEglSurface == null) { - boolean colorInfoIsHdr = ColorInfo.isHdr(colorInfo); + boolean colorInfoIsHdr = ColorInfo.isTransferHdr(colorInfo); if (colorInfoIsHdr) { outputEglSurface = GlUtil.getEglSurfaceRgba1010102(eglDisplay, outputSurfaceInfo.surface); } else { diff --git a/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java b/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java index e8f3408694..9f5db2a4ac 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java @@ -119,7 +119,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { // TODO(b/237674316): Delay initialization of things requiring the colorInfo, to // configure based on the color info from the decoder output media format instead. - boolean useHdr = ColorInfo.isHdr(colorInfo); + boolean useHdr = ColorInfo.isTransferHdr(colorInfo); EGLDisplay eglDisplay = GlUtil.createEglDisplay(); EGLContext eglContext = useHdr @@ -197,7 +197,7 @@ public final class GlEffectsFrameProcessor implements FrameProcessor { sampleFromExternalTexture = false; } textureProcessorListBuilder.add( - glEffect.toGlTextureProcessor(context, ColorInfo.isHdr(colorInfo))); + glEffect.toGlTextureProcessor(context, ColorInfo.isTransferHdr(colorInfo))); } textureProcessorListBuilder.add( new FinalMatrixTransformationProcessorWrapper( diff --git a/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java b/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java index cb13d68851..e231a39fb1 100644 --- a/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java +++ b/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java @@ -160,12 +160,12 @@ import java.util.Arrays; * the external texture. * @param opticalColorInfo The optical {@link ColorInfo}, only used to transform between color * spaces and transfers, when {@code inputOpticalColorsFromExternalTexture} or {@code - * outputOpticalColors} are {@code true}. If it {@link ColorInfo#isHdr(ColorInfo)}, + * outputOpticalColors} are {@code true}. If it {@link ColorInfo#isTransferHdr(ColorInfo)}, * intermediate {@link GlTextureProcessor} colors will be in linear RGB BT.2020. Otherwise, * these colors will be in gamma RGB BT.709. * @param outputOpticalColors If {@code true}, outputs {@code opticalColorInfo}. If {@code false}, * outputs intermediate colors of linear RGB BT.2020 if {@code opticalColorInfo} {@link - * ColorInfo#isHdr(ColorInfo)}, and gamma RGB BT.709 otherwise. + * ColorInfo#isTransferHdr(ColorInfo)}, and gamma RGB BT.709 otherwise. * @throws FrameProcessingException If a problem occurs while reading shader files or an OpenGL * operation fails or is unsupported. */ @@ -180,11 +180,11 @@ import java.util.Arrays; createGlProgram( context, inputOpticalColorsFromExternalTexture, - ColorInfo.isHdr(opticalColorInfo), + ColorInfo.isTransferHdr(opticalColorInfo), outputOpticalColors), matrixTransformations, - ColorInfo.isHdr(opticalColorInfo)); - if (!ColorInfo.isHdr(opticalColorInfo) || !inputOpticalColorsFromExternalTexture) { + ColorInfo.isTransferHdr(opticalColorInfo)); + if (!ColorInfo.isTransferHdr(opticalColorInfo) || !inputOpticalColorsFromExternalTexture) { return; } // TODO(b/227624622): Implement YUV to RGB conversions in COLOR_RANGE_LIMITED as well, using diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java index 33f50445c6..d1364dcde3 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java @@ -283,7 +283,7 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { } MediaFormatUtil.maybeSetColorInfo(mediaFormat, encoderSupportedFormat.colorInfo); - if (Util.SDK_INT >= 31 && ColorInfo.isHdr(format.colorInfo)) { + if (Util.SDK_INT >= 31 && ColorInfo.isTransferHdr(format.colorInfo)) { if (EncoderUtil.getSupportedColorFormats(encoderInfo, mimeType) .contains(MediaCodecInfo.CodecCapabilities.COLOR_Format32bitABGR2101010)) { mediaFormat.setInteger( diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java index 00e5ed117f..2c4574e739 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java @@ -99,7 +99,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; return false; } Format inputFormat = checkNotNull(formatHolder.format); - if (SDK_INT < 31 && ColorInfo.isHdr(inputFormat.colorInfo)) { + if (SDK_INT < 31 && ColorInfo.isTransferHdr(inputFormat.colorInfo)) { throw TransformationException.createForCodec( new IllegalArgumentException("HDR editing not supported under API 31."), /* isVideo= */ true, 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 d536e1add9..3bb4ea0cf7 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoTranscodingSamplePipeline.java @@ -156,8 +156,8 @@ import org.checkerframework.dataflow.qual.Pure; decodedWidth, decodedHeight, inputFormat.pixelWidthHeightRatio, streamOffsetUs)); boolean isToneMappingRequired = - ColorInfo.isHdr(inputFormat.colorInfo) - && !ColorInfo.isHdr(encoderWrapper.getSupportedInputColor()); + ColorInfo.isTransferHdr(inputFormat.colorInfo) + && !ColorInfo.isTransferHdr(encoderWrapper.getSupportedInputColor()); decoder = decoderFactory.createForVideoDecoding( inputFormat, frameProcessor.getInputSurface(), isToneMappingRequired); @@ -363,7 +363,8 @@ import org.checkerframework.dataflow.qual.Pure; transformationRequest.enableHdrEditing && !transformationRequest.enableRequestSdrToneMapping && !supportedEncoderNamesForHdrEditing.isEmpty(); - boolean isInputToneMapped = !isHdrEditingEnabled && ColorInfo.isHdr(inputFormat.colorInfo); + boolean isInputToneMapped = + !isHdrEditingEnabled && ColorInfo.isTransferHdr(inputFormat.colorInfo); if (isInputToneMapped) { // 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. @@ -413,7 +414,7 @@ import org.checkerframework.dataflow.qual.Pure; encoderFactory.createForVideoEncoding(requestedEncoderFormat, allowedOutputMimeTypes); Format encoderSupportedFormat = encoder.getConfigurationFormat(); - if (ColorInfo.isHdr(requestedEncoderFormat.colorInfo)) { + if (ColorInfo.isTransferHdr(requestedEncoderFormat.colorInfo)) { if (!requestedOutputMimeType.equals(encoderSupportedFormat.sampleMimeType)) { throw createEncodingException( new IllegalStateException("MIME type fallback unsupported with HDR editing"), @@ -425,8 +426,8 @@ import org.checkerframework.dataflow.qual.Pure; } } boolean isInputToneMapped = - ColorInfo.isHdr(inputFormat.colorInfo) - && !ColorInfo.isHdr(requestedEncoderFormat.colorInfo); + ColorInfo.isTransferHdr(inputFormat.colorInfo) + && !ColorInfo.isTransferHdr(requestedEncoderFormat.colorInfo); fallbackListener.onTransformationRequestFinalized( createFallbackTransformationRequest( transformationRequest,