From 2b6f62b2a124e3a635ddcba7d9f256c52b564d89 Mon Sep 17 00:00:00 2001 From: claincly Date: Fri, 1 Jul 2022 16:05:39 +0000 Subject: [PATCH] Fix error in frame rate handling. The old getString() will throw because FRAME_RATE can only be float or int. PiperOrigin-RevId: 458481251 --- .../android/exoplayer2/transformer/EncoderUtil.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/EncoderUtil.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/EncoderUtil.java index c4ebdfc3ce..1e0373aea2 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/EncoderUtil.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/EncoderUtil.java @@ -237,9 +237,14 @@ public final class EncoderUtil { MediaCodecList mediaCodecList = new MediaCodecList(MediaCodecList.REGULAR_CODECS); // Format must not include KEY_FRAME_RATE on API21. // https://developer.android.com/reference/android/media/MediaCodecList#findDecoderForFormat(android.media.MediaFormat) - @Nullable String frameRate = null; + float frameRate = Format.NO_VALUE; if (Util.SDK_INT == 21 && format.containsKey(MediaFormat.KEY_FRAME_RATE)) { - frameRate = format.getString(MediaFormat.KEY_FRAME_RATE); + try { + frameRate = format.getFloat(MediaFormat.KEY_FRAME_RATE); + } catch (ClassCastException e) { + frameRate = format.getInteger(MediaFormat.KEY_FRAME_RATE); + } + // Clears the frame rate field. format.setString(MediaFormat.KEY_FRAME_RATE, null); } @@ -249,7 +254,7 @@ public final class EncoderUtil { : mediaCodecList.findEncoderForFormat(format); if (Util.SDK_INT == 21) { - MediaFormatUtil.maybeSetString(format, MediaFormat.KEY_FRAME_RATE, frameRate); + MediaFormatUtil.maybeSetInteger(format, MediaFormat.KEY_FRAME_RATE, round(frameRate)); } return mediaCodecName; }