From 096981920fa677d3779518060a526c7fe90a8374 Mon Sep 17 00:00:00 2001 From: huangdarwin Date: Mon, 7 Nov 2022 19:21:21 +0000 Subject: [PATCH] HDR: Set decoder codec profile and level if available. This should be necessary to ensure decoders see fewer errors. Setting this resulted in removing native_dequeueOutputBuffer errors on OMX.MTK decoders for in-app tone mapping prototyping. PiperOrigin-RevId: 486715941 (cherry picked from commit 0b7e5bbad287053d56720ad682c1a5015eedb9cf) --- .../exoplayer2/transformer/DefaultDecoderFactory.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultDecoderFactory.java b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultDecoderFactory.java index bf107017d0..0424805dd3 100644 --- a/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultDecoderFactory.java +++ b/library/transformer/src/main/java/com/google/android/exoplayer2/transformer/DefaultDecoderFactory.java @@ -22,9 +22,11 @@ import static com.google.android.exoplayer2.util.Util.SDK_INT; import android.annotation.SuppressLint; import android.content.Context; import android.media.MediaFormat; +import android.util.Pair; import android.view.Surface; import androidx.annotation.Nullable; import com.google.android.exoplayer2.Format; +import com.google.android.exoplayer2.mediacodec.MediaCodecUtil; import com.google.android.exoplayer2.util.MediaFormatUtil; import com.google.android.exoplayer2.util.MimeTypes; import org.checkerframework.checker.nullness.qual.RequiresNonNull; @@ -90,6 +92,13 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; MediaFormat.KEY_COLOR_TRANSFER_REQUEST, MediaFormat.COLOR_TRANSFER_SDR_VIDEO); } + @Nullable + Pair codecProfileAndLevel = MediaCodecUtil.getCodecProfileAndLevel(format); + if (codecProfileAndLevel != null) { + MediaFormatUtil.maybeSetInteger( + mediaFormat, MediaFormat.KEY_PROFILE, codecProfileAndLevel.first); + } + @Nullable String mediaCodecName = EncoderUtil.findCodecForFormat(mediaFormat, /* isDecoder= */ true); if (mediaCodecName == null) {