diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.java index 694d565d69..8d3ce5c5d9 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/mediacodec/MediaCodecUtil.java @@ -256,6 +256,26 @@ public final class MediaCodecUtil { return decoderInfos; } + /** + * Returns a copy of the provided decoder list sorted such that decoders with complete format + * support are listed first. The returned list is modifiable for convenience. + */ + @CheckResult + public static List getDecoderInfosSortedByFullFormatSupport( + List decoderInfos, Format format) { + decoderInfos = new ArrayList<>(decoderInfos); + sortByScore( + decoderInfos, + decoderInfo -> { + try { + return decoderInfo.isFormatSupported(format) ? 1 : 0; + } catch (DecoderQueryException e) { + return -1; + } + }); + return decoderInfos; + } + /** * Returns a copy of the provided decoder list sorted such that software decoders are listed * first. Break ties by listing non-{@link MediaCodecInfo#vendor} decoders first, due to issues diff --git a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java index cd6a684169..5dc12b6163 100644 --- a/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java +++ b/libraries/transformer/src/androidTest/java/androidx/media3/transformer/AndroidTestUtil.java @@ -1400,7 +1400,7 @@ public final class AndroidTestUtil { private static String findDecoderForFormat(Format format) throws MediaCodecUtil.DecoderQueryException { List decoderInfoList = - MediaCodecUtil.getDecoderInfosSortedByFormatSupport( + MediaCodecUtil.getDecoderInfosSortedByFullFormatSupport( MediaCodecUtil.getDecoderInfosSoftMatch( MediaCodecSelector.DEFAULT, format, diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java index bd76ed662e..675c3fa3b0 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultDecoderFactory.java @@ -312,7 +312,7 @@ public final class DefaultDecoderFactory implements Codec.DecoderFactory { checkNotNull(format.sampleMimeType); try { decoderInfos = - MediaCodecUtil.getDecoderInfosSortedByFormatSupport( + MediaCodecUtil.getDecoderInfosSortedByFullFormatSupport( MediaCodecUtil.getDecoderInfosSoftMatch( mediaCodecSelector, format,