1
0
Fork 0
mirror of https://github.com/jellyfin/jellyfin-web synced 2025-03-30 19:56:21 +00:00

Merge pull request #4804 from dmitrylyzo/refactor-videorange

Split and extract video range support detection
This commit is contained in:
Bill Thornton 2023-09-27 00:01:22 -04:00 committed by GitHub
commit 6add573df6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -188,6 +188,27 @@ function supportsVc1(videoTestElement) {
return browser.tizen || browser.web0s || browser.edgeUwp || videoTestElement.canPlayType('video/mp4; codecs="vc-1"').replace(/no/, ''); return browser.tizen || browser.web0s || browser.edgeUwp || videoTestElement.canPlayType('video/mp4; codecs="vc-1"').replace(/no/, '');
} }
function supportsHdr10(options) {
return options.supportsHdr10 ?? (false // eslint-disable-line sonarjs/no-redundant-boolean
|| browser.tizen
|| browser.web0s
|| browser.safari && ((browser.iOS && browser.iOSVersion >= 11) || browser.osx)
// Chrome mobile and Firefox have no client side tone-mapping
// Edge Chromium on Nvidia is known to have color issues on 10-bit video
|| browser.chrome && !browser.mobile
);
}
function supportsHlg(options) {
return options.supportsHlg ?? supportsHdr10(options);
}
function supportsDolbyVision(options) {
return options.supportsDolbyVision ?? (false // eslint-disable-line sonarjs/no-redundant-boolean
|| browser.safari && ((browser.iOS && browser.iOSVersion >= 13) || browser.osx)
);
}
function getDirectPlayProfileForVideoContainer(container, videoAudioCodecs, videoTestElement, options) { function getDirectPlayProfileForVideoContainer(container, videoAudioCodecs, videoTestElement, options) {
let supported = false; let supported = false;
let profileContainer = container; let profileContainer = container;
@ -897,25 +918,20 @@ export default function (options) {
let vp9VideoRangeTypes = 'SDR'; let vp9VideoRangeTypes = 'SDR';
let av1VideoRangeTypes = 'SDR'; let av1VideoRangeTypes = 'SDR';
if (browser.safari && ((browser.iOS && browser.iOSVersion >= 11) || browser.osx)) { if (supportsHdr10(options)) {
hevcVideoRangeTypes += '|HDR10|HLG'; hevcVideoRangeTypes += '|HDR10';
if ((browser.iOS && browser.iOSVersion >= 13) || browser.osx) { vp9VideoRangeTypes += '|HDR10';
hevcVideoRangeTypes += '|DOVI'; av1VideoRangeTypes += '|HDR10';
}
} }
if (browser.tizen || browser.web0s) { if (supportsHlg(options)) {
hevcVideoRangeTypes += '|HDR10|HLG'; hevcVideoRangeTypes += '|HLG';
vp9VideoRangeTypes += '|HDR10|HLG'; vp9VideoRangeTypes += '|HLG';
av1VideoRangeTypes += '|HDR10|HLG'; av1VideoRangeTypes += '|HLG';
} }
// Chrome mobile and Firefox have no client side tone-mapping if (supportsDolbyVision(options)) {
// Edge Chromium on Nvidia is known to have color issues on 10-bit video hevcVideoRangeTypes += '|DOVI';
if (browser.chrome && !browser.mobile) {
hevcVideoRangeTypes += '|HDR10|HLG';
vp9VideoRangeTypes += '|HDR10|HLG';
av1VideoRangeTypes += '|HDR10|HLG';
} }
const h264CodecProfileConditions = [ const h264CodecProfileConditions = [