Closed Bug 2068961 Opened 1 month ago Closed 1 month ago

Videos look washed out on macOS unless media.rdd-process.enabled is false

Categories

(Core :: Graphics: Color Management, defect)

defect

Tracking

()

VERIFIED FIXED
157 Branch
Tracking Status
firefox-esr140 --- unaffected
firefox-esr153 --- unaffected
firefox155 + wontfix
firefox156 + verified
firefox157 + verified

People

(Reporter: padenot, Assigned: padenot)

References

(Blocks 1 open bug, Regression)

Details

(Keywords: regression)

Attachments

(6 external files, 3 obsolete files)

No description provided.

Set release status flags based on info from the regressing bug 2039373

:bradwerth, since you are the author of the regressor, bug 2039373, could you take a look? Also, could you set the severity field?

For more information, please visit BugBot documentation.

[Tracking Requested - why for this release]:
Significant regression in video playback on macos.

See Also: → 2057759

gen_combos.py cross combines a single colour space name into primaries,
transfer and matrix, so the generated corpus cannot express BT.2100 PQ or HLG,
or wide gamut SDR. Those are the cases where a decoder has to report a transfer
function that is not implied by the primaries, which is what the macOS
VideoToolbox path gets wrong.

Add a second, explicit set of combinations for those, signalled through
x265-params and svtav1-params so the values land in the bitstream rather than
only in the container, plus HEVC, which is the codec VideoToolbox most reliably
decodes in hardware on macOS and which the corpus had no coverage of at all.

The samples are transfer converted with zscale rather than merely tagged, so
regenerating them needs an ffmpeg built with libzimg. Within a combination the
samples are identical across codecs, so codec to codec comparisons isolate the
container and decoder rather than the encode.

Assignee: nobody → padenot
Status: NEW → ASSIGNED

Exhaustive over the cross product of transfer function and colour primaries,
because the rule is a pure function of those two and the combinations codecs
happen to emit are only a subset of what has to be right.

Plus one end to end check per side, decoding through VideoToolbox in process
and inspecting the IOSurface the compositor would receive: an SDR frame keeps
the colorspace VideoToolbox gave it, and a PQ frame still gets an explicit one.

Flags: needinfo?(bwerth)
Blocks: 1869825
Pushed by azebrowski@mozilla.com: https://github.com/mozilla-firefox/firefox/commit/3e3f1c26c5dd https://hg.mozilla.org/integration/autoland/rev/cd2c2bcb80b3 Add colour metadata test videos with explicit transfer functions. r=media-playback-reviewers,ahale,azebrowski https://github.com/mozilla-firefox/firefox/commit/6c455079a76a https://hg.mozilla.org/integration/autoland/rev/b6b9b30cb25c Test the colorspace attached to VideoToolbox decoded frames. r=ahale https://github.com/mozilla-firefox/firefox/commit/a4f192aa6d64 https://hg.mozilla.org/integration/autoland/rev/963c8ed70a98 Only override the VideoToolbox buffer colorspace for wide gamut and HDR content. r=media-playback-reviewers,ahale,azebrowski

The patch landed in nightly and beta is affected.
:padenot, is this bug important enough to require an uplift?

For more information, please visit BugBot documentation.

Flags: needinfo?(padenot)

gen_combos.py cross combines a single colour space name into primaries,
transfer and matrix, so the generated corpus cannot express BT.2100 PQ or HLG,
or wide gamut SDR. Those are the cases where a decoder has to report a transfer
function that is not implied by the primaries, which is what the macOS
VideoToolbox path gets wrong.

Add a second, explicit set of combinations for those, signalled through
x265-params and svtav1-params so the values land in the bitstream rather than
only in the container, plus HEVC, which is the codec VideoToolbox most reliably
decodes in hardware on macOS and which the corpus had no coverage of at all.

The samples are transfer converted with zscale rather than merely tagged, so
regenerating them needs an ffmpeg built with libzimg. Within a combination the
samples are identical across codecs, so codec to codec comparisons isolate the
container and decoder rather than the encode.

Original Revision: https://phabricator.services.mozilla.com/D323303

Attachment #9636518 - Flags: approval-mozilla-beta?

Exhaustive over the cross product of transfer function and colour primaries,
because the rule is a pure function of those two and the combinations codecs
happen to emit are only a subset of what has to be right.

Plus one end to end check per side, decoding through VideoToolbox in process
and inspecting the IOSurface the compositor would receive: an SDR frame keeps
the colorspace VideoToolbox gave it, and a PQ frame still gets an explicit one.

Original Revision: https://phabricator.services.mozilla.com/D323304

Attachment #9636519 - Flags: approval-mozilla-beta?

firefox-beta Uplift Approval Request

  • User impact if declined/Reason for urgency: Broken rendering of SDR (non-HDR, meaning, the common case) videos: colors are washed out (blacks are grey, whites are grey). macOS only.
  • Code covered by automated testing?: yes
  • Fix verified in Nightly?: yes
  • Needs manual QE testing?: yes
  • Steps to reproduce for manual QE testing: Open random videos (e.g. youtube is just fine) on macOS, Apple Silicon or regular, especially if they have dark regions: the blacks should be black. Safari or Chrome should have similar colors.

If on mac that is HDR capable, https://paul.cx/public/test-videos/test-videos.html?video=bt2111-hlg-3840x2160-libsvtav1-yuv420p10.webm should render super bright.

  • Risk associated with taking this patch: medium
  • Explanation of risk level: Reviewed by 2 people, well tested.
  • String changes made/needed?: none
  • Is Android affected?: no
Attachment #9636520 - Flags: approval-mozilla-beta?
Flags: qe-verify+

gen_combos.py cross combines a single colour space name into primaries,
transfer and matrix, so the generated corpus cannot express BT.2100 PQ or HLG,
or wide gamut SDR. Those are the cases where a decoder has to report a transfer
function that is not implied by the primaries, which is what the macOS
VideoToolbox path gets wrong.

Add a second, explicit set of combinations for those, signalled through
x265-params and svtav1-params so the values land in the bitstream rather than
only in the container, plus HEVC, which is the codec VideoToolbox most reliably
decodes in hardware on macOS and which the corpus had no coverage of at all.

The samples are transfer converted with zscale rather than merely tagged, so
regenerating them needs an ffmpeg built with libzimg. Within a combination the
samples are identical across codecs, so codec to codec comparisons isolate the
container and decoder rather than the encode.

Original Revision: https://phabricator.services.mozilla.com/D323303

Attachment #9636521 - Flags: approval-mozilla-release?

Exhaustive over the cross product of transfer function and colour primaries,
because the rule is a pure function of those two and the combinations codecs
happen to emit are only a subset of what has to be right.

Plus one end to end check per side, decoding through VideoToolbox in process
and inspecting the IOSurface the compositor would receive: an SDR frame keeps
the colorspace VideoToolbox gave it, and a PQ frame still gets an explicit one.

Original Revision: https://phabricator.services.mozilla.com/D323304

Attachment #9636522 - Flags: approval-mozilla-release?

firefox-release Uplift Approval Request

  • User impact if declined/Reason for urgency: Broken rendering of SDR (non-HDR, meaning, the common case) videos: colors are washed out (blacks are grey, whites are grey). macOS only.
  • Code covered by automated testing?: yes
  • Fix verified in Nightly?: yes
  • Needs manual QE testing?: yes
  • Steps to reproduce for manual QE testing: Open random videos (e.g. youtube is just fine) on macOS, Apple Silicon or regular, especially if they have dark regions: the blacks should be black. Safari or Chrome should have similar colors.

If on mac that is HDR capable, https://paul.cx/public/test-videos/test-videos.html?video=bt2111-hlg-3840x2160-libsvtav1-yuv420p10.webm should render super bright.

  • Risk associated with taking this patch: medium
  • Explanation of risk level: Reviewed by 2 people, well tested.
  • String changes made/needed?: none
  • Is Android affected?: no
Attachment #9636523 - Flags: approval-mozilla-release?
Attachment #9636518 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
Attachment #9636519 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
Attachment #9636520 - Flags: approval-mozilla-beta? → approval-mozilla-beta+
QA Whiteboard: [uplift][qa-ver-needed-c157/b156]
Flags: needinfo?(padenot)

Hello! I can confirm that the issue is fixed with firefox 157.0a1(2026-09-07) and 156.0b4 on MacOS 15.6.7.

I will update the flags and status of this issue accordingly.

Have a nice day!

Status: RESOLVED → VERIFIED
QA Whiteboard: [uplift][qa-ver-needed-c157/b156] → [uplift][qa-ver-done-c157/b156]
Flags: qe-verify+

Fx156 is now in release and 156.0 RC builds today

Attachment #9636523 - Attachment is obsolete: true
Attachment #9636523 - Flags: approval-mozilla-release?
Attachment #9636522 - Attachment is obsolete: true
Attachment #9636522 - Flags: approval-mozilla-release?
Attachment #9636521 - Attachment is obsolete: true
Attachment #9636521 - Flags: approval-mozilla-release?
Duplicate of this bug: 2067386
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: