Closed Bug 1889146 Opened 2 years ago Closed 2 years ago

Video playback over-saturated when full-screen on SDR screen if another monitor has HDR on.

Categories

(Core :: Graphics, defect, P3)

Firefox 126
x86_64
Windows 11
defect

Tracking

()

RESOLVED FIXED
127 Branch
Tracking Status
firefox-esr115 --- unaffected
firefox124 --- unaffected
firefox125 --- unaffected
firefox126 --- fixed
firefox127 --- fixed

People

(Reporter: mcortt, Assigned: sotaro)

References

(Blocks 1 open bug)

Details

(Keywords: nightly-community, regression)

Attachments

(7 files)

Attached video SDR issue sized.mp4

User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0

Steps to reproduce:

  1. Launch youtube.com
  2. Play any video.
  3. Go full-screen on SDR monitor while HDR is turned on for another monitor.

Actual results:

Video becomes over-saturated when full-screen.

Expected results:

Video should play at original color.

The Bugbug bot thinks this bug should belong to the 'Core::Audio/Video: Playback' component, and is moving the bug to that component. Please correct in case you think the bot is wrong.

Component: Untriaged → Audio/Video: Playback
Product: Firefox → Core

User agent is listed incorrectly for some reason. Should be:
User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0

I have also attached about:support info.

Attached file support.json

Attached support.json file in case needed.

Here is a video of it doing on a clean and new profile.

Attached file clean-profile.json

Here is the clean profile about:support info.

I would also like to point out this is only effecting Firefox Nightly.. Firefox Stable doesn't have the issue.

OS: Unspecified → Windows 11
Hardware: Unspecified → x86_64
Version: Firefox 124 → Firefox 126

Thanks for the report!

Would you be able to install mozregression to help narrow down the changes that caused this bug? When you start mozregression, click the icon in the top left corner of the window that looks like a pair of scissors. Leave "basic configuration" and "profile selection" as they are, clicking next for each. On the "build selection" screen, click the dropdown for the "Last known good build" line, set it to release, and then select "124" as the release (or whichever release you were on without the bug). Click finish, and then Firefox will launch. Replicate the buggy behavior, close Firefox, and mozregression will ask you whether it was a good or bad build. After several iterations of this, it will narrow down the commit which caused the bug, showing something like the following:

2024-04-02T11:28:04.770000: DEBUG : Found commit message:
Bug 1887305 - Move ValueToIdentifier call before requireDebuggee check. r=iain
ValueToIdentifier can invoke JS code that removes the debuggee, so we have to reorder these operations.
Differential Revision: https://phabricator.services.mozilla.com/D205835
2024-04-02T11:28:04.770000: DEBUG : Did not find a branch, checking all integration branches
2024-04-02T11:28:04.770000: INFO : The bisection is done.
2024-04-02T11:28:04.770000: INFO : Stopped

Please paste that output here. Thank you!

Severity: -- → S3
Flags: needinfo?(mcortt)
Priority: -- → P3

(In reply to az [:az] from comment #7)

Thanks for the report!

Would you be able to install mozregression to help narrow down the changes that caused this bug? When you start mozregression, click the icon in the top left corner of the window that looks like a pair of scissors. Leave "basic configuration" and "profile selection" as they are, clicking next for each. On the "build selection" screen, click the dropdown for the "Last known good build" line, set it to release, and then select "124" as the release (or whichever release you were on without the bug). Click finish, and then Firefox will launch. Replicate the buggy behavior, close Firefox, and mozregression will ask you whether it was a good or bad build. After several iterations of this, it will narrow down the commit which caused the bug, showing something like the following:

2024-04-02T11:28:04.770000: DEBUG : Found commit message:
Bug 1887305 - Move ValueToIdentifier call before requireDebuggee check. r=iain
ValueToIdentifier can invoke JS code that removes the debuggee, so we have to reorder these operations.
Differential Revision: https://phabricator.services.mozilla.com/D205835
2024-04-02T11:28:04.770000: DEBUG : Did not find a branch, checking all integration branches
2024-04-02T11:28:04.770000: INFO : The bisection is done.
2024-04-02T11:28:04.770000: INFO : Stopped

Please paste that output here. Thank you!

2024-04-02T14:55:31.915000: INFO : Narrowed integration regression window from [64f24a09, ebc78304] (3 builds) to [64f24a09, d01a6b91] (2 builds) (~1 steps left)
2024-04-02T14:55:31.921000: DEBUG : Starting merge handling...
2024-04-02T14:55:31.921000: DEBUG : Using url: https://hg.mozilla.org/integration/autoland/json-pushes?changeset=d01a6b91c042bf0f4d48bec38e1c2d50469fb247&full=1
2024-04-02T14:55:31.921000: DEBUG : redo: attempt 1/3
2024-04-02T14:55:31.921000: DEBUG : redo: retry: calling _default_get with args: ('https://hg.mozilla.org/integration/autoland/json-pushes?changeset=d01a6b91c042bf0f4d48bec38e1c2d50469fb247&full=1',), kwargs: {}, attempt #1
2024-04-02T14:55:31.924000: DEBUG : urllib3.connectionpool: Resetting dropped connection: hg.mozilla.org
2024-04-02T14:55:33.027000: DEBUG : urllib3.connectionpool: https://hg.mozilla.org:443 "GET /integration/autoland/json-pushes?changeset=d01a6b91c042bf0f4d48bec38e1c2d50469fb247&full=1 HTTP/1.1" 200 None
2024-04-02T14:55:33.085000: DEBUG : Found commit message:
Bug 1882689 - Enable NVIDIA RTX Video TrueHDR in Nightly r=gfx-reviewers,nical

Differential Revision: https://phabricator.services.mozilla.com/D205028

2024-04-02T14:55:33.085000: DEBUG : Did not find a branch, checking all integration branches
2024-04-02T14:55:33.086000: INFO : The bisection is done.
2024-04-02T14:55:33.087000: INFO : Stopped

I am also attaching the full log if needed.

Flags: needinfo?(mcortt)
Attached file mozregression.txt

Thank you mcortt, that's really helpful! sotaro, would you have any ideas here?

Flags: needinfo?(sotaro.ikeda.g)
Attached image fix.png

Turning off Nvidia Auto HDR fixes the issue for now. Dunno if this is more of an Nvidia problem now. Might need further investigation or changes to allow the browser to detect if it is on an HDR screen or not.

To add to this, other browsers (Chrome, Edge, Opera GX, Brave, etc.) don't seem to move the AutoHDR feature (when enabled) to inactive unless they are on an HDR capable monitor. So moving SDR content (when Nvidia RTX video enhancement HDR is enabled) from an HDR display to a non-HDR display inactivates it, then reactivates it if you move it back to an HDR dispaly.

(In reply to mcortt from comment #12)

To add to this, other browsers (Chrome, Edge, Opera GX, Brave, etc.) don't seem to move the AutoHDR feature (when enabled) to inactive unless they are on an HDR capable monitor. So moving SDR content (when Nvidia RTX video enhancement HDR is enabled) from an HDR display to a non-HDR display inactivates it, then reactivates it if you move it back to an HDR dispaly.

Component: Audio/Video: Playback → Graphics

I lied. The issue reappears after watching videos for a while, even with Nvidia RTX video enhancement HDR disabled. Restarting the browser fixes it for about 15 minutes or so.

The bug has a release status flag that shows some version of Firefox is affected, thus it will be considered confirmed.

Status: UNCONFIRMED → NEW
Ever confirmed: true
Assignee: nobody → sotaro.ikeda.g

Thank you for reporting! I am going to look into the problem.

Flags: needinfo?(sotaro.ikeda.g)

When I tried locally with NVIDIA GeForce RTX 2060 SUPER(device id: 0x1f06, Driver Date: 2-7-2024), I could not reproduce the problem. I am going to try more if I could reproduce the problem.

I updated the driver to 31.0.15.5186(3-12-2024) and confirmed the problem.

It seems that gecko needs to check if monitor supports HDR like DirectCompositionMonitorHDREnabled().

Pushed by sikeda.birchill@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/0ce0da12b384 Check if monitor of window enables HDR r=gfx-reviewers,bradwerth

Backed out for causing build bustages in ScreenHelperWin.cpp

[task 2024-04-17T07:41:28.803Z] 07:41:28     INFO -  gmake[4]: Entering directory '/builds/worker/workspace/obj-build/widget/windows'
[task 2024-04-17T07:41:28.807Z] 07:41:28     INFO -  /builds/worker/fetches/sccache/sccache /builds/worker/fetches/clang/bin/clang-cl -fms-compatibility-version=19.39 -Xclang -std=c++17 -Xclang -ivfsoverlay -Xclang /builds/worker/fetches/vs/overlay.yaml -FoScreenHelperWin.obj -c  -I/builds/worker/workspace/obj-build/dist/stl_wrappers -guard:cf -DNDEBUG=1 -DTRIMMED=1 -DUNICODE -D_UNICODE -D_CRT_RAND_S -DCERT_CHAIN_PARA_HAS_EXTRA_FIELDS -D_SECURE_ATL -DCHROMIUM_BUILD -DU_STATIC_IMPLEMENTATION -DWIN32 -D_WIN32 -D_WINDOWS -DWIN32_LEAN_AND_MEAN -DMOZ_UNICODE '-DMOZ_APP_NAME="firefox"' '-DMOZ_TOAST_APP_NAME="Firefox"' -DMOZ_ENABLE_D3D10_LAYER -DWINAPI_NO_BUNDLED_LIBRARIES -DMOZ_HAS_MOZGLUE -DMOZILLA_INTERNAL_API -DIMPL_LIBXUL -DSTATIC_EXPORTABLE_JS_API -I/builds/worker/checkouts/gecko/widget/windows -I/builds/worker/workspace/obj-build/widget/windows -I/builds/worker/workspace/obj-build/ipc/ipdl/_ipdlheaders -I/builds/worker/checkouts/gecko/ipc/chromium/src -I/builds/worker/checkouts/gecko/gfx/cairo/cairo/src -I/builds/worker/checkouts/gecko/layout/forms -I/builds/worker/checkouts/gecko/layout/generic -I/builds/worker/checkouts/gecko/layout/style -I/builds/worker/checkouts/gecko/layout/xul -I/builds/worker/checkouts/gecko/toolkit/components/jsoncpp/include -I/builds/worker/checkouts/gecko/toolkit/xre -I/builds/worker/checkouts/gecko/widget -I/builds/worker/checkouts/gecko/widget/headless -I/builds/worker/checkouts/gecko/xpcom/base -I/builds/worker/workspace/obj-build/dist/include -I/builds/worker/workspace/obj-build/dist/include/nspr -I/builds/worker/workspace/obj-build/dist/include/nss -MD -FI /builds/worker/workspace/obj-build/mozilla-config.h -DMOZILLA_CLIENT -fcrash-diagnostics-dir=/builds/worker/artifacts -TP -Zc:sizedDealloc- -D_HAS_EXCEPTIONS=0 -Gy -Zc:inline -Gw -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING -GR- -Z7 -Xclang -load -Xclang /builds/worker/workspace/obj-build/build/clang-plugin/libclang-plugin.so -Xclang -add-plugin -Xclang moz-check -O2 -Oy- -Werror -W3 -Wbitfield-enum-conversion -Wempty-body -Wformat-type-confusion -Wignored-qualifiers -Wpointer-arith -Wshadow-field-in-constructor-modified -Wsign-compare -Wtautological-constant-in-range-compare -Wtype-limits -Wno-error=tautological-type-limit-compare -Wunreachable-code -Wunreachable-code-return -Wunused-but-set-parameter -Wno-invalid-offsetof -Wclass-varargs -Wempty-init-stmt -Wfloat-overflow-conversion -Wfloat-zero-conversion -Wloop-analysis -Wno-range-loop-analysis -Wenum-compare-conditional -Wenum-float-conversion -Wvolatile -Wno-deprecated-anon-enum-enum-conversion -Wno-deprecated-enum-enum-conversion -Wno-deprecated-this-capture -Wcomma -Wimplicit-fallthrough -Wstring-conversion -Wno-inline-new-delete -Wno-error=deprecated-declarations -Wno-error=array-bounds -Wno-error=free-nonheap-object -Wno-error=atomic-alignment -Wno-error=deprecated-builtins -Wno-unknown-pragmas -Wno-ignored-pragmas -Wno-deprecated-declarations -Wno-microsoft-enum-value -Wno-microsoft-include -Wno-invalid-noreturn -Wno-inconsistent-missing-override -Wno-implicit-exception-spec-mismatch -Wno-microsoft-exception-spec -Wno-unused-local-typedef -Wno-ignored-attributes -Wno-used-but-marked-unused -Wno-psabi -Wthread-safety -Wno-error=builtin-macro-redefined -Wno-vla-cxx-extension -Wno-unknown-warning-option -fno-strict-aliasing -Xclang -ffp-contract=off  -Xclang -MP -Xclang -dependency-file -Xclang .deps/ScreenHelperWin.obj.pp -Xclang -MT -Xclang ScreenHelperWin.obj   /builds/worker/checkouts/gecko/widget/windows/ScreenHelperWin.cpp
[task 2024-04-17T07:41:28.807Z] 07:41:28    ERROR -  /builds/worker/checkouts/gecko/widget/windows/ScreenHelperWin.cpp(134,19): error: use of undeclared identifier 'DeviceManagerDx'
[task 2024-04-17T07:41:28.807Z] 07:41:28     INFO -    134 |   auto* manager = DeviceManagerDx::Get();
[task 2024-04-17T07:41:28.807Z] 07:41:28     INFO -        |                   ^
[task 2024-04-17T07:41:28.808Z] 07:41:28    ERROR -  /builds/worker/checkouts/gecko/widget/windows/ScreenHelperWin.cpp(159,19): error: use of undeclared identifier 'DeviceManagerDx'
[task 2024-04-17T07:41:28.808Z] 07:41:28     INFO -    159 |   auto* manager = DeviceManagerDx::Get();
[task 2024-04-17T07:41:28.808Z] 07:41:28     INFO -        |                   ^
[task 2024-04-17T07:41:28.808Z] 07:41:28     INFO -  2 errors generated.
[task 2024-04-17T07:41:28.808Z] 07:41:28    ERROR -  gmake[4]: *** [/builds/worker/checkouts/gecko/config/rules.mk:690: ScreenHelperWin.obj] Error 1
[task 2024-04-17T07:41:28.809Z] 07:41:28     INFO -  gmake[4]: Leaving directory '/builds/worker/workspace/obj-build/widget/windows'
[task 2024-04-17T07:41:28.809Z] 07:41:28     INFO -  gmake[4]: Entering directory '/builds/worker/workspace/obj-build/widget/windows'
[task 2024-04-17T07:41:28.809Z] 07:41:28     INFO -  widget/windows/nsClipboard.obj
Flags: needinfo?(sotaro.ikeda.g)
Flags: needinfo?(sotaro.ikeda.g)
Pushed by sikeda.birchill@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/2c2feedca51b Check if monitor of window enables HDR r=gfx-reviewers,bradwerth
Status: NEW → RESOLVED
Closed: 2 years ago
Resolution: --- → FIXED
Target Milestone: --- → 127 Branch

Hi mcortt, can you check if the problem is addressed for you with latest Nightly?

Flags: needinfo?(mcortt)

Yes it appears to be. Even if RTX HDR is enabled, it moves to inactive on non-HDR monitors and moves to active when on HDR monitors. It's very responsive too. Thank you so much for the fix! Much appreciated!

Flags: needinfo?(mcortt)

Great! Thank you for the confirmation.

Comment on attachment 9396815 [details]
Bug 1889146 - Check if monitor of window enables HDR

Beta/Release Uplift Approval Request

  • User impact if declined: Video playback could be over-saturated with Auto HDR(TrueHDR) is enabled by pref.
  • Is this code covered by automated tests?: Yes
  • Has the fix been verified in Nightly?: Yes
  • Needs manual test from QE?: No
  • If yes, steps to reproduce:
  • List of other uplifts needed: none
  • Risk to taking this patch: Low
  • Why is the change risky/not risky? (and alternatives if risky): Auto HDR(TrueHDR) is disabled by pref by default.
  • String changes made/needed: none
  • Is Android affected?: No
Attachment #9396815 - Flags: approval-mozilla-beta?

We'd like this in Beta. It ties into a disabled feature so this fix won't impact the release userbase. A partner may want to flip the feature pref on in 126 so we'd like to get this fix uplifted with the rest of the work we have in 126.

Comment on attachment 9396815 [details]
Bug 1889146 - Check if monitor of window enables HDR

Approved for 126.0b5

Attachment #9396815 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: