Can not select the Dolby Vision AdaptationSet
Version
Media3 1.2.1
More version details
No response
Devices that reproduce the issue
FireOS 8 FireTV [ro.product.build.fingerprint]: [Amazon/ginza/ginza:11/RMAIN1.1990N/0024327472640:user/amz-d,dev-keys]
Devices that do not reproduce the issue
FireOS 7 FireTV
Reproducible in the demo app?
Yes
Reproduction steps
- Install Media3 Demo app.
- Play the demo.mpd
Expected result
Exoplayer would select the Dolby Vision AdaptationSet
Actual result
ExoPlayer selected the HEVC AdaptationSet
Media
Manifest: demo.mpd.zip
Log: bugreport-ginza-dt-RMAIN1.1990N-2024-08-20-06-39-52.zip
Bug Report
- [ ] You will email the zip file produced by
adb bugreportto [email protected] after filing this issue.
I added some logs in media/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java
protected @Capabilities int supportsFormat(MediaCodecSelector mediaCodecSelector, Format format)
throws DecoderQueryException {
String mimeType = format.sampleMimeType;
if (!MimeTypes.isVideo(mimeType)) {
return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_TYPE);
}
@Nullable DrmInitData drmInitData = format.drmInitData;
// Assume encrypted content requires secure decoders.
boolean requiresSecureDecryption = drmInitData != null;
List<MediaCodecInfo> decoderInfos =
getDecoderInfos(
context,
mediaCodecSelector,
format,
requiresSecureDecryption,
/* requiresTunnelingDecoder= */ false);
if (requiresSecureDecryption && decoderInfos.isEmpty()) {
// No secure decoders are available. Fall back to non-secure decoders.
decoderInfos =
getDecoderInfos(
context,
mediaCodecSelector,
format,
/* requiresSecureDecoder= */ false,
/* requiresTunnelingDecoder= */ false);
}
if (decoderInfos.isEmpty()) {
return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_SUBTYPE);
}
if (!supportsFormatDrm(format)) {
return RendererCapabilities.create(C.FORMAT_UNSUPPORTED_DRM);
}
// Check whether the first decoder supports the format. This is the preferred decoder for the
// format's MIME type, according to the MediaCodecSelector.
MediaCodecInfo decoderInfo = decoderInfos.get(0);
boolean isFormatSupported = decoderInfo.isFormatSupported(format);
if (MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
Log.i(TAG, "decoderInfos = " + decoderInfos.toString());
Log.i(TAG, "format = " + format.toString());
Log.i(TAG, "isFormatSupported = " + (isFormatSupported ? "True" : "False"));
}
08-20 06:39:23.272 10213 1597 1840 I MediaCodecVideoRenderer: decoderInfos = [c2.mtk.dvav.se.decoder, c2.mtk.dvav1.10.decoder, c2.mtk.dvhe.dtr.decoder, c2.mtk.dvhe.st.decoder, c2.mtk.dvhe.stn.decoder]
08-20 06:39:23.272 10213 1597 1840 I MediaCodecVideoRenderer: format = Format(v29, null, video/mp4, video/dolby-vision, dvh1.05.03, 11505339, null, [1920, 1080, 23.976025, null], [-1, -1])
08-20 06:39:23.272 10213 1597 1840 I MediaCodecVideoRenderer: isFormatSupported = False
It indicates that the first decoder in decoderInfos is AVC DolbyVision decoder, so isFormatSupported() will return false when the format is HEVC DolbyVision 'dvh1.05.03'. I checked the vndk's c2store, it uses the map<C2String, ComponentLoader> to store the decoder component. https://cs.android.com/android/platform/superproject/+/android14-qpr3-release:frameworks/av/media/codec2/vndk/C2Store.cpp;l=1022?q=C2Store.cpp&ss=android%2Fplatform%2Fsuperproject
So the decoder info is stored in dictionary order and can not be adjusted.
For ACodec +OMX, the decoder component is stored in vector, we can adjust the order in media_codecs.xml. So I can not reproduced this issue on FireOS 7 FireTV.
I found a way to fix this issue by using the following function to get the sorted decoderInfos.
protected List<MediaCodecInfo> getDecoderInfos(
MediaCodecSelector mediaCodecSelector, Format format, boolean requiresSecureDecoder)
throws DecoderQueryException {
return MediaCodecUtil.getDecoderInfosSortedByFormatSupport(
getDecoderInfos(context, mediaCodecSelector, format, requiresSecureDecoder, tunneling),
format);
}
Please help to review, thanks.
--- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java
+++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java
@@ -427,20 +427,17 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer implements Video
boolean requiresSecureDecryption = drmInitData != null;
List<MediaCodecInfo> decoderInfos =
getDecoderInfos(
- context,
mediaCodecSelector,
format,
- requiresSecureDecryption,
- /* requiresTunnelingDecoder= */ false);
+ requiresSecureDecryption);
+
if (requiresSecureDecryption && decoderInfos.isEmpty()) {
// No secure decoders are available. Fall back to non-secure decoders.
decoderInfos =
getDecoderInfos(
- context,
mediaCodecSelector,
format,
- /* requiresSecureDecoder= */ false,
- /* requiresTunnelingDecoder= */ false);
+ /* requiresSecureDecoder= */ false);
}
if (decoderInfos.isEmpty()) {
decoderInfos = [c2.mtk.dvhe.stn.decoder, c2.mtk.dvav.se.decoder, c2.mtk.dvav1.10.decoder, c2.mtk.dvhe.dtr.decoder, c2.mtk.dvhe.st.decoder]
08-20 08:35:45.711 17023 17077 I MediaCodecVideoRenderer: format = Format(v32, null, video/mp4, video/dolby-vision, dvh1.05.01, 542888, null, [448, 252, 23.976025, null], [-1, -1])
08-20 08:35:45.711 17023 17077 I MediaCodecVideoRenderer: isFormatSupported = True
The first decoder in decoderInfos is HEVC DolbyVision decoder after applying the above change, isFormatSupported() return true.
Hello @Jietang126,
I looked through the trace that you sent and I don't see any ExoPlayer logs? Are you sure that you recorded the scenario with the Demo App? What I would love to see is the section in Logcat that prints out the support for the different tracks like as seen in the example below.
2024-08-09 11:56:57.836 20761-20761 EventLogger androidx.media3.demo.main D group [
2024-08-09 11:56:57.836 20761-20761 EventLogger androidx.media3.demo.main D [X] Track:0, id=1, mimeType=video/avc, container=video/mp4, bitrate=769255, codecs=avc1.42c01e, res=320x142, fps=24.0, supported=YES
2024-08-09 11:56:57.837 20761-20761 EventLogger androidx.media3.demo.main D [X] Track:1, id=2, mimeType=video/avc, container=video/mp4, bitrate=1774254, codecs=avc1.4d401f, res=854x380, fps=24.0, supported=YES
2024-08-09 11:56:57.837 20761-20761 EventLogger androidx.media3.demo.main D [ ] Track:2, id=3, mimeType=video/avc, container=video/mp4, bitrate=7203938, codecs=avc1.4d4028, res=1280x570, fps=24.0, supported=NO_EXCEEDS_CAPABILITIES
2024-08-09 11:56:57.837 20761-20761 EventLogger androidx.media3.demo.main D [ ] Track:3, id=4, mimeType=video/avc, container=video/mp4, bitrate=18316946, codecs=avc1.64002a, res=1920x856, fps=24.0, supported=NO_EXCEEDS_CAPABILITIES
2024-08-09 11:56:57.837 20761-20761 EventLogger androidx.media3.demo.main D ]
Is it just the specific c2.mtk.dvav.se.decoder hardware decoder that does not support the Dolby Format you are trying to play? Hence your wish to change the order in the decoder list method?
My suggestion would be to file a bug with Amazon as far as why they don't support that Dolby format.
In helping you with an ExoPlayer solution, rather than altering the code in MediaCodecVideoRenderer, you could just provide a customized MediaCodecSelector when creating your ExoPlayer instance. The selector could either reorder the decoder list or remove c2.mtk.dvav.se.decoder.
Here is an example of what that might look like:
DefaultRenderersFactory defaultRenderersFactory
= new DefaultRenderersFactory(/* context= */ this);
MediaCodecSelector mediaCodecSelector = new MediaCodecSelector() {
@Override
public List<MediaCodecInfo> getDecoderInfos(String mimeType, boolean requiresSecureDecoder,
boolean requiresTunnelingDecoder) throws DecoderQueryException {
ImmutableList.Builder<MediaCodecInfo> mediaCodecInfoListResult = new ImmutableList.Builder<>();
List<MediaCodecInfo> mediaCodecInfoList =
MediaCodecSelector.DEFAULT.getDecoderInfos(mimeType, requiresSecureDecoder, requiresTunnelingDecoder);
// Either remove or reorder
for (MediaCodecInfo m : mediaCodecInfoList) {
if (!m.name.equals("c2.mtk.dvav.se.decoder")) {
mediaCodecInfoListResult.add(m);
}
}
return mediaCodecInfoListResult.build();
}
};
defaultRenderersFactory.setMediaCodecSelector(mediaCodecSelector);
ExoPlayer.Builder playerBuilder =
new ExoPlayer.Builder(/* context= */ this)
.setRenderersFactory(defaultRenderersFactory);
Hi @microkatz Thanks for your quick response. I can find the ExoPlayer logs in bugreport-ginza-dt-RMAIN1.1990N-2024-08-20-06-39-52.txt.
08-20 06:39:23.385 10213 1597 1597 D EventLogger: group [
08-20 06:39:23.389 10213 1597 1597 D EventLogger: [ ] Track:0, id=v2, mimeType=video/avc, container=video/mp4, bitrate=367797, codecs=avc1.64000d, res=416x234, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.390 10213 1597 1597 D EventLogger: [ ] Track:1, id=v3, mimeType=video/avc, container=video/mp4, bitrate=542372, codecs=avc1.640015, res=480x270, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.390 10213 1597 1597 D EventLogger: [ ] Track:2, id=v5, mimeType=video/avc, container=video/mp4, bitrate=834038, codecs=avc1.640015, res=544x306, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.390 10213 1597 1597 D EventLogger: [ ] Track:3, id=v1, mimeType=video/avc, container=video/mp4, bitrate=1128320, codecs=avc1.64001e, res=640x360, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.391 10213 1597 1597 D EventLogger: [ ] Track:4, id=v8, mimeType=video/avc, container=video/mp4, bitrate=1488868, codecs=avc1.64001e, res=768x432, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.391 10213 1597 1597 D EventLogger: [ ] Track:5, id=v6, mimeType=video/avc, container=video/mp4, bitrate=2365803, codecs=avc1.64001f, res=1024x576, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.392 10213 1597 1597 D EventLogger: [ ] Track:6, id=v4, mimeType=video/avc, container=video/mp4, bitrate=3956716, codecs=avc1.64001f, res=1280x720, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.392 10213 1597 1597 D EventLogger: [ ] Track:7, id=v0, mimeType=video/avc, container=video/mp4, bitrate=5693333, codecs=avc1.640028, res=1600x900, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.392 10213 1597 1597 D EventLogger: [ ] Track:8, id=v7, mimeType=video/avc, container=video/mp4, bitrate=9291457, codecs=avc1.640029, res=1920x1080, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.392 10213 1597 1597 D EventLogger: ]
08-20 06:39:23.392 10213 1597 1597 D EventLogger: group [
08-20 06:39:23.392 10213 1597 1597 D EventLogger: [ ] Track:0, id=v32, mimeType=video/dolby-vision, container=video/mp4, bitrate=542888, codecs=dvh1.05.01, res=448x252, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.393 10213 1597 1597 D EventLogger: [ ] Track:1, id=v33, mimeType=video/dolby-vision, container=video/mp4, bitrate=753285, codecs=dvh1.05.01, res=512x288, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.393 10213 1597 1597 D EventLogger: [ ] Track:2, id=v31, mimeType=video/dolby-vision, container=video/mp4, bitrate=979637, codecs=dvh1.05.01, res=576x324, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.393 10213 1597 1597 D EventLogger: [ ] Track:3, id=v35, mimeType=video/dolby-vision, container=video/mp4, bitrate=1268904, codecs=dvh1.05.01, res=640x360, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: [ ] Track:4, id=v27, mimeType=video/dolby-vision, container=video/mp4, bitrate=1960962, codecs=dvh1.05.01, res=768x432, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: [ ] Track:5, id=v30, mimeType=video/dolby-vision, container=video/mp4, bitrate=3392388, codecs=dvh1.05.01, res=1024x576, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: [ ] Track:6, id=v28, mimeType=video/dolby-vision, container=video/mp4, bitrate=4923825, codecs=dvh1.05.01, res=1280x720, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: [ ] Track:7, id=v34, mimeType=video/dolby-vision, container=video/mp4, bitrate=7405733, codecs=dvh1.05.03, res=1600x900, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: [ ] Track:8, id=v29, mimeType=video/dolby-vision, container=video/mp4, bitrate=11505339, codecs=dvh1.05.03, res=1920x1080, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.394 10213 1597 1597 D EventLogger: ]
08-20 06:39:23.395 10213 1597 1597 D EventLogger: group [
08-20 06:39:23.395 10213 1597 1597 D EventLogger: [X] Track:0, id=v20, mimeType=video/hevc, container=video/mp4, bitrate=543809, codecs=hvc1.2.4.L60.90, res=448x252, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.395 10213 1597 1597 D EventLogger: [X] Track:1, id=v24, mimeType=video/hevc, container=video/mp4, bitrate=794854, codecs=hvc1.2.4.L63.90, res=512x288, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.395 10213 1597 1597 D EventLogger: [X] Track:2, id=v19, mimeType=video/hevc, container=video/mp4, bitrate=1101259, codecs=hvc1.2.4.L63.90, res=576x324, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.395 10213 1597 1597 D EventLogger: [X] Track:3, id=v26, mimeType=video/hevc, container=video/mp4, bitrate=1579853, codecs=hvc1.2.4.L63.90, res=640x360, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.395 10213 1597 1597 D EventLogger: [X] Track:4, id=v22, mimeType=video/hevc, container=video/mp4, bitrate=2423495, codecs=hvc1.2.4.L90.90, res=768x432, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.396 10213 1597 1597 D EventLogger: [X] Track:5, id=v21, mimeType=video/hevc, container=video/mp4, bitrate=3513695, codecs=hvc1.2.4.L93.90, res=1024x576, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.396 10213 1597 1597 D EventLogger: [X] Track:6, id=v23, mimeType=video/hevc, container=video/mp4, bitrate=5061467, codecs=hvc1.2.4.L93.90, res=1280x720, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.396 10213 1597 1597 D EventLogger: [X] Track:7, id=v25, mimeType=video/hevc, container=video/mp4, bitrate=8000068, codecs=hvc1.2.4.L123.90, res=1600x900, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.396 10213 1597 1597 D EventLogger: [X] Track:8, id=v18, mimeType=video/hevc, container=video/mp4, bitrate=11099181, codecs=hvc1.2.4.L123.90, res=1920x1080, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.396 10213 1597 1597 D EventLogger: ]
08-20 06:39:23.396 10213 1597 1597 D EventLogger: group [
08-20 06:39:23.397 10213 1597 1597 D EventLogger: [ ] Track:0, id=v14, mimeType=video/hevc, container=video/mp4, bitrate=339875, codecs=hvc1.2.4.L60.90, res=448x252, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.397 10213 1597 1597 D EventLogger: [ ] Track:1, id=v15, mimeType=video/hevc, container=video/mp4, bitrate=472516, codecs=hvc1.2.4.L63.90, res=512x288, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.398 10213 1597 1597 D EventLogger: [ ] Track:2, id=v12, mimeType=video/hevc, container=video/mp4, bitrate=580796, codecs=hvc1.2.4.L63.90, res=576x324, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.398 10213 1597 1597 D EventLogger: [ ] Track:3, id=v9, mimeType=video/hevc, container=video/mp4, bitrate=778182, codecs=hvc1.2.4.L63.90, res=640x360, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.398 10213 1597 1597 D EventLogger: [ ] Track:4, id=v17, mimeType=video/hevc, container=video/mp4, bitrate=1193177, codecs=hvc1.2.4.L90.90, res=768x432, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.399 10213 1597 1597 D EventLogger: [ ] Track:5, id=v10, mimeType=video/hevc, container=video/mp4, bitrate=2154358, codecs=hvc1.2.4.L93.90, res=1024x576, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.399 10213 1597 1597 D EventLogger: [ ] Track:6, id=v13, mimeType=video/hevc, container=video/mp4, bitrate=3336612, codecs=hvc1.2.4.L93.90, res=1280x720, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.399 10213 1597 1597 D EventLogger: [ ] Track:7, id=v16, mimeType=video/hevc, container=video/mp4, bitrate=5224120, codecs=hvc1.2.4.L123.90, res=1600x900, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.399 10213 1597 1597 D EventLogger: [ ] Track:8, id=v11, mimeType=video/hevc, container=video/mp4, bitrate=8354726, codecs=hvc1.2.4.L123.90, res=1920x1080, fps=23.976025, roleFlags=[main], supported=YES
08-20 06:39:23.399 10213 1597 1597 D EventLogger: ]
Is it just the specific c2.mtk.dvav.se.decoder hardware decoder that does not support the Dolby Format you are trying to play? Hence your wish to change the order in the decoder list method?
No, this dvav.se decoder is for Dolby Vision profile 9 content. This is Dolby Vision profile 5 stream, so it can not play with this decoder.
My suggestion would be to file a bug with Amazon as far as why they don't support that Dolby format.
This FireTV support Dolby format, you can check the above logs. But it marks as 'DECODER_SUPPORT_FALLBACK' since the first decoder in decoderInfos doesn't support it. So the DefaultTrackSelector selects the HEVC group instead of Dolby group.
// Check whether the first decoder supports the format. This is the preferred decoder for the
// format's MIME type, according to the MediaCodecSelector.
MediaCodecInfo decoderInfo = decoderInfos.get(0);
boolean isFormatSupported = decoderInfo.isFormatSupported(format);
boolean isPreferredDecoder = true;
if (!isFormatSupported) {
// Check whether any of the other decoders support the format.
for (int i = 1; i < decoderInfos.size(); i++) {
MediaCodecInfo otherDecoderInfo = decoderInfos.get(i);
if (otherDecoderInfo.isFormatSupported(format)) {
decoderInfo = otherDecoderInfo;
isFormatSupported = true;
isPreferredDecoder = false;
break;
}
}
}
I suppose the real issue is that for the DolbyVision decoder, we cannot assume the first decoder in the decoderInfos list is the preferred decoder. Since different profiles require different Dolby decoders. Could you please help to consider how to handle it in default MediaCodecSelector? thanks a lot.
@microkatz
I tried the following change and it also solved my issue.
➜ media git:(release-1.2.1) ✗ git diff libraries/exoplayer/src/main/java/androidx/media3/exoplayer/video/MediaCodecVideoRenderer.java
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 8c45615ba3..d2228cdc45 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
@@ -460,7 +460,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer implements Video
if (otherDecoderInfo.isFormatSupported(format)) {
decoderInfo = otherDecoderInfo;
isFormatSupported = true;
- isPreferredDecoder = false;
+ if (!MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
+ isPreferredDecoder = false;
+ }
break;
}
}
I dumped the media.player info by the following command. mp_ginza.log
adb shell dumpsys media.player > mp_ginza.log
Each Dolby decoder only supports one profile.
Media type 'video/dolby-vision':
Decoder "c2.mtk.dvav.se.decoder" supports
profile/levels: [
512/ 16 (??/??) ]
Decoder "c2.mtk.dvav.se.decoder.secure" supports
profile/levels: [
512/ 16 (??/??) ]
Decoder "c2.mtk.dvav1.10.decoder" supports
profile/levels: [
1024/ 256 (??/??) ]
Decoder "c2.mtk.dvav1.10.decoder.secure" supports
profile/levels: [
1024/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.dtr.decoder" supports
profile/levels: [
16/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.dtr.decoder.secure" supports
profile/levels: [
16/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.st.decoder" supports
profile/levels: [
256/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.st.decoder.secure" supports
profile/levels: [
256/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.stn.decoder" supports
profile/levels: [
32/ 256 (??/??) ]
Decoder "c2.mtk.dvhe.stn.decoder.secure" supports
profile/levels: [
32/ 256 (??/??) ]
I found some relevant discussions in
https://github.com/google/ExoPlayer/pull/5438/files#diff-560421c04028f7ac67cf5b8aedd4a2f0e565dd77eff713bcd7f0dbbab8e4e242
Can we apply the above change as a short-term/workaround solution?
CC @aujohn @andrewlewis
@microkatz We need more precise decoding selection, please improve this decoder selection. Otherwise, many developers would have switched to mpv.
@microkatz Could you please check if this change is acceptable? thanks a lot.
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 8c45615ba3..d2228cdc45 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
@@ -460,7 +460,9 @@ public class MediaCodecVideoRenderer extends MediaCodecRenderer implements Video
if (otherDecoderInfo.isFormatSupported(format)) {
decoderInfo = otherDecoderInfo;
isFormatSupported = true;
- isPreferredDecoder = false;
+ if (!MimeTypes.VIDEO_DOLBY_VISION.equals(format.sampleMimeType)) {
+ isPreferredDecoder = false;
+ }
break;
}
}