Run the learned denoise in develop, and export with it
A Bayer photograph keeps its mosaic in the session and is offered the AI Denoise switch. Asked for, the network runs on the decode executor from a hot-pixel-repaired copy — the app's own pass — with the frame's noise from its best source, and its progress in the activity bar; the classical demosaic shows until the result lands, and the finished job says where the noise figures came from. Keep grain is a GrainBlend of the two, made once per value; the render draws it as its source and the adjust pass never knows. demosaiced stays the classical result, so the raw histogram, the white balance picker, masks and segmentation still read the sensor. The develop view reconciles on a 250 ms poll rather than on each way an edit can change (slider, undo, preset, version, a sidecar from another device): two comparisons when nothing changed, and no path that can forget. A failure is not retried until the switch is toggled. An export of a photograph that asks for it waits for a running job or computes it.
This commit is contained in:
@@ -235,7 +235,10 @@ impl DevelopSession {
|
||||
reach: u32,
|
||||
) -> Result<std::sync::Arc<dr_gpu::DemosaicedImage>, String> {
|
||||
let Some(full) = self.full.clone() else {
|
||||
return Ok(self.demosaiced.clone());
|
||||
// TRACES: FR-DEV-3g
|
||||
// The learned demosaic, with its grain, where the edit asks for
|
||||
// it and it has landed; the classical one otherwise.
|
||||
return Ok(self.developed_source());
|
||||
};
|
||||
let frame = self.demosaiced.size();
|
||||
let ratio = self.graph.render_scale(frame, (w, h)).ratio();
|
||||
@@ -706,6 +709,10 @@ impl DevelopSession {
|
||||
&mut self,
|
||||
space: dr_types::ColourSpace,
|
||||
) -> Result<dr_export::Frame, String> {
|
||||
// TRACES: FR-DEV-3g
|
||||
// A photograph that asks for the learned demosaic is exported with
|
||||
// it, computed now if it is not here (denoise.md §7.1).
|
||||
self.denoise_blocking()?;
|
||||
let (sw, sh) = self.demosaiced.size();
|
||||
let (w, h) = self.graph.output_size(sw, sh);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user