1
0
Fork 0
forked from wry/wry

Merge pull request #645 from mahkoh/jorth/sdr-ref-luminance

cmm: ignore backend luminance with the default EOTF
This commit is contained in:
mahkoh 2025-10-16 16:48:39 +02:00 committed by GitHub
commit cb25c2b44a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 25 additions and 20 deletions

View file

@ -304,6 +304,10 @@ impl Connector {
/// This should only be used with the PQ transfer function. If the default transfer
/// function is used, you should instead calibrate the hardware directly.
///
/// When used with the default transfer function, the default brightness is anchored
/// at 80 cd/m^2. That is, setting this to 40 cd/m^2 makes everything appear half as
/// bright as normal and creates 50% HDR headroom.
///
/// This has no effect unless the vulkan renderer is used.
pub fn set_brightness(self, brightness: Option<f64>) {
get!().connector_set_brightness(self, brightness);

View file

@ -386,6 +386,10 @@ pub struct BrightnessArgs {
/// When using the default EOTF, you likely want to set this to `default`
/// and adjust the display hardware brightness setting instead.
///
/// When used with the default transfer function, the default brightness is anchored
/// at 80 cd/m^2. That is, setting this to 40 cd/m^2 makes everything appear half as
/// bright as normal and creates 50% HDR headroom.
///
/// This has no effect unless the vulkan renderer is used.
#[clap(verbatim_doc_comment, value_parser = parse_brightness)]
brightness: Brightness,

View file

@ -361,30 +361,19 @@ impl WlOutputGlobal {
}
pub fn update_color_description(&self) -> bool {
let mut luminance = Luminance::SRGB;
let tf = match self.btf.get() {
BackendEotfs::Default => {
if let Some(brightness) = self.persistent.brightness.get() {
let output_max = match self.luminance {
None => 80.0,
Some(v) => v.max,
};
luminance.white.0 = luminance.max.0 * brightness / output_max;
}
Eotf::Gamma22
}
BackendEotfs::Pq => {
luminance = Luminance::ST2084_PQ;
if let Some(brightness) = self.persistent.brightness.get() {
luminance.white.0 = brightness;
}
Eotf::St2084Pq
}
let (mut luminance, tf) = match self.btf.get() {
BackendEotfs::Default => (Luminance::SRGB, Eotf::Gamma22),
BackendEotfs::Pq => (Luminance::ST2084_PQ, Eotf::St2084Pq),
};
if let Some(brightness) = self.persistent.brightness.get() {
luminance.white.0 = brightness;
}
let mut target_luminance = luminance.to_target();
let mut max_cll = None;
let mut max_fall = None;
if let Some(l) = self.luminance {
if let Some(l) = self.luminance
&& self.btf.get() == BackendEotfs::Pq
{
target_luminance.min = F64(l.min);
target_luminance.max = F64(l.max);
max_cll = Some(F64(l.max));

View file

@ -857,6 +857,10 @@ The string should have one of the following values:
- `default`: The maximum brightness of the output.
- `PQ`: 203 cd/m^2
When used with the default transfer function, the default brightness is anchored
at 80 cd/m^2. That is, setting this to 40 cd/m^2 makes everything appear half as
bright as normal and creates 50% HDR headroom.
#### A number

View file

@ -3425,6 +3425,10 @@ Brightness:
- `default`: The maximum brightness of the output.
- `PQ`: 203 cd/m^2
When used with the default transfer function, the default brightness is anchored
at 80 cd/m^2. That is, setting this to 40 cd/m^2 makes everything appear half as
bright as normal and creates 50% HDR headroom.
- kind: number
description: |
The brightness in cd/m^2.