From c0bef3dbf7e910f4e1280133b97dd804472e4865 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 (cherry picked from commit 7075f78eb26daef44275a6fde5362d5139e6df37) --- .../FinalMatrixTransformationProcessorWrapper.java | 2 +- .../media3/effect/GlEffectsFrameProcessor.java | 4 ++-- .../effect/MatrixTransformationProcessor.java | 10 +++++----- .../google/android/exoplayer2/video/ColorInfo.java | 2 +- .../transformer/DefaultEncoderFactory.java | 2 +- .../transformer/TransformerVideoRenderer.java | 2 +- .../transformer/VideoTranscodingSamplePipeline.java | 13 +++++++------ 7 files changed, 18 insertions(+), 17 deletions(-) diff --git a/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java b/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java index 7800e645fc..555fa16cbf 100644 --- a/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/FinalMatrixTransformationProcessorWrapper.java +++ b/google3/third_party/java_src/android_libs/media/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/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java b/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java index 47fcaee91d..c1b81e91fc 100644 --- a/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java +++ b/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/GlEffectsFrameProcessor.java @@ -117,7 +117,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 @@ -195,7 +195,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/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java b/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java index 86542efb77..daadb22231 100644 --- a/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java +++ b/google3/third_party/java_src/android_libs/media/libraries/effect/src/main/java/androidx/media3/effect/MatrixTransformationProcessor.java @@ -158,12 +158,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. */ @@ -178,11 +178,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/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java b/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java index b59b05b95c..9215907a39 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/ColorInfo.java @@ -91,7 +91,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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java index d86c9ac1cd..2a98683829 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultEncoderFactory.java @@ -281,7 +281,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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java index 82e6a60486..1831cf84d4 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformerVideoRenderer.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/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/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java index 236d2900a7..aca208750e 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/VideoTranscodingSamplePipeline.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/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,