video: allow configuring the output brightness
This commit is contained in:
parent
7d0c9e2c3f
commit
27025a565c
19 changed files with 343 additions and 40 deletions
|
|
@ -222,6 +222,7 @@ pub struct Output {
|
|||
pub format: Option<Format>,
|
||||
pub color_space: Option<ColorSpace>,
|
||||
pub transfer_function: Option<TransferFunction>,
|
||||
pub brightness: Option<Option<f64>>,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ use {
|
|||
},
|
||||
},
|
||||
toml::{
|
||||
toml_span::{DespanExt, Span, Spanned},
|
||||
toml_span::{DespanExt, Span, Spanned, SpannedExt},
|
||||
toml_value::Value,
|
||||
},
|
||||
},
|
||||
|
|
@ -51,7 +51,7 @@ impl Parser for OutputParser<'_> {
|
|||
let mut ext = Extractor::new(self.cx, span, table);
|
||||
let (
|
||||
(name, match_val, x, y, scale, transform, mode, vrr_val, tearing_val, format_val),
|
||||
(color_space, transfer_function),
|
||||
(color_space, transfer_function, brightness_val),
|
||||
) = ext.extract((
|
||||
(
|
||||
opt(str("name")),
|
||||
|
|
@ -68,6 +68,7 @@ impl Parser for OutputParser<'_> {
|
|||
(
|
||||
recover(opt(str("color-space"))),
|
||||
recover(opt(str("transfer-function"))),
|
||||
opt(val("brightness")),
|
||||
),
|
||||
))?;
|
||||
let transform = match transform {
|
||||
|
|
@ -171,6 +172,15 @@ impl Parser for OutputParser<'_> {
|
|||
}
|
||||
}
|
||||
}
|
||||
let mut brightness = None;
|
||||
if let Some(value) = brightness_val {
|
||||
match value.parse(&mut BrightnessParser) {
|
||||
Ok(v) => brightness = Some(v),
|
||||
Err(e) => {
|
||||
log::warn!("Could not parse brightness setting: {}", self.cx.error(e));
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(Output {
|
||||
name: name.despan().map(|v| v.to_string()),
|
||||
match_: match_val.parse_map(&mut OutputMatchParser(self.cx))?,
|
||||
|
|
@ -184,6 +194,7 @@ impl Parser for OutputParser<'_> {
|
|||
format,
|
||||
color_space,
|
||||
transfer_function,
|
||||
brightness,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
@ -228,3 +239,34 @@ impl Parser for OutputsParser<'_> {
|
|||
.map(|v| vec![v])
|
||||
}
|
||||
}
|
||||
|
||||
struct BrightnessParser;
|
||||
|
||||
#[derive(Debug, Error)]
|
||||
pub enum BrightnessParserError {
|
||||
#[error(transparent)]
|
||||
Expected(#[from] UnexpectedDataType),
|
||||
#[error("Expected `default`")]
|
||||
UnexpectedString(String),
|
||||
}
|
||||
|
||||
impl Parser for BrightnessParser {
|
||||
type Value = Option<f64>;
|
||||
type Error = BrightnessParserError;
|
||||
const EXPECTED: &'static [DataType] = &[DataType::Float, DataType::Integer, DataType::String];
|
||||
|
||||
fn parse_string(&mut self, span: Span, string: &str) -> ParseResult<Self> {
|
||||
if string == "default" {
|
||||
return Ok(None);
|
||||
}
|
||||
Err(BrightnessParserError::UnexpectedString(string.to_string()).spanned(span))
|
||||
}
|
||||
|
||||
fn parse_integer(&mut self, _span: Span, integer: i64) -> ParseResult<Self> {
|
||||
Ok(Some(integer as _))
|
||||
}
|
||||
|
||||
fn parse_float(&mut self, _span: Span, float: f64) -> ParseResult<Self> {
|
||||
Ok(Some(float))
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -593,6 +593,9 @@ impl Output {
|
|||
let tf = self.transfer_function.unwrap_or(TransferFunction::DEFAULT);
|
||||
c.set_colors(cs, tf);
|
||||
}
|
||||
if let Some(brightness) = self.brightness {
|
||||
c.set_brightness(brightness);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue