play.geforcenow.com - Firefox is blocked from AV1 codec support
Categories
(Web Compatibility :: Site Reports, defect, P2)
Tracking
(Webcompat Priority:P2, Webcompat Score:5)
People
(Reporter: saschanaz, Unassigned)
References
(Blocks 1 open bug, )
Details
(Keywords: webcompat:platform-bug, webcompat:site-report, Whiteboard: [autowebcompat:processed][autowebcompat:repro-failed])
User Story
autowebcompat-repro-status:failed autowebcompat-repro-reason:login platform:windows,mac,linux impact:feature-broken configuration:general affects:all branch:release diagnosis-team:video-conferencing user-impact-score:150
Attachments
(1 file)
In https://play.geforcenow.com/mall/#/layout/settings/gameplay, the codec support is limited to H.264 while AV1 and H.265 options are grayed out.
We have bug 2062642 that incorrectly makes powerEfficient false, but even before checking that, Nvidia checks browser and only allows Chrome/Edge/Opera GX to access AV1.
Further diagnosis incoming in comment.
Updated•16 days ago
|
| Reporter | ||
Comment 1•16 days ago
•
|
||
https://play.geforcenow.com/mall/vendor.74c936ece8331518.js
A function named getSupportedCodecs (aka Va) checks support for AV1/H265/H264.
U.getSupportedCodecs = Va,
function Va(h, i) {
return Xo.apply(this, arguments)
}
function Xo() {
return Xo = a(
function * (h, i) {
var d;
let m = [];
const C = null !== (d = k.codecList) &&
void 0 !== d ? d : k.Ho.codecList;
if (C) for (const O of C) m.push(O);
else {
const [O,
F] = yield Promise.all([Ki(h, i),
Ja(h, i)]);
O &&
m.push('AV1'),
F &&
m.push('H265'),
(ei(h) || be(h)) &&
es(i) ||
m.push('H264')
}
return m
}
),
Xo.apply(this, arguments)
}
Here, Ki and Ja are responsible respectively for AV1/H265.
function Ki(h, i) {
return Ba.apply(this, arguments)
}
function Ba() {
return Ba = a(
function * (h, i) {
var d,
m,
C;
const O = null !== (
m = null !== (d = k.enableAv1Support) &&
void 0 !== d ? d : k.Ho.enableAv1Support
) &&
void 0 !== m ? m : Yt(Ie = h) ? Qi(Ie) : xe(Ie) ? Qi(Ie) ||
It(Ie) ||
An(Ie) : !!ei(Ie),
F = null !== (C = k.Ho.enableAv1ByResolutionAndFps) &&
void 0 !== C ? C : 7;
var Ie;
if (!O || xl(F, i) || !Ia('AV1')) return !1;
const z = Ot(h),
ne = ei(h) ||
z ? i : void 0,
de = z ? 'av1; profile=0; tier=0; level-idx=15' : 'av1',
Ee = z,
ke = yield la.EI(ne, de, Ee);
return !(null == ke || !ke.powerEfficient)
,
),
Ba.apply(this, arguments)
}
Specifically, this includes the condition variable O:
const O =
null !==
(m =
null !== (d = k.enableAv1Support) && void 0 !== d
? d
: k.Ho.enableAv1Support) && void 0 !== m
? m
: Yt((Ie = h))
? Qi(Ie)
: xe(Ie)
? Qi(Ie) || It(Ie) || An(Ie)
: !!ei(Ie);
Here, the k.enableAv1Support stuff doesn't matter as it seems to be some internal pref override stuff. What matters is the line after that, so it reduces to:
const O = Yt((Ie = h))
? Qi(Ie)
: xe(Ie)
? Qi(Ie) || It(Ie) || An(Ie)
: !!ei(Ie);
With some platform and browser checkers:
function Yt(h) {
return h.os === c.PlatformOS.CHROME_OS
}
Which we don't care, so further reduces to:
const O = xe(Ie) ? Qi(Ie) || It(Ie) || An(Ie) : !!ei(Ie);
Which gets more interesting:
function xe(h) {
return h.os === c.PlatformOS.WINDOWS
}
function Qi(h) {
return h.browser == c.PlatformBrowser.CHROME
}
function It(h) {
return h.browser === c.PlatformBrowser.EDGE
}
function An(h) {
return h.browser === c.PlatformBrowser.OPERAGX
}
So O becomes false because we are not Chrome/Edge/Opera GX. So if (!O || xl(F, i) || !Ia('AV1')) return !1; makes us return early without actual feature detection. Overriding that with k.enableAv1Support = true makes us pass the feature detection and get the AV1 option in the UI, with a local patch for bug 2062642 applied.
Recommended action is to reach out and ask why this limitation exists.
Updated•16 days ago
|
Updated•16 days ago
|
Updated•15 days ago
|
Description
•