From a772e1525cf8383df17a959c032048ab7cefe21a Mon Sep 17 00:00:00 2001 From: Gilles Khouzam Date: Tue, 13 Aug 2024 12:11:59 -0700 Subject: [PATCH 1/4] Add a static rendererSupportsFormat method for MCVR This refactors the `supportsFormat` method on the MediaCodecVideoRenderer to be a static method that can be called from external components to determine if a video format is supported by the device renderers. Since `context` is the only component that is part of the MCVR, it can easily be obtained externally and passed to the method. This can help optimize format support decisions ahead of time of a player having been instantiated, such as removing unsupported representations from a dash manifest. This could also be done for the MCAR but would also require passing in the AudioSink and isn't required at this time. --- .../media3/exoplayer/video/MediaCodecVideoRenderer.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index e812659768..730f9adbae 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -486,6 +486,14 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer @Override protected @Capabilities int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format) throws DecoderQueryException { + return rendererSupportsFormat(context, mediaCodecSelector, format); + } + + public static @Capabilities int rendererSupportsFormat( + Context context, + MediaCodecSelector mediaCodecSelector, + Format format) + throws DecoderQueryException { String mimeType = format.sampleMimeType; if (!MimeTypes.isVideo(mimeType)) { return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE); From 34f50adcd2b4288d9811533f3ef1279475ed4b50 Mon Sep 17 00:00:00 2001 From: microkatz Date: Tue, 8 Oct 2024 14:43:42 +0000 Subject: [PATCH 2/4] Format with google-java-format --- .../exoplayer/video/MediaCodecVideoRenderer.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index 730f9adbae..f1a84d94c8 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -486,14 +486,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer @Override protected @Capabilities int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format) throws DecoderQueryException { - return rendererSupportsFormat(context, mediaCodecSelector, format); - } + return rendererSupportsFormat(context, mediaCodecSelector, format); + } public static @Capabilities int rendererSupportsFormat( - Context context, - MediaCodecSelector mediaCodecSelector, - Format format) - throws DecoderQueryException { + Context context, MediaCodecSelector mediaCodecSelector, Format format) + throws DecoderQueryException { String mimeType = format.sampleMimeType; if (!MimeTypes.isVideo(mimeType)) { return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE); From ae363671b514a670eec4c47eb502c519781be16e Mon Sep 17 00:00:00 2001 From: microkatz Date: Tue, 8 Oct 2024 15:55:39 +0000 Subject: [PATCH 3/4] Moved supportsFormat functional code to private method --- .../video/MediaCodecVideoRenderer.java | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index f1a84d94c8..35560c53f8 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -67,6 +67,7 @@ import androidx.media3.exoplayer.ExoPlaybackException; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.FormatHolder; import androidx.media3.exoplayer.PlayerMessage.Target; +import androidx.media3.exoplayer.Renderer; import androidx.media3.exoplayer.RendererCapabilities; import androidx.media3.exoplayer.mediacodec.MediaCodecAdapter; import androidx.media3.exoplayer.mediacodec.MediaCodecDecoderException; @@ -483,13 +484,29 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer return TAG; } + /** + * Returns the extent to which a {@link MediaCodecVideoRenderer} instance would support a given + * format. + * + * @param context A context. + * @param mediaCodecSelector The decoder selector. + * @param format for which to retrieve the {@code MediaCodecVideoRenderer} support. + * @return The {@link Capabilities} for this format. + * @throws DecoderQueryException Thrown if there was an error querying decoders. + */ + public static @Capabilities int supportsFormat( + Context context, MediaCodecSelector mediaCodecSelector, Format format) + throws DecoderQueryException { + return supportsFormatInternal(context, mediaCodecSelector, format); + } + @Override protected @Capabilities int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format) throws DecoderQueryException { - return rendererSupportsFormat(context, mediaCodecSelector, format); + return supportsFormatInternal(context, mediaCodecSelector, format); } - public static @Capabilities int rendererSupportsFormat( + private static @Capabilities int supportsFormatInternal( Context context, MediaCodecSelector mediaCodecSelector, Format format) throws DecoderQueryException { String mimeType = format.sampleMimeType; From 3f44f9a898f7c04b821061f918ba4f36e9f943d8 Mon Sep 17 00:00:00 2001 From: microkatz Date: Tue, 8 Oct 2024 15:56:59 +0000 Subject: [PATCH 4/4] Cosmetic changes --- .../media3/exoplayer/video/MediaCodecVideoRenderer.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java index 35560c53f8..c9e9884358 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java @@ -67,7 +67,6 @@ import androidx.media3.exoplayer.ExoPlaybackException; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.FormatHolder; import androidx.media3.exoplayer.PlayerMessage.Target; -import androidx.media3.exoplayer.Renderer; import androidx.media3.exoplayer.RendererCapabilities; import androidx.media3.exoplayer.mediacodec.MediaCodecAdapter; import androidx.media3.exoplayer.mediacodec.MediaCodecDecoderException; @@ -485,12 +484,12 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer } /** - * Returns the extent to which a {@link MediaCodecVideoRenderer} instance would support a given - * format. + * Returns the {@link Capabilities} of MediaCodecVideoRenderer for a given {@link Format}. * * @param context A context. * @param mediaCodecSelector The decoder selector. - * @param format for which to retrieve the {@code MediaCodecVideoRenderer} support. + * @param format The {@link Format} for which to check the {@code MediaCodecVideoRenderer}'s + * support. * @return The {@link Capabilities} for this format. * @throws DecoderQueryException Thrown if there was an error querying decoders. */