GEGL ops: full-image processing (ignorance of ROI?)
On Sat, Feb 20, 2010 at 1:05 AM, Danny Robson wrote:
On Fri, 19 Feb 2010 21:24:57 +0300
Eugene Zagidullin wrote:
Yes, it's just what I mean. But this decomposition is a very
CPU-intensive operation. Is there a way to process whole image only
once, store output in a kind of cache and later update requested
region with cached data? Performing decomposition again and again
until whole image will be covered with ROIs and thus cached is waste
of time.
I ran into the same problem with gegl:openraw-load. If get_bounding_box
and importantly get_cached_region both return the entire image, then
GEGL will submit one process request for the entire image and cache the
result.
I'm using this trick in a couple of ops currently, and while it
doesn't appear to be explicitly documented anywhere, it always works.
This isn't a trick but how it is supposed to be done.
get_bounding_box returns the rectangle that has defined output pixels according
to this operation with its given inputs.
The documentation of get_cached_region used to say:
/* Adjust result rect, adapts the rectangle used for computing results.
* (useful for global operations like contrast stretching, as well as
* file loaders to force caching of the full raster).
*/
GeglRectangle (*get_cached_region) (GeglOperation *operation,
const GeglRectangle *roi);
I have changed it, and hopefully improved it, by making it:
/* The rectangular area that should be processed in one go, by default if not
* defined the output roi would be returned. This is useful for file loaders
* and operations like contrast stretching which is a point operation but we
* need parameters as the minimum/maximum values in the entire input buffer.
*/
GeglRectangle (*get_cached_region) (GeglOperation *operation,
const GeglRectangle *output_roi);
/Øyvind K.