From e5fde04a1929888709a04bbe28aa45815b4fa5b1 Mon Sep 17 00:00:00 2001 From: hschlueter Date: Wed, 19 Jan 2022 12:22:08 +0000 Subject: [PATCH] Merge muxer and encoder output format error codes. After implementing fallback, it won't always be possible to differentiate between muxer and encoder as the cause of an output format not being supported. PiperOrigin-RevId: 422780443 --- .../transformer/DefaultCodecFactory.java | 2 +- .../transformer/TransformationException.java | 27 +++++++------------ .../transformer/TransformerAudioRenderer.java | 2 +- .../transformer/TransformerVideoRenderer.java | 2 +- .../media3/transformer/TransformerTest.java | 8 +++--- 5 files changed, 17 insertions(+), 24 deletions(-) diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodecFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodecFactory.java index c65caf545d..ef0443a8b0 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodecFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodecFactory.java @@ -294,7 +294,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; mediaCodecName, isDecoder ? TransformationException.ERROR_CODE_DECODING_FORMAT_UNSUPPORTED - : TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED); + : TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } return TransformationException.createForUnexpected(cause); } 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 db780db91f..270205258a 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java @@ -71,10 +71,9 @@ public final class TransformationException extends Exception { ERROR_CODE_DECODING_FORMAT_UNSUPPORTED, ERROR_CODE_ENCODER_INIT_FAILED, ERROR_CODE_ENCODING_FAILED, - ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED, + ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED, ERROR_CODE_GL_INIT_FAILED, ERROR_CODE_GL_PROCESSING_FAILED, - ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED, ERROR_CODE_MUXING_FAILED, }) public @interface ErrorCode {} @@ -148,8 +147,13 @@ public final class TransformationException extends Exception { public static final int ERROR_CODE_ENCODER_INIT_FAILED = 4001; /** Caused by a failure while trying to encode media samples. */ public static final int ERROR_CODE_ENCODING_FAILED = 4002; - /** Caused by requesting to encode content in a format that is not supported by the device. */ - public static final int ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED = 4003; + /** + * Caused by the output format for a track not being supported. + * + *

Supported output formats are limited by the muxer's capabilities and the {@link + * Codec.DecoderFactory encoders} available. + */ + public static final int ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED = 4003; // Video editing errors (5xxx). @@ -159,16 +163,8 @@ public final class TransformationException extends Exception { public static final int ERROR_CODE_GL_PROCESSING_FAILED = 5002; // Muxing errors (6xxx). - - /** - * Caused by an output sample MIME type inferred from the input not being supported by the muxer. - * - *

Use {@link TransformationRequest.Builder#setAudioMimeType(String)} or {@link - * TransformationRequest.Builder#setVideoMimeType(String)} to transcode to a supported MIME type. - */ - public static final int ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED = 6001; /** Caused by a failure while muxing media samples. */ - public static final int ERROR_CODE_MUXING_FAILED = 6002; + public static final int ERROR_CODE_MUXING_FAILED = 6001; private static final ImmutableBiMap NAME_TO_ERROR_CODE = new ImmutableBiMap.Builder() @@ -187,12 +183,9 @@ public final class TransformationException extends Exception { .put("ERROR_CODE_DECODING_FORMAT_UNSUPPORTED", ERROR_CODE_DECODING_FORMAT_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_OUTPUT_FORMAT_UNSUPPORTED", ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED) .put("ERROR_CODE_GL_INIT_FAILED", ERROR_CODE_GL_INIT_FAILED) .put("ERROR_CODE_GL_PROCESSING_FAILED", ERROR_CODE_GL_PROCESSING_FAILED) - .put( - "ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED", - ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED) .put("ERROR_CODE_MUXING_FAILED", ERROR_CODE_MUXING_FAILED) .buildOrThrow(); diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java index c17285bd69..35d9c3b87d 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerAudioRenderer.java @@ -75,7 +75,7 @@ import androidx.media3.extractor.metadata.mp4.SlowMotionData; "The output sample MIME inferred from the input format is not supported by the muxer." + " Sample MIME type: " + sampleMimeType), - TransformationException.ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED); + TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } if (shouldPassthrough(inputFormat)) { samplePipeline = new PassthroughSamplePipeline(inputFormat); 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 cf7c3622c9..6b067bfec1 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformerVideoRenderer.java @@ -84,7 +84,7 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; "The output sample MIME inferred from the input format is not supported by the muxer." + " Sample MIME type: " + sampleMimeType), - TransformationException.ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED); + TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } if (shouldPassthrough(inputFormat)) { samplePipeline = new PassthroughSamplePipeline(inputFormat); diff --git a/libraries/transformer/src/test/java/androidx/media3/transformer/TransformerTest.java b/libraries/transformer/src/test/java/androidx/media3/transformer/TransformerTest.java index bc7fe5a9cb..fffa5ba9f6 100644 --- a/libraries/transformer/src/test/java/androidx/media3/transformer/TransformerTest.java +++ b/libraries/transformer/src/test/java/androidx/media3/transformer/TransformerTest.java @@ -359,7 +359,7 @@ public final class TransformerTest { assertThat(exception).hasCauseThat().isInstanceOf(IllegalArgumentException.class); assertThat(exception.errorCode) - .isEqualTo(TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED); + .isEqualTo(TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } @Test @@ -403,7 +403,7 @@ public final class TransformerTest { assertThat(exception).hasCauseThat().isInstanceOf(IllegalArgumentException.class); assertThat(exception.errorCode) - .isEqualTo(TransformationException.ERROR_CODE_ENCODING_FORMAT_UNSUPPORTED); + .isEqualTo(TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } @Test @@ -434,7 +434,7 @@ public final class TransformerTest { assertThat(exception).hasCauseThat().isInstanceOf(IllegalArgumentException.class); assertThat(exception).hasCauseThat().hasMessageThat().contains("audio"); assertThat(exception.errorCode) - .isEqualTo(TransformationException.ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED); + .isEqualTo(TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } @Test @@ -453,7 +453,7 @@ public final class TransformerTest { assertThat(exception).hasCauseThat().isInstanceOf(IllegalArgumentException.class); assertThat(exception).hasCauseThat().hasMessageThat().contains("video"); assertThat(exception.errorCode) - .isEqualTo(TransformationException.ERROR_CODE_MUXER_SAMPLE_MIME_TYPE_UNSUPPORTED); + .isEqualTo(TransformationException.ERROR_CODE_OUTPUT_FORMAT_UNSUPPORTED); } @Test