[Gegl-developer] Where I am

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Just a little update on what I am working on.

So, I started with wanted to add a mask input to unary operations.  I
thought that mask's should be optional inputs, so this led to a
discussion about how to change scanline_processor_process and the
operator processing functions so that GeglData is passed, instead of
pointers to images.

At this point, I have an untested, but believed to be complete version
of scanline_processor_process that passes the GList of GeglData
pointers after properly initializing image iterators.  What I need to
do now though is change every single operators' process functions.
This is a sucky about of highly repetative, yet straight-foward
changes that I have yet to tackle.  Because of this huge change to so
many files, I started looking at what else may need to affect how
these functions are writtin, so we can minimize the number of times
all the functions are re-written.

The first thing I decided is to put in a slower, but simplier system
that would allow these functions to be rewrittin more quickly, yet
easilly replaced when the time comes to make decsions about
optimizations.  This is to put an abstraction over pixels that allows
processing functions to get away with not knowing what datatype the
pixel is stored as.  THis would allow floats to be a general
processing space, where the data is converted to floats, processed,
and converted back.  I was concerned about the additional overhead of
this conversion, but you exsisting code already provided an answer to
this.

First, suppose that we can provide an interface to pixel data such
that you can request and set the pixel data in whatever form you like,
but if the pixel data is already in your requested form, it returns
the pixel with nill overhead.

Then you tell the operator what type your pixel data is in and the
operator returns the best function it has for processing that kind of
data.  (this is nearly identical to what you already do now, except we
can provide a best, instead of exact fit).  This would allow us, as
developers to focus on getting this working at first by only providing
the function that operates in the largest (most accurate) data type we
have available (float) and then later, after the code changes have
settled down (or perhaps only when necessary) we can write versions of
the processing functions specialized for data types.

I already have a pretty good idea about where to go with this idea,
but I procced to think about the problem a little further.

After a little thought, I concluded that the tiling and caching
system were very likely to affect how the above system was constructed
as well as the best way to go about rewriting some of the operators'
process functions.  This prompted me to do a lot of research into
caching systems (hence the cross posted email to gimp-developer).

I really think I am on to a descent design for the tiling and caching
system.  So here is my current todo list.

Flesh out tiling, cacheing system api.

Write data-type independent accessor functions.

Rewrite all the operators' process functions to take advantage of the
last two steps, as well as the changes to scanline_processor_process.

Write support for an optional mask input to Unary operators.

I do expect it will be a while before I start producing a working
system incorporating all these features.

If you want, I can send you the changes I have made so far to
scanline_processor_process (and a few other files).  This code,
however breaks gegl.

I am starting to work on the tiling and caching system right now,
outside of the gegl source tree (to flesh out ideas).  When I get
something working in that area, I will let you know, and you can take
a look at that (if you want).

I hope this is satisfactory (e.g. I am not stepping on stuff you are
working on)

--
Dan


[Index of Archives]     [Yosemite News]     [Yosemite Photos]     [gtk]     [GIMP Users]     [KDE]     [Gimp's Home]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux