// Copyright (c) the JPEG XL Project Authors. All rights reserved. // // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. use crate::api::JxlCms; pub enum JxlProgressiveMode { /// Renders all pixels in every call to Process. Eager, /// Renders pixels once passes are completed. Pass, /// Renders pixels only once the final frame is ready. FullFrame, } #[non_exhaustive] pub struct JxlDecoderOptions { pub adjust_orientation: bool, pub render_spot_colors: bool, pub coalescing: bool, pub desired_intensity_target: Option, pub skip_preview: bool, pub progressive_mode: JxlProgressiveMode, pub enable_output: bool, pub cms: Option>, /// Fail decoding images with more than this number of pixels, or with frames with /// more than this number of pixels. The limit counts the product of pixels and /// channels, so for example an image with 1 extra channel of size 1024x1024 has 4 /// million pixels. pub pixel_limit: Option, /// Use high precision mode for decoding. /// When false (default), uses lower precision settings that match libjxl's default. /// When true, uses higher precision at the cost of performance. /// /// This affects multiple decoder decisions including spline rendering precision /// and potentially intermediate buffer storage (e.g., using f32 vs f16). pub high_precision: bool, /// If true, multiply RGB by alpha before writing to output buffer. /// This produces premultiplied alpha output, which is useful for compositing. /// Default: false (output straight alpha) pub premultiply_output: bool, } impl Default for JxlDecoderOptions { fn default() -> Self { Self { adjust_orientation: true, render_spot_colors: true, coalescing: true, skip_preview: true, desired_intensity_target: None, progressive_mode: JxlProgressiveMode::Pass, enable_output: true, cms: None, pixel_limit: None, high_precision: false, premultiply_output: false, } } }