From b66af2027c78a3634fae1c4ef31a4e9e3ed5fc3a Mon Sep 17 00:00:00 2001 From: claincly Date: Thu, 10 Feb 2022 14:05:17 +0000 Subject: [PATCH] Add logging for exceptions thrown while configuring MediaCodec. PiperOrigin-RevId: 427728320 --- .../exoplayer2/transformer/DefaultCodec.java | 5 ++- .../transformer/TransformationException.java | 43 ++++++++++++++++--- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultCodec.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultCodec.java index 27727b7f7b..21bab97afb 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultCodec.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultCodec.java @@ -106,7 +106,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; @@ -297,6 +297,7 @@ public final class DefaultCodec implements Codec { private static TransformationException createInitializationTransformationException( Exception cause, + MediaFormat mediaFormat, Format format, boolean isVideo, boolean isDecoder, @@ -304,6 +305,7 @@ public final class DefaultCodec implements Codec { if (cause instanceof IOException || cause instanceof MediaCodec.CodecException) { return TransformationException.createForCodec( cause, + mediaFormat, format, isVideo, isDecoder, @@ -315,6 +317,7 @@ public final class DefaultCodec implements Codec { if (cause instanceof IllegalArgumentException) { return TransformationException.createForCodec( cause, + mediaFormat, format, isVideo, isDecoder, diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationException.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationException.java index 6844778613..474c7124b2 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationException.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/TransformationException.java @@ -18,6 +18,7 @@ package com.google.android.exoplayer2.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; @@ -205,7 +206,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. @@ -219,11 +253,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); } /**