@@ -385,11 +385,11 @@ void modify_roi_in(dt_iop_module_t *self,
385385 roi_in -> scale = 1.0f ;
386386}
387387
388- void tiling_callback (struct dt_iop_module_t * self ,
389- struct dt_dev_pixelpipe_iop_t * piece ,
388+ void tiling_callback (dt_iop_module_t * self ,
389+ dt_dev_pixelpipe_iop_t * piece ,
390390 const dt_iop_roi_t * roi_in ,
391391 const dt_iop_roi_t * roi_out ,
392- struct dt_develop_tiling_t * tiling )
392+ dt_develop_tiling_t * tiling )
393393{
394394 dt_iop_highlights_data_t * d = piece -> data ;
395395 const uint32_t filters = piece -> pipe -> dsc .filters ;
@@ -407,8 +407,7 @@ void tiling_callback(struct dt_iop_module_t *self,
407407 tiling -> overhead = 0 ;
408408 tiling -> overlap = 0 ;
409409
410- dt_develop_blend_params_t * const bldata =
411- (dt_develop_blend_params_t * const )piece -> blendop_data ;
410+ dt_develop_blend_params_t * const bldata = piece -> blendop_data ;
412411 if (bldata
413412 && (piece -> pipe -> store_all_raster_masks || dt_iop_is_raster_mask_used (self , BLEND_RASTER_ID )))
414413 {
@@ -464,7 +463,7 @@ void tiling_callback(struct dt_iop_module_t *self,
464463}
465464
466465#ifdef HAVE_OPENCL
467- int process_cl (struct dt_iop_module_t * self ,
466+ int process_cl (dt_iop_module_t * self ,
468467 dt_dev_pixelpipe_iop_t * piece ,
469468 cl_mem dev_in ,
470469 cl_mem dev_out ,
@@ -673,15 +672,15 @@ static void process_visualize(dt_dev_pixelpipe_iop_t *piece,
673672 void * const ovoid ,
674673 const dt_iop_roi_t * const roi_in ,
675674 const dt_iop_roi_t * const roi_out ,
676- dt_iop_highlights_data_t * data )
675+ dt_iop_highlights_data_t * d )
677676{
678677 const uint8_t (* const xtrans )[6 ] = (const uint8_t (* const )[6 ])piece -> pipe -> dsc .xtrans ;
679678 const uint32_t filters = piece -> pipe -> dsc .filters ;
680679 const gboolean is_xtrans = (filters == 9u );
681680 const float * const in = (const float * const )ivoid ;
682681 float * const out = (float * const )ovoid ;
683682
684- const float mclip = data -> clip * highlights_clip_magics [data -> mode ];
683+ const float mclip = d -> clip * highlights_clip_magics [d -> mode ];
685684 const float * cf = piece -> pipe -> dsc .temperature .coeffs ;
686685 const float clips [4 ] = { mclip * (cf [RED ] <= 0.0f ? 1.0f : cf [RED ]),
687686 mclip * (cf [GREEN ] <= 0.0f ? 1.0f : cf [GREEN ]),
@@ -724,27 +723,28 @@ static void process_visualize(dt_dev_pixelpipe_iop_t *piece,
724723 }
725724}
726725
727- void process (struct dt_iop_module_t * self ,
726+ void process (dt_iop_module_t * self ,
728727 dt_dev_pixelpipe_iop_t * piece ,
729728 const void * const ivoid ,
730729 void * const ovoid ,
731730 const dt_iop_roi_t * const roi_in ,
732731 const dt_iop_roi_t * const roi_out )
733732{
734733 const uint32_t filters = piece -> pipe -> dsc .filters ;
735- dt_iop_highlights_data_t * data = piece -> data ;
734+ dt_iop_highlights_data_t * d = piece -> data ;
736735 dt_iop_highlights_gui_data_t * g = self -> gui_data ;
737736
738737 const gboolean fullpipe = piece -> pipe -> type & DT_DEV_PIXELPIPE_FULL ;
739738 const gboolean fastmode = piece -> pipe -> type & DT_DEV_PIXELPIPE_FAST ;
739+
740740 if (g && fullpipe )
741741 {
742742 if (g -> hlr_mask_mode != DT_HIGHLIGHTS_MASK_OFF )
743743 {
744744 piece -> pipe -> mask_display = DT_DEV_PIXELPIPE_DISPLAY_PASSTHRU ;
745745 if (g -> hlr_mask_mode == DT_HIGHLIGHTS_MASK_CLIPPED )
746746 {
747- process_visualize (piece , ivoid , ovoid , roi_in , roi_out , data );
747+ process_visualize (piece , ivoid , ovoid , roi_in , roi_out , d );
748748 return ;
749749 }
750750 }
@@ -760,11 +760,11 @@ void process(struct dt_iop_module_t *self,
760760 high_quality = (level >= min_s );
761761 }
762762
763- const float clip = data -> clip * dt_iop_get_processed_minimum (piece );
763+ const float clip = d -> clip * dt_iop_get_processed_minimum (piece );
764764
765765 if (filters == 0 )
766766 {
767- if (data -> mode == DT_IOP_HIGHLIGHTS_CLIP )
767+ if (d -> mode == DT_IOP_HIGHLIGHTS_CLIP )
768768 {
769769 process_clip (self , piece , ivoid , ovoid , roi_in , roi_out , clip );
770770 const float m = dt_iop_get_processed_minimum (piece );
@@ -778,13 +778,13 @@ void process(struct dt_iop_module_t *self,
778778 return ;
779779 }
780780
781- const dt_iop_highlights_mode_t dmode = fastmode && (data -> mode == DT_IOP_HIGHLIGHTS_SEGMENTS )
782- ? DT_IOP_HIGHLIGHTS_OPPOSED : data -> mode ;
781+ const dt_iop_highlights_mode_t dmode = fastmode && (d -> mode == DT_IOP_HIGHLIGHTS_SEGMENTS )
782+ ? DT_IOP_HIGHLIGHTS_OPPOSED : d -> mode ;
783783 switch (dmode )
784784 {
785785 case DT_IOP_HIGHLIGHTS_INPAINT : // a1ex's (magiclantern) idea of color inpainting:
786786 {
787- const float clipper = data -> clip * highlights_clip_magics [DT_IOP_HIGHLIGHTS_INPAINT ];
787+ const float clipper = d -> clip * highlights_clip_magics [DT_IOP_HIGHLIGHTS_INPAINT ];
788788 const float clips [4 ] = { clipper * piece -> pipe -> dsc .processed_maximum [0 ],
789789 clipper * piece -> pipe -> dsc .processed_maximum [1 ],
790790 clipper * piece -> pipe -> dsc .processed_maximum [2 ], clip };
@@ -840,7 +840,7 @@ void process(struct dt_iop_module_t *self,
840840
841841 float * tmp = _process_opposed (self , piece , ivoid , ovoid , roi_in , roi_out , TRUE, TRUE);
842842 if (tmp )
843- _process_segmentation (piece , ivoid , ovoid , roi_in , roi_out , data , vmode , tmp );
843+ _process_segmentation (piece , ivoid , ovoid , roi_in , roi_out , d , vmode , tmp );
844844 dt_free_align (tmp );
845845 break ;
846846 }
@@ -853,7 +853,7 @@ void process(struct dt_iop_module_t *self,
853853
854854 case DT_IOP_HIGHLIGHTS_LAPLACIAN :
855855 {
856- const float clipper = data -> clip * highlights_clip_magics [DT_IOP_HIGHLIGHTS_LAPLACIAN ];
856+ const float clipper = d -> clip * highlights_clip_magics [DT_IOP_HIGHLIGHTS_LAPLACIAN ];
857857 const dt_aligned_pixel_t clips = { clipper * piece -> pipe -> dsc .processed_maximum [0 ],
858858 clipper * piece -> pipe -> dsc .processed_maximum [1 ],
859859 clipper * piece -> pipe -> dsc .processed_maximum [2 ], clip };
@@ -869,7 +869,7 @@ void process(struct dt_iop_module_t *self,
869869 }
870870
871871 // update processed maximum
872- if ((data -> mode != DT_IOP_HIGHLIGHTS_LAPLACIAN ) && (data -> mode != DT_IOP_HIGHLIGHTS_SEGMENTS ) && (data -> mode != DT_IOP_HIGHLIGHTS_OPPOSED ))
872+ if ((d -> mode != DT_IOP_HIGHLIGHTS_LAPLACIAN ) && (d -> mode != DT_IOP_HIGHLIGHTS_SEGMENTS ) && (d -> mode != DT_IOP_HIGHLIGHTS_OPPOSED ))
873873 {
874874 // The guided laplacian, inpaint opposed and segmentation modes keep signal scene-referred and don't clip highlights to 1
875875 // For the other modes, we need to notify the pipeline that white point has changed
@@ -878,7 +878,7 @@ void process(struct dt_iop_module_t *self,
878878 }
879879}
880880
881- void commit_params (struct dt_iop_module_t * self ,
881+ void commit_params (dt_iop_module_t * self ,
882882 dt_iop_params_t * p1 ,
883883 dt_dev_pixelpipe_t * pipe ,
884884 dt_dev_pixelpipe_iop_t * piece )
@@ -919,8 +919,7 @@ void commit_params(struct dt_iop_module_t *self,
919919void init_global (dt_iop_module_so_t * module )
920920{
921921 const int program = 2 ; // basic.cl, from programs.conf
922- dt_iop_highlights_global_data_t * gd
923- = (dt_iop_highlights_global_data_t * )malloc (sizeof (dt_iop_highlights_global_data_t ));
922+ dt_iop_highlights_global_data_t * gd = malloc (sizeof (dt_iop_highlights_global_data_t ));
924923 module -> data = gd ;
925924 gd -> kernel_highlights_1f_clip = dt_opencl_create_kernel (program , "highlights_1f_clip" );
926925 gd -> kernel_highlights_1f_lch_bayer = dt_opencl_create_kernel (program , "highlights_1f_lch_bayer" );
@@ -1050,7 +1049,7 @@ void gui_changed(dt_iop_module_t *self, GtkWidget *w, void *previous)
10501049 }
10511050}
10521051
1053- void gui_update (struct dt_iop_module_t * self )
1052+ void gui_update (dt_iop_module_t * self )
10541053{
10551054 dt_iop_highlights_gui_data_t * g = self -> gui_data ;
10561055 const dt_image_t * img = & self -> dev -> image_storage ;
@@ -1124,6 +1123,7 @@ void reload_defaults(dt_iop_module_t *self)
11241123 dt_bauhaus_widget_set_quad_active (g -> strength , FALSE);
11251124 g -> hlr_mask_mode = DT_HIGHLIGHTS_MASK_OFF ;
11261125 }
1126+ d -> clip = MIN (d -> clip , img -> linear_response_limit );
11271127}
11281128
11291129static void _visualize_callback (GtkWidget * quad , dt_iop_module_t * self )
0 commit comments