heya, On Fri, Jul 6, 2018 at 12:06 AM, rawfiner <rawfi...@gmail.com> wrote: > Hi, > > I am still trying to resize raw before demosaicing to speed up raw > denoising. > > I now get the zoom level using the following code: > float scale = 1.0; > int closeup = dt_control_get_dev_closeup(); > if (piece->pipe->type == DT_DEV_PIXELPIPE_FULL) > scale = dt_dev_get_zoom_scale(self->dev, zoom, closeup ? 2.0 : 1.0, 0); > else if (piece->pipe->type == DT_DEV_PIXELPIPE_PREVIEW) > scale = dt_dev_get_zoom_scale(self->dev, zoom, closeup ? 2.0 : 1.0, 1);
as of lately, the obscure closeup became more obscure. it should now be 1<<closeup (to support 2x 4x .. 16x etc zoom without interpolating pixels). > This works fine in modify_roi_out, but sometimes gives 1 instead of what I > expect (the zoom factor) when called from modify_roi_in. > My problem is to manage to get the scale and use it correctly. okay. the way the pipeline works is in three stages: 1) a pass of modify_roi_out() from raw to screen output is performed. this is done full resolution, full region of interest, to determine the hypothetical size of the output image when processed in full. 2) given the size and region of interest of the view window, the develop module requests a certain input to be able to render the output. this is done by calling a chain of modify_roi_in() from view window back to raw image. this is only done on the exact pixels that are needed on screen right now, i.e. scaled and cropped. 3) process() is called with about exactly the ROI that were computed in pass number 2. i think there are some minor sanity checks done, so you shouldn't rely on what you asked for in modify_roi_in but use what you get in process(). so in your case i think messing with modify_roi_in() is the more important case. you can just request the full image as passed through 1) by asking for piece->buf_in or piece->buf_out (these are stored when running 1) ). hope that clears up some things! cheers, jo > My module would resize the raw image. > Thus, input and output have different dimentions. > I tried to set the roi_out width and height with modify_roi_out, this works > fine. > > However, even after trying various things in modify_roi_in, I don't manage > to get the full image as ivoid. > First thing that I don't understand is where roi_in is modified between > modify_roi_out and modify_roi_in, as at the beginning of modify_roi_in, the > roi_in width is equal to roi_out width, while they were different at the end > of roi_out? > > Also, in modify_roi_out I tried to save the scale in roi_out->scale, but in > modify_roi_in if I try to print roi_out->scale, I always get 1. > Is the roi_out variable used in modify_roi_out different from the one in > modify_roi_in? > > Maybe am I not catching something about the role of these passes. > > Thanks for any help! > > Cheers, > rawfiner > > 2018-05-10 23:13 GMT+02:00 rawfiner <rawfi...@gmail.com>: >> >> Thank you for your answer. >> >> 2018-05-09 13:22 GMT+02:00 johannes hanika <hana...@gmail.com>: >>> >>> heya, >>> >>> On Wed, May 9, 2018 at 12:27 PM, rawfiner <rawfi...@gmail.com> wrote: >>> > 2018-05-08 17:16 GMT+02:00 johannes hanika <hana...@gmail.com>: >>> >> i'm guessing you want to detect whether you are running a >>> >> DT_DEV_PIXELPIPE_FULL pipe in darkroom mode (as opposed to >>> >> DT_DEV_PIXELPIPE_PREVIEW or _EXPORT) and then do this downscaling >>> >> yourself before running your algorithm on reduced resolution. >>> >> >>> > >>> > Yes, and I would like to know the zoom factor in case of >>> > DT_DEV_PIXELPIPE_PREVIEW , in order to downscale only if the image is >>> > sufficiently zoomed out (for example, I don't want to downscale the >>> > image if >>> > the zoom is at 90%, but I want to downscale if it is below 50%). >>> >>> right. to determine the total scale factor, you would need to do >>> something like for instance in sharpen.c: >>> >>> const int rad = MIN(MAXR, ceilf(d->radius * roi_in->scale / >>> piece->iscale)); >>> >>> which determines the pixel radius scaled by input buffer scaling >>> (iscale) and region of interest scaling (roi_in->scale). >> >> >> Yes, I have seen that kind of things in the code of non local means. >> Yet, if I understand correctly, this allows to retreive the scale factor >> for an already downscaled image, i.e. when the image was downscaled >> previously in the pipeline. >> What I would like is a bit different, as it would be to know if I can >> downscale the image or not, depending on the zoom level in the darkroom. >> But I guess that I will find the necessary information in the function >> dt_iop_clip_and_zoom_mosaic_half_size_f() that you pointed me out! >> >>> >>> note that the preview pipe is what fills the whole image but >>> downscaled (iscale != 1) in the navigation view in the top left >>> corner. the "full" pipeline fills the pixels in the center view of >>> darkroom mode, at exactly the scale and crop you see on screen (iscale >>> == 1 mostly but the other scale and bounds in roi_in will change with >>> the current view). >>> >>> to find out whether you're running either one of the two you'd write >>> something similar to bilat.c: >>> >>> if(self->dev->gui_attached && g && piece->pipe->type == >>> DT_DEV_PIXELPIPE_PREVIEW) >> >> >> Ok, thank you for these explainations >> I think I have everything I need to make some new trials! >> >> Regards, >> >> rawfiner >> > > > ___________________________________________________________________________ > darktable developer mailing list to unsubscribe send a mail to > darktable-dev+unsubscr...@lists.darktable.org ___________________________________________________________________________ darktable developer mailing list to unsubscribe send a mail to darktable-dev+unsubscr...@lists.darktable.org