diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java index 3872bde365..54046e3b00 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/mh/ForceInterpretHdrVideoAsSdrTest.java @@ -76,8 +76,7 @@ public class ForceInterpretHdrVideoAsSdrTest { assertFileHasColorTransfer(exportTestResult.filePath, C.COLOR_TRANSFER_SDR); Log.i(TAG, "Transformed."); } catch (TransformationException exception) { - if (exception.errorCode != TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED - && exception.errorCode != TransformationException.ERROR_CODE_HDR_DECODING_UNSUPPORTED) { + if (exception.errorCode != TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED) { throw exception; } } @@ -113,8 +112,7 @@ public class ForceInterpretHdrVideoAsSdrTest { assertFileHasColorTransfer(exportTestResult.filePath, C.COLOR_TRANSFER_SDR); Log.i(TAG, "Transformed."); } catch (TransformationException exception) { - if (exception.errorCode != TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED - && exception.errorCode != TransformationException.ERROR_CODE_HDR_DECODING_UNSUPPORTED) { + if (exception.errorCode != TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED) { throw exception; } } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java index 4e933ceaa9..ebe32eba33 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java @@ -61,7 +61,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Nullable String mediaCodecName = EncoderUtil.findCodecForFormat(mediaFormat, /* isDecoder= */ true); if (mediaCodecName == null) { - throw createTransformationException(format); + throw createTransformationException( + format, /* reason= */ "The requested decoding format is not supported."); } return new DefaultCodec( context, @@ -81,11 +82,12 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; if (ColorInfo.isTransferHdr(format.colorInfo)) { if (requestSdrToneMapping && (SDK_INT < 31 || deviceNeedsNoToneMappingWorkaround())) { throw createTransformationException( - format, /* reason= */ "Tone-mapping HDR is not supported."); + format, /* reason= */ "Tone-mapping HDR is not supported on this device."); } if (SDK_INT < 29) { // TODO(b/266837571, b/267171669): Remove API version restriction after fixing linked bugs. - throw createTransformationException(format, /* reason= */ "Decoding HDR is not supported."); + throw createTransformationException( + format, /* reason= */ "Decoding HDR is not supported on this device."); } } @@ -116,7 +118,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; @Nullable String mediaCodecName = EncoderUtil.findCodecForFormat(mediaFormat, /* isDecoder= */ true); if (mediaCodecName == null) { - throw createTransformationException(format); + throw createTransformationException( + format, /* reason= */ "The requested video decoding format is not supported."); } return new DefaultCodec( context, format, mediaFormat, mediaCodecName, /* isDecoder= */ true, outputSurface); @@ -130,11 +133,6 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; || Build.ID.startsWith(/* Pixel Watch */ "rwd9.220429.053")); } - @RequiresNonNull("#1.sampleMimeType") - private static TransformationException createTransformationException(Format format) { - return createTransformationException(format, "The requested decoding format is not supported."); - } - @RequiresNonNull("#1.sampleMimeType") private static TransformationException createTransformationException( Format format, String reason) { 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 3afa7512d5..1741f56509 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultEncoderFactory.java @@ -20,7 +20,6 @@ import static androidx.media3.common.util.Assertions.checkArgument; import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import static androidx.media3.common.util.Assertions.checkStateNotNull; -import static androidx.media3.transformer.TransformationException.ERROR_CODE_HDR_ENCODING_UNSUPPORTED; import static java.lang.Math.abs; import static java.lang.Math.floor; import static java.lang.Math.round; @@ -184,7 +183,8 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { @Nullable String mediaCodecName = EncoderUtil.findCodecForFormat(mediaFormat, /* isDecoder= */ false); if (mediaCodecName == null) { - throw createTransformationException(format); + throw createTransformationException( + format, /* errorString= */ "The requested audio encoding format is not supported."); } return new DefaultCodec( context, @@ -223,7 +223,8 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { format, requestedVideoEncoderSettings, videoEncoderSelector, enableFallback); if (encoderAndClosestFormatSupport == null) { - throw createTransformationException(format); + throw createTransformationException( + format, /* errorString= */ "The requested video encoding format is not supported."); } MediaCodecInfo encoderInfo = encoderAndClosestFormatSupport.encoder; @@ -291,7 +292,8 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_Format32bitABGR2101010); } else { - throw createTransformationException(format, ERROR_CODE_HDR_ENCODING_UNSUPPORTED); + throw createTransformationException( + format, /* errorString= */ "Encoding HDR is not supported on this device."); } } else { mediaFormat.setInteger( @@ -667,18 +669,12 @@ public final class DefaultEncoderFactory implements Codec.EncoderFactory { return (int) (width * height * frameRate * 0.07 * 2); } - @RequiresNonNull("#1.sampleMimeType") - private static TransformationException createTransformationException(Format format) { - return createTransformationException( - format, TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED); - } - @RequiresNonNull("#1.sampleMimeType") private static TransformationException createTransformationException( - Format format, @TransformationException.ErrorCode int errorCode) { + Format format, String errorString) { return TransformationException.createForCodec( - new IllegalArgumentException("The requested encoding format is not supported."), - errorCode, + new IllegalArgumentException(errorString), + TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED, MimeTypes.isVideo(format.sampleMimeType), /* isDecoder= */ false, format); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java index 9e43fd8033..4dec2ba8a0 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java @@ -55,7 +55,6 @@ import androidx.media3.decoder.DecoderInputBuffer; if (isVideo && ColorInfo.isTransferHdr(format.colorInfo)) { errorMessage += " Requested HDR colorInfo: " + format.colorInfo; - errorCode = TransformationException.ERROR_CODE_HDR_ENCODING_UNSUPPORTED; } return TransformationException.createForCodec( diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java index 7510d51f6d..6a8dd3e8bc 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java @@ -66,7 +66,6 @@ public final class TransformationException extends Exception { ERROR_CODE_ENCODER_INIT_FAILED, ERROR_CODE_ENCODING_FAILED, ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED, - ERROR_CODE_HDR_ENCODING_UNSUPPORTED, ERROR_CODE_FRAME_PROCESSING_FAILED, ERROR_CODE_AUDIO_PROCESSING_FAILED, ERROR_CODE_MUXING_FAILED, @@ -135,8 +134,6 @@ public final class TransformationException extends Exception { public static final int ERROR_CODE_DECODING_FAILED = 3002; /** Caused by trying to decode content whose format is not supported. */ public static final int ERROR_CODE_DECODING_FORMAT_UNSUPPORTED = 3003; - /** Caused by the decoder not supporting HDR formats. */ - public static final int ERROR_CODE_HDR_DECODING_UNSUPPORTED = 3004; // Encoding errors (4xxx). @@ -151,8 +148,6 @@ public final class TransformationException extends Exception { * available. */ public static final int ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED = 4003; - /** Caused by the encoder not supporting HDR formats. */ - public static final int ERROR_CODE_HDR_ENCODING_UNSUPPORTED = 4004; // Video editing errors (5xxx). @@ -184,11 +179,9 @@ public final class TransformationException extends Exception { .put("ERROR_CODE_DECODER_INIT_FAILED", ERROR_CODE_DECODER_INIT_FAILED) .put("ERROR_CODE_DECODING_FAILED", ERROR_CODE_DECODING_FAILED) .put("ERROR_CODE_DECODING_FORMAT_UNSUPPORTED", ERROR_CODE_DECODING_FORMAT_UNSUPPORTED) - .put("ERROR_CODE_HDR_DECODING_UNSUPPORTED", ERROR_CODE_HDR_DECODING_UNSUPPORTED) .put("ERROR_CODE_ENCODER_INIT_FAILED", ERROR_CODE_ENCODER_INIT_FAILED) .put("ERROR_CODE_ENCODING_FAILED", ERROR_CODE_ENCODING_FAILED) .put("ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED", ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED) - .put("ERROR_CODE_HDR_ENCODING_UNSUPPORTED", ERROR_CODE_HDR_ENCODING_UNSUPPORTED) .put("ERROR_CODE_FRAME_PROCESSING_FAILED", ERROR_CODE_FRAME_PROCESSING_FAILED) .put("ERROR_CODE_AUDIO_PROCESSING_FAILED", ERROR_CODE_AUDIO_PROCESSING_FAILED) .put("ERROR_CODE_MUXING_FAILED", ERROR_CODE_MUXING_FAILED) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java index d315abf70c..e81211cc17 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationRequest.java @@ -97,9 +97,7 @@ public final class TransformationRequest { * metadata will be ignored, contents will be displayed incorrectly, likely with a washed out * look. * - *

Use of this flag may result in {@code - * TransformationException.ERROR_CODE_HDR_DECODING_UNSUPPORTED} or {@code - * ERROR_CODE_DECODING_FORMAT_UNSUPPORTED}. + *

Use of this flag may result in {@code ERROR_CODE_DECODING_FORMAT_UNSUPPORTED}. * *

This field is experimental, and will be renamed or removed in a future release. */ diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java index b69062dac7..b5d8a7eb8e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java @@ -88,8 +88,9 @@ import org.checkerframework.dataflow.qual.Pure; if (transformationRequest.hdrMode == HDR_MODE_EXPERIMENTAL_FORCE_INTERPRET_HDR_AS_SDR) { if (SDK_INT < 29) { throw TransformationException.createForCodec( - new IllegalArgumentException("Interpreting HDR video as SDR is not supported."), - TransformationException.ERROR_CODE_HDR_DECODING_UNSUPPORTED, + new IllegalArgumentException( + "Interpreting HDR video as SDR is not supported on this device."), + TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, /* isVideo= */ true, /* isDecoder= */ true, firstInputFormat);