Skip to content

Commit 4e47acd

Browse files
authored
fix: Fix detection of spatial rendering support in Cast (#6138)
See https://developers.google.com/cast/docs/media#audio_passthrough
1 parent 5acc773 commit 4e47acd

File tree

2 files changed

+21
-8
lines changed

2 files changed

+21
-8
lines changed

lib/polyfill/media_capabilities.js

+9-2
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,15 @@ shaka.polyfill.MediaCapabilities = class {
141141
}
142142

143143
if (audioConfig) {
144-
const contentType = audioConfig.contentType;
145-
const isSupported = Capabilities.isTypeSupported(contentType);
144+
let isSupported;
145+
if (shaka.util.Platform.isChromecast() &&
146+
audioConfig.spatialRendering) {
147+
const extendedType =
148+
audioConfig.contentType + '; spatialRendering=true';
149+
isSupported = Capabilities.isTypeSupported(extendedType);
150+
} else {
151+
isSupported = Capabilities.isTypeSupported(audioConfig.contentType);
152+
}
146153
if (!isSupported) {
147154
return res;
148155
}

test/polyfill/media_capabilities_unit.js

+12-6
Original file line numberDiff line numberDiff line change
@@ -196,8 +196,10 @@ describe('MediaCapabilities', () => {
196196
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);
197197

198198
expect(mockCanDisplayType).not.toHaveBeenCalled();
199-
// 1 (during install()) + 1 (for video config check).
200-
expect(isChromecastSpy).toHaveBeenCalledTimes(2);
199+
// 1 (during install()) +
200+
// 1 (for video config check) +
201+
// 1 (for audio config check).
202+
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
201203
// 1 (fallback in canCastDisplayType()) +
202204
// 1 (mockDecodingConfig.audio).
203205
expect(supportMap.has(mockDecodingConfig.video.contentType))
@@ -219,8 +221,10 @@ describe('MediaCapabilities', () => {
219221
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);
220222

221223
expect(mockCanDisplayType).not.toHaveBeenCalled();
222-
// 1 (during install()) + 1 (for video config check).
223-
expect(isChromecastSpy).toHaveBeenCalledTimes(2);
224+
// 1 (during install()) +
225+
// 1 (for video config check) +
226+
// 1 (for audio config check).
227+
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
224228
// 1 (fallback in canCastDisplayType()) +
225229
// 1 (mockDecodingConfig.audio).
226230
expect(supportMap.has(mockDecodingConfig.video.contentType))
@@ -266,8 +270,10 @@ describe('MediaCapabilities', () => {
266270
shaka.polyfill.MediaCapabilities.install();
267271
await navigator.mediaCapabilities.decodingInfo(mockDecodingConfig);
268272

269-
// 1 (during install()) + 1 (for video config check).
270-
expect(isChromecastSpy).toHaveBeenCalledTimes(2);
273+
// 1 (during install()) +
274+
// 1 (for video config check) +
275+
// 1 (for audio config check).
276+
expect(isChromecastSpy).toHaveBeenCalledTimes(3);
271277
// 1 (mockDecodingConfig.audio).
272278
expect(supportMap.has(chromecastType)).toBe(true);
273279
// Called once in canCastDisplayType.

0 commit comments

Comments
 (0)