diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 913c5db6c1..4e3e35767d 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -6,6 +6,9 @@ * Core library: * Log a warning when `SingleSampleMediaPeriod` transforms a load error into end-of-stream. + * Fall back to AVC/HEVC decoders for Dolby Vision streams with level 10 + to 13 + ([#8530](https://github.com/google/ExoPlayer/issues/8530)). * UI: * Add builder for `PlayerNotificationManager`. * Extractors: diff --git a/library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java b/library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java index 3a13540e12..9321330061 100644 --- a/library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java +++ b/library/common/src/main/java/com/google/android/exoplayer2/video/DolbyVisionConfig.java @@ -45,7 +45,7 @@ public final class DolbyVisionConfig { } else { return null; } - String codecs = codecsPrefix + ".0" + dvProfile + ".0" + dvLevel; + String codecs = codecsPrefix + ".0" + dvProfile + (dvLevel < 10 ? ".0" : ".") + dvLevel; return new DolbyVisionConfig(dvProfile, dvLevel, codecs); } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java index 20ca6db9dd..bcaf8a07b1 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/mediacodec/MediaCodecUtil.java @@ -1272,6 +1272,7 @@ public final class MediaCodecUtil { if (levelString == null) { return null; } + // TODO (Internal: b/179261323): use framework constants for levels 10 to 13. switch (levelString) { case "01": return CodecProfileLevel.DolbyVisionLevelHd24; @@ -1291,6 +1292,14 @@ public final class MediaCodecUtil { return CodecProfileLevel.DolbyVisionLevelUhd48; case "09": return CodecProfileLevel.DolbyVisionLevelUhd60; + case "10": + return 0x200; + case "11": + return 0x400; + case "12": + return 0x800; + case "13": + return 0x1000; default: return null; }