From 127d0b5f3cb3e02db0368a5ce456f9ff20b18960 Mon Sep 17 00:00:00 2001 From: Copybara-Service Date: Thu, 1 Feb 2024 02:09:02 -0800 Subject: [PATCH] Merge pull request #1011 from cedricxperi:dts-lbr-hls-bitrate-unknown-fix PiperOrigin-RevId: 603302863 (cherry picked from commit f85860c04196875150e24b071f08b193b10f27c9) --- .../media3/exoplayer/audio/DefaultAudioSink.java | 11 ++++++++++- .../main/java/androidx/media3/extractor/DtsUtil.java | 3 +++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java index 9fb053651f..7ba42ca870 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/audio/DefaultAudioSink.java @@ -765,6 +765,15 @@ public final class DefaultAudioSink implements AudioSink { "Invalid output channel config (mode=" + outputMode + ") for: " + inputFormat, inputFormat); } + + // Replace unknown bitrate by maximum allowed bitrate for DTS Express to avoid allocating an + // AudioTrack buffer for the much larger maximum bitrate of the underlying DTS-HD encoding. + int bitrate = inputFormat.bitrate; + if (MimeTypes.AUDIO_DTS_EXPRESS.equals(inputFormat.sampleMimeType) + && bitrate == Format.NO_VALUE) { + bitrate = DtsUtil.DTS_EXPRESS_MAX_RATE_BITS_PER_SECOND; + } + int bufferSize = specifiedBufferSize != 0 ? specifiedBufferSize @@ -774,7 +783,7 @@ public final class DefaultAudioSink implements AudioSink { outputMode, outputPcmFrameSize != C.LENGTH_UNSET ? outputPcmFrameSize : 1, outputSampleRate, - inputFormat.bitrate, + bitrate, enableAudioTrackPlaybackParams ? MAX_PLAYBACK_SPEED : DEFAULT_PLAYBACK_SPEED); offloadDisabledUntilNextConfiguration = false; Configuration pendingConfiguration = diff --git a/libraries/extractor/src/main/java/androidx/media3/extractor/DtsUtil.java b/libraries/extractor/src/main/java/androidx/media3/extractor/DtsUtil.java index faef2b9434..13f1391cae 100644 --- a/libraries/extractor/src/main/java/androidx/media3/extractor/DtsUtil.java +++ b/libraries/extractor/src/main/java/androidx/media3/extractor/DtsUtil.java @@ -143,6 +143,9 @@ public final class DtsUtil { /** Maximum rate for a DTS-HD audio stream, in bytes per second. */ public static final int DTS_HD_MAX_RATE_BYTES_PER_SECOND = 18000 * 1000 / 8; + /** Maximum bit-rate for a DTS Express audio stream, in bits per second. */ + public static final int DTS_EXPRESS_MAX_RATE_BITS_PER_SECOND = 768000; + /** * DTS Core Syncword (in different Endianness). See ETSI TS 102 114 V1.6.1 (2019-08), Section 5.3. */