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 0abac01c2f..20440d51d5 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/SamplePipeline.java @@ -20,6 +20,7 @@ import static androidx.media3.common.util.Assertions.checkStateNotNull; import androidx.annotation.Nullable; import androidx.media3.common.C; +import androidx.media3.common.ColorInfo; import androidx.media3.common.Format; import androidx.media3.common.MimeTypes; import androidx.media3.decoder.DecoderInputBuffer; @@ -44,14 +45,22 @@ import androidx.media3.decoder.DecoderInputBuffer; trackType = MimeTypes.getTrackType(firstInputFormat.sampleMimeType); } - protected static TransformationException createNoSupportedMimeTypeException( - Format requestedEncoderFormat) { + protected static TransformationException createNoSupportedMimeTypeException(Format format) { + String errorMessage = "No MIME type is supported by both encoder and muxer."; + int errorCode = TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED; + boolean isVideo = MimeTypes.isVideo(format.sampleMimeType); + + if (isVideo && ColorInfo.isTransferHdr(format.colorInfo)) { + errorMessage += " Requested HDR colorInfo: " + format.colorInfo; + errorCode = TransformationException.ERROR_CODE_HDR_ENCODING_UNSUPPORTED; + } + return TransformationException.createForCodec( - new IllegalArgumentException("No MIME type is supported by both encoder and muxer."), - TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED, - MimeTypes.isVideo(requestedEncoderFormat.sampleMimeType), + new IllegalArgumentException(errorMessage), + errorCode, + isVideo, /* isDecoder= */ false, - requestedEncoderFormat); + format); } @Override 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 c7f8f24ebc..3a306d4862 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/VideoSamplePipeline.java @@ -441,18 +441,7 @@ import org.checkerframework.dataflow.qual.Pure; findSupportedMimeTypeForEncoderAndMuxer( requestedOutputMimeType, muxerSupportedMimeTypes, requestedEncoderFormat.colorInfo); if (supportedMimeType == null) { - if (ColorInfo.isTransferHdr(requestedEncoderFormat.colorInfo)) { - throw TransformationException.createForCodec( - new IllegalStateException( - "No MIME type supported by both encoder and muxer for requested HDR colorInfo: " - + requestedEncoderFormat.colorInfo), - TransformationException.ERROR_CODE_HDR_ENCODING_UNSUPPORTED, - /* isVideo= */ true, - /* isDecoder= */ false, - requestedEncoderFormat); - } else { - throw createNoSupportedMimeTypeException(requestedEncoderFormat); - } + throw createNoSupportedMimeTypeException(requestedEncoderFormat); } encoder =