From c43f3846f865e102a4c2b29d931cbd1a6acc3ad5 Mon Sep 17 00:00:00 2001 From: knackebrot Date: Mon, 17 Jan 2022 00:08:33 +0100 Subject: [PATCH] Try to determine the number of speakers before falling back to hardcoded values --- src/scripts/browserDeviceProfile.js | 49 +++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/src/scripts/browserDeviceProfile.js b/src/scripts/browserDeviceProfile.js index 6ef748fbf8..8ef075c4b1 100644 --- a/src/scripts/browserDeviceProfile.js +++ b/src/scripts/browserDeviceProfile.js @@ -294,12 +294,55 @@ import browser from './browser'; (browser.tizen && isTizenFhd ? 20000000 : null))); } + function getSpeakerCount() { + const AudioContext = window.AudioContext || window.webkitAudioContext || false; /* eslint-disable-line compat/compat */ + + if (AudioContext) { + const audioCtx = new AudioContext(); + + return audioCtx.destination.maxChannelCount; + } + + return -1; + } + + function getPhysicalAudioChannels(options) { + const allowedAudioChannels = parseInt(userSettings.allowedAudioChannels(), 10); + + if (allowedAudioChannels > 0) { + return allowedAudioChannels; + } + + if (options.audioChannels) { + return options.audioChannels; + } + + const isSurroundSoundSupportedBrowser = browser.safari || browser.chrome || browser.edgeChromium || browser.firefox || browser.tv || browser.ps4 || browser.xboxOne; + const speakerCount = getSpeakerCount(); + + if (speakerCount > 2) { + if (isSurroundSoundSupportedBrowser) { + return speakerCount; + } + + return 2; + } + + if (speakerCount > 0) { + return speakerCount; + } + + if (isSurroundSoundSupportedBrowser) { + return 6; + } + + return 2; + } + export default function (options) { options = options || {}; - const isSurroundSoundSupportedBrowser = browser.safari || browser.chrome || browser.edgeChromium || browser.firefox; - const allowedAudioChannels = parseInt(userSettings.allowedAudioChannels() || '-1'); - const physicalAudioChannels = (allowedAudioChannels > 0 ? allowedAudioChannels : null) || options.audioChannels || (isSurroundSoundSupportedBrowser || browser.tv || browser.ps4 || browser.xboxOne ? 6 : 2); + const physicalAudioChannels = getPhysicalAudioChannels(options); const bitrateSetting = getMaxBitrate();