From 4e47acda0cfc704a7efba8962f3c2e8bea333f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Velad=20Galv=C3=A1n?= Date: Wed, 24 Jan 2024 07:39:34 +0100 Subject: [PATCH] fix: Fix detection of spatial rendering support in Cast (#6138) See https://developers.google.com/cast/docs/media#audio_passthrough --- lib/polyfill/media_capabilities.js | 11 +++++++++-- test/polyfill/media_capabilities_unit.js | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/lib/polyfill/media_capabilities.js b/lib/polyfill/media_capabilities.js index 0734390b9f..875c5f9f48 100644 --- a/lib/polyfill/media_capabilities.js +++ b/lib/polyfill/media_capabilities.js @@ -141,8 +141,15 @@ shaka.polyfill.MediaCapabilities = class { } if (audioConfig) { - const contentType = audioConfig.contentType; - const isSupported = Capabilities.isTypeSupported(contentType); + let isSupported; + if (shaka.util.Platform.isChromecast() && + audioConfig.spatialRendering) { + const extendedType = + audioConfig.contentType + '; spatialRendering=true'; + isSupported = Capabilities.isTypeSupported(extendedType); + } else { + isSupported = Capabilities.isTypeSupported(audioConfig.contentType); + } if (!isSupported) { return res; } diff --git a/test/polyfill/media_capabilities_unit.js b/test/polyfill/media_capabilities_unit.js index d53012c757..78688f8991 100644 --- a/test/polyfill/media_capabilities_unit.js +++ b/test/polyfill/media_capabilities_unit.js @@ -196,8 +196,10 @@ describe('MediaCapabilities', () => { await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); expect(mockCanDisplayType).not.toHaveBeenCalled(); - // 1 (during install()) + 1 (for video config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(2); + // 1 (during install()) + + // 1 (for video config check) + + // 1 (for audio config check). + expect(isChromecastSpy).toHaveBeenCalledTimes(3); // 1 (fallback in canCastDisplayType()) + // 1 (mockDecodingConfig.audio). expect(supportMap.has(mockDecodingConfig.video.contentType)) @@ -219,8 +221,10 @@ describe('MediaCapabilities', () => { await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); expect(mockCanDisplayType).not.toHaveBeenCalled(); - // 1 (during install()) + 1 (for video config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(2); + // 1 (during install()) + + // 1 (for video config check) + + // 1 (for audio config check). + expect(isChromecastSpy).toHaveBeenCalledTimes(3); // 1 (fallback in canCastDisplayType()) + // 1 (mockDecodingConfig.audio). expect(supportMap.has(mockDecodingConfig.video.contentType)) @@ -266,8 +270,10 @@ describe('MediaCapabilities', () => { shaka.polyfill.MediaCapabilities.install(); await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig); - // 1 (during install()) + 1 (for video config check). - expect(isChromecastSpy).toHaveBeenCalledTimes(2); + // 1 (during install()) + + // 1 (for video config check) + + // 1 (for audio config check). + expect(isChromecastSpy).toHaveBeenCalledTimes(3); // 1 (mockDecodingConfig.audio). expect(supportMap.has(chromecastType)).toBe(true); // Called once in canCastDisplayType.