From 58051dcd8019780e9c8e6d6b1b937c9142d41b4a Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Mon, 15 Apr 2024 21:01:44 +0300 Subject: [PATCH 1/4] Extract canPlayDts function --- src/scripts/browserDeviceProfile.js | 26 ++++++++++++++++++++------ 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index dce9a02cb4..8bc3b21644 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -94,6 +94,25 @@ function supportsAc3(videoTestElement) { return videoTestElement.canPlayType('audio/mp4; codecs="ac-3"').replace(/no/, ''); } +/** + * Checks if the device supports DTS (DCA). + * @param {HTMLVideoElement} videoTestElement The video test element + * @returns {boolean|null} _true_ if the device supports DTS (DCA). _false_ if the device doesn't support DTS (DCA). _null_ if support status is unknown. + */ +function canPlayDts(videoTestElement) { + // DTS audio is not supported by Samsung TV 2018+ (Tizen 4.0+) and LG TV 2020-2022 (webOS 5.0, 6.0 and 22) models + if (browser.tizenVersion >= 4 || (browser.web0sVersion >= 5 && browser.web0sVersion < 23)) { + return false; + } + + if (videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') + || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, '')) { + return true; + } + + return null; +} + function supportsEac3(videoTestElement) { if (browser.tizen || browser.web0s) { return true; @@ -530,12 +549,7 @@ export default function (options) { let supportsDts = options.supportsDts; if (supportsDts == null) { - supportsDts = browser.tizen || browser.web0sVersion || videoTestElement.canPlayType('video/mp4; codecs="dts-"').replace(/no/, '') || videoTestElement.canPlayType('video/mp4; codecs="dts+"').replace(/no/, ''); - - // DTS audio is not supported by Samsung TV 2018+ (Tizen 4.0+) and LG TV 2020-2022 (webOS 5.0, 6.0 and 22) models - if (browser.tizenVersion >= 4 || (browser.web0sVersion >= 5 && browser.web0sVersion < 23)) { - supportsDts = false; - } + supportsDts = canPlayDts(videoTestElement); } if (supportsDts) { From ce15adba6900e70f61bf4a19db318c15ec39d363 Mon Sep 17 00:00:00 2001 From: Dmitry Lyzo Date: Mon, 15 Apr 2024 20:26:12 +0300 Subject: [PATCH 2/4] Add DTS enabling option --- src/components/playbackSettings/playbackSettings.js | 3 +++ .../playbackSettings/playbackSettings.template.html | 8 ++++++++ src/scripts/browserDeviceProfile.js | 2 +- src/scripts/settings/appSettings.js | 13 +++++++++++++ src/strings/en-us.json | 2 ++ 5 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/components/playbackSettings/playbackSettings.js b/src/components/playbackSettings/playbackSettings.js index 254389a9f6..c1106ec244 100644 --- a/src/components/playbackSettings/playbackSettings.js +++ b/src/components/playbackSettings/playbackSettings.js @@ -173,6 +173,7 @@ function loadForm(context, user, userSettings, systemInfo, apiClient) { context.querySelector('.chkPlayDefaultAudioTrack').checked = user.Configuration.PlayDefaultAudioTrack || false; context.querySelector('.chkPreferFmp4HlsContainer').checked = userSettings.preferFmp4HlsContainer(); + context.querySelector('.chkEnableDts').checked = appSettings.enableDts(); context.querySelector('.chkEnableCinemaMode').checked = userSettings.enableCinemaMode(); context.querySelector('#selectAudioNormalization').value = userSettings.selectAudioNormalization(); context.querySelector('.chkEnableNextVideoOverlay').checked = userSettings.enableNextVideoInfoOverlay(); @@ -216,6 +217,8 @@ function saveUser(context, user, userSettingsInstance, apiClient) { appSettings.maxVideoWidth(context.querySelector('.selectMaxVideoWidth').value); appSettings.limitSupportedVideoResolution(context.querySelector('.chkLimitSupportedVideoResolution').checked); + appSettings.enableDts(context.querySelector('.chkEnableDts').checked); + setMaxBitrateFromField(context.querySelector('.selectVideoInNetworkQuality'), true, 'Video'); setMaxBitrateFromField(context.querySelector('.selectVideoInternetQuality'), false, 'Video'); setMaxBitrateFromField(context.querySelector('.selectMusicInternetQuality'), false, 'Audio'); diff --git a/src/components/playbackSettings/playbackSettings.template.html b/src/components/playbackSettings/playbackSettings.template.html index 6dc860260f..ef9b5ab4da 100644 --- a/src/components/playbackSettings/playbackSettings.template.html +++ b/src/components/playbackSettings/playbackSettings.template.html @@ -157,6 +157,14 @@
+ +
+ +
${EnableDtsHelp}
+