From 19676084e62db28cf70b0d97b219ec85eace189e Mon Sep 17 00:00:00 2001 From: Cedric T Date: Tue, 30 May 2023 17:33:39 +0800 Subject: [PATCH 1/3] Fix DTS:X P2 offload playback. --- .../exoplayer/audio/DefaultAudioOffloadSupportProvider.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java index 296003f661..e6f7a08827 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java @@ -88,7 +88,11 @@ public final class DefaultAudioOffloadSupportProvider if (channelConfig == AudioFormat.CHANNEL_INVALID) { return AudioOffloadSupport.DEFAULT_UNSUPPORTED; } - + // AudioFormat.ENCODING_DTS_UHD_P2 is defined from API 34 onwards. Before that encoding should + // be set to C.ENCODING_DTS, which is supported by TV ICs for offload playback. + if ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2)) { + encoding = C.ENCODING_DTS; + } AudioFormat audioFormat = Util.getAudioFormat(format.sampleRate, channelConfig, encoding); if (Util.SDK_INT >= 31) { return Api31.getOffloadedPlaybackSupport( From 8ab1a68939d6df2e98462d2fc6c9653596df50ef Mon Sep 17 00:00:00 2001 From: Cedric T Date: Wed, 31 May 2023 19:58:12 +0800 Subject: [PATCH 2/3] Return offload unsupported for DTSX P2 and API < 34. --- .../audio/DefaultAudioOffloadSupportProvider.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java index e6f7a08827..c1e9d3c1e9 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java @@ -81,18 +81,17 @@ public final class DefaultAudioOffloadSupportProvider @C.Encoding int encoding = MimeTypes.getEncoding(checkNotNull(format.sampleMimeType), format.codecs); - if (encoding == C.ENCODING_INVALID) { + // AudioFormat.ENCODING_DTS_UHD_P2 is defined from API 34 onwards. We return offload + // unsupported to prevent crash in Util.getAudioFormat() below when it tries to create + // an AudioFormat with ENCODING_DTS_UHD_P2. + if ((encoding == C.ENCODING_INVALID) || + ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2))) { return AudioOffloadSupport.DEFAULT_UNSUPPORTED; } int channelConfig = Util.getAudioTrackChannelConfig(format.channelCount); if (channelConfig == AudioFormat.CHANNEL_INVALID) { return AudioOffloadSupport.DEFAULT_UNSUPPORTED; } - // AudioFormat.ENCODING_DTS_UHD_P2 is defined from API 34 onwards. Before that encoding should - // be set to C.ENCODING_DTS, which is supported by TV ICs for offload playback. - if ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2)) { - encoding = C.ENCODING_DTS; - } AudioFormat audioFormat = Util.getAudioFormat(format.sampleRate, channelConfig, encoding); if (Util.SDK_INT >= 31) { return Api31.getOffloadedPlaybackSupport( From b4ff9031c735debc7f95e2b826a85fc7706e146c Mon Sep 17 00:00:00 2001 From: Cedric T Date: Fri, 2 Jun 2023 21:35:43 +0800 Subject: [PATCH 3/3] Split AudioOffloadSupport.DEFAULT_UNSUPPORTED check into 2 if statements. --- .../exoplayer/audio/DefaultAudioOffloadSupportProvider.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java index c1e9d3c1e9..5fce99452f 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioOffloadSupportProvider.java @@ -81,11 +81,13 @@ public final class DefaultAudioOffloadSupportProvider @C.Encoding int encoding = MimeTypes.getEncoding(checkNotNull(format.sampleMimeType), format.codecs); + if (encoding == C.ENCODING_INVALID) { + return AudioOffloadSupport.DEFAULT_UNSUPPORTED; + } // AudioFormat.ENCODING_DTS_UHD_P2 is defined from API 34 onwards. We return offload // unsupported to prevent crash in Util.getAudioFormat() below when it tries to create // an AudioFormat with ENCODING_DTS_UHD_P2. - if ((encoding == C.ENCODING_INVALID) || - ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2))) { + if ((Util.SDK_INT < 34) && (encoding == C.ENCODING_DTS_UHD_P2)) { return AudioOffloadSupport.DEFAULT_UNSUPPORTED; } int channelConfig = Util.getAudioTrackChannelConfig(format.channelCount);