diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java index 3c1c8aea61..9482014983 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultCodec.java @@ -108,7 +108,7 @@ public final class DefaultCodec implements Codec { } throw createInitializationTransformationException( - e, configurationFormat, isVideo, isDecoder, mediaCodecName); + e, mediaFormat, configurationFormat, isVideo, isDecoder, mediaCodecName); } this.mediaCodec = mediaCodec; this.inputSurface = inputSurface; @@ -299,6 +299,7 @@ public final class DefaultCodec implements Codec { private static TransformationException createInitializationTransformationException( Exception cause, + MediaFormat mediaFormat, Format format, boolean isVideo, boolean isDecoder, @@ -306,6 +307,7 @@ public final class DefaultCodec implements Codec { if (cause instanceof IOException || cause instanceof MediaCodec.CodecException) { return TransformationException.createForCodec( cause, + mediaFormat, format, isVideo, isDecoder, @@ -317,6 +319,7 @@ public final class DefaultCodec implements Codec { if (cause instanceof IllegalArgumentException) { return TransformationException.createForCodec( cause, + mediaFormat, format, isVideo, isDecoder, 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 5dce35e195..0a57e3edfa 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/TransformationException.java @@ -18,6 +18,7 @@ package androidx.media3.transformer; import static java.lang.annotation.ElementType.TYPE_USE; import android.media.MediaCodec; +import android.media.MediaFormat; import android.os.SystemClock; import androidx.annotation.IntDef; import androidx.annotation.Nullable; @@ -207,7 +208,40 @@ public final class TransformationException extends Exception { * Creates an instance for a decoder or encoder related exception. * * @param cause The cause of the failure. - * @param format The {@link Format} used for configuring the decoder/encoder. + * @param mediaFormat The {@link MediaFormat} used for configuring the underlying {@link + * MediaCodec}, if known. + * @param format The {@link Format} used for configuring the {@link Codec}. + * @param isVideo Whether the decoder or encoder is configured for video. + * @param isDecoder Whether the exception is created for a decoder. + * @param mediaCodecName The name of the {@link MediaCodec} used, if known. + * @param errorCode See {@link #errorCode}. + * @return The created instance. + */ + public static TransformationException createForCodec( + Throwable cause, + @Nullable MediaFormat mediaFormat, + Format format, + boolean isVideo, + boolean isDecoder, + @Nullable String mediaCodecName, + int errorCode) { + String componentName = (isVideo ? "Video" : "Audio") + (isDecoder ? "Decoder" : "Encoder"); + String errorMessage = + componentName + + " error, format=" + + format + + ", mediaCodecName=" + + mediaCodecName + + ", mediaFormat=" + + (mediaFormat == null ? "no configured MediaFormat" : mediaFormat.toString()); + return new TransformationException(errorMessage, cause, errorCode); + } + + /** + * Creates an instance for a decoder or encoder related exception. + * + * @param cause The cause of the failure. + * @param format The {@link Format} used for configuring the {@link Codec}. * @param isVideo Whether the decoder or encoder is configured for video. * @param isDecoder Whether the exception is created for a decoder. * @param mediaCodecName The name of the {@link MediaCodec} used, if known. @@ -221,11 +255,8 @@ public final class TransformationException extends Exception { boolean isDecoder, @Nullable String mediaCodecName, int errorCode) { - String componentName = (isVideo ? "Video" : "Audio") + (isDecoder ? "Decoder" : "Encoder"); - return new TransformationException( - componentName + " error, format = " + format + ", mediaCodecName=" + mediaCodecName, - cause, - errorCode); + return createForCodec( + cause, /* mediaFormat= */ null, format, isVideo, isDecoder, mediaCodecName, errorCode); } /**