Re: [Gegl-developer] GEGL + QT, another proposal

2011-07-21 Thread Øyvind Kolås
On Thu, Jul 21, 2011 at 5:24 PM, Jon Nordby jono...@gmail.com wrote:
 After some hacking this weekend, we now have a minimally useful
 gegl-qt library: https://github.com/jonnor/gegl-qt
 Currently it a set of a basic view widgets* showing the output of a
 GeglNode. A bit more info can be found in the README.txt file, and
 examples showing the usage can be found in the examples/ directory.
 Testing, usage and contributions welcomed!

 Unless there are any objections I propose to do the same as with
 gegl-gtk: Put on git.gnome.org, create a gegl-qt component in bugzilla
 and add to Jenkins.

Even though it uses Qt.. I think the gnome git repository is the most
natural place to stick this convenience library since it is based on
GEGL and all the other GEGL pieces, including a gegl-clutter library
which I added there today are hosted. So unless there are any other
objections I do not see why not.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] save 32 bit float as exr file

2011-07-18 Thread Øyvind Kolås
On Mon, Jul 18, 2011 at 6:13 PM, Rasmus Hahn rassa...@googlemail.com wrote:
 i have written an operation for gegl that writes OpenEXR float images, since
 i noticed there does not seem to be one already and i could use it. This
 version is quite usable within it's limitations. Limitations currently are:

Thank you :) I am not sure if the current way the format of the buffer
is determined is the most robust, but it probably works well enough. I
added the op to master and made the coding style more consistent with
the rest of GEGL/GIMP.

 I would like to see it included in the distribution; for now i have attached
 a patch, which creates a new file gegl/operations/external/exr-save.cc and
 makes a modification to the Makefile.am to build it. The patch is against
 version gegl-0.1.6, but works with the git-version (as of 2011-07-13), too.
 Sorry, for not providing a URL, but i do not have one right now.

---
Author: Øyvind Kolås pip...@gimp.org
Date:   Mon Jul 18 21:08:56 2011 +0100

AUTHORS: add Rasmus Hahn

commit 5470164d7a8677d9ea1ea67282650476b4d17aa4
Author: Øyvind Kolås pip...@gimp.org
Date:   Mon Jul 18 21:08:30 2011 +0100

exr-save: normalize coding style

commit d9512a262c845bb59f47ba103c1b7a32790ccf37
Author: Øyvind Kolås pip...@gimp.org
Date:   Mon Jul 18 20:56:50 2011 +0100

exr-save: add new op from Rasmus Hahn
snip


It would have been slightly nicer if you used git format-patch and
included a commit message for the patch yourself. Thank you :)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] save 32 bit float as exr file

2011-07-18 Thread Øyvind Kolås
On Mon, Jul 18, 2011 at 6:45 PM, Piotr Stanczyk
piotr.stanc...@gmail.com wrote:
 Thanks for adding ...  Any thoughts on adding 16-bit floating point
 support?  You could then consider using the RGBA interface ...

The op already supported Y, YA, RGB and RGBA - but all only with 32
bit floating point support. If support for half floats were to be
added this would have to be added to babl, either as an extension or
to the base of babl (the latter probably makes most sense). Looking at
the additional data types added for CIE Lab could act as inspiration.

I do however think having support for half-float exr is less important
than 32bit float so this is a great start in itself :)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL and GTK+, a proposal

2011-06-13 Thread Øyvind Kolås
On Mon, Jun 13, 2011 at 11:17 AM, Martin Nordholts ense...@gmail.com wrote:
 2011/6/12 Jon Nordby jono...@gmail.com:
 So I propose to:
 - Create a new gegl-gtk repository, containing the new library
 (alternative is to have it as a toplevel in gegl repo, if anyone can
 present good arguments for that I don't mind)

 First of all, I think the name should be gegl-ui, not gegl-gtk, in
 case we want to provide a widget for say Qt.

 I support moving the UI stuff into a separate git repository; it will
 be nice to have separate commit histories.

Having a library that depends on a lot of different UI frameworks
might not be conductive to encourage adoption. Since this would mean
that in distributions you would be pulling in the packages for all the
possible dependencies when wanting only one of them.

There is already a Clutter based GEGL integration library, and to me
it makes sense for there to be separate ones for different ui
toolkits.

http://git.clutter-project.org/clutter-gegl/

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL and GTK+, a proposal

2011-06-13 Thread Øyvind Kolås
On Mon, Jun 13, 2011 at 6:38 PM, Jon Nordby jono...@gmail.com wrote:
 I had the same thought, and eventually ended with the same conclusion:
 different repos.
 I actually started some Qt stuff but realized I get enough of that in
 my day-job. So GTK first, then we'll see.

 Øyvind: please give your explicit OK to the relisencing.

I am fine with the GeglView code being relicensed to LGPLv3+ :)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Gimp-developer] Recent Gegl-0.1.7 build fails

2011-05-28 Thread Øyvind Kolås
 Platform/Distribution HP Pavilion dv8t Intel Core  i7/ Windows 7, 64bit
 $ gcc -v
 Using built-in specs.
 Target: x86_64-w64-mingw32
 Configured with: ../gcc44-svn/configure --host=x86_64-w64-mingw32
 --target=x86_64-w64-mingw32 --disable-multilib --enable-checking=r
 elease --prefix=/mingw64 --with-sysroot=/mingw64
 --enable-languages=c,c++,fortran,objc,obj-c++ --enable-libgomp
 --with-gmp=/mingw64

 --with-mpfr=/mingw64 --disable-nls --disable-win32-registry
 Thread model: win32
 gcc version 4.4.5 20101001 (release) [svn/rev.164871 - mingw-w64/oz] (GCC)

 Note that this error did not happen a couple of weeks ago.

The error might be fixed in git master now, you can either do a git
checkout; or wait for new nightly tarballs to appear. I hope this
fixes it.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Compiling GEGL in Windows

2011-05-23 Thread Øyvind Kolås
On Fri, May 20, 2011 at 7:05 AM, Sayak sayak...@yahoo.com wrote:
 Hi All,
 I am new in GEGL development. For some times, i was using OpenCV library in
 Visual Studio 2010 to create an image manipulation application in Android. C 
 -
 JNI - Android. because of the limitation of the OpenCV library, i am 
 interested
 to use the GEGL library for a wider scope. Unfortunately, i didnt get any 
 proper
 guide about how to compile GEGL in visual studio. I would like to know the 
 steps
 that i need to do.

Personally, and as far as I know; most people on this mailinglist, do
not use visual studio and do not know how to integrate the libraries
with them, even though this should be possible as all of the code
should be cross platform and standards compliant. Please report back
if you figure out an easy way to do this.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Compiling GEGL in Windows

2011-05-23 Thread Øyvind Kolås
On Mon, May 23, 2011 at 2:29 PM, Jasper van de Gronde
th.v.d.gro...@hccnet.nl wrote:
 What about just plain MSYS/MingW? Has anyone ever managed to
 successfully compile GEGL on Windows? I tried it quite a while back,
 without much success. In the end I did manage to compile it, but then it
 didn't work in some weird way.

GIMP does work on windows using GEGL, as far as I've understood
compiled both from windows and cross compiled from Linux.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl: format comparison

2011-05-22 Thread Øyvind Kolås
On Sun, May 22, 2011 at 10:26 AM, Daniel Hiepler
ri...@boogiepalace.hopto.org wrote:
 Vom: Sat, 21 May 2011 22:37:41 +
 if(babl_format_get_type(format) == babl_type(u8))
 {
        /* u8 type */
 }
 else
 {
        /* no u8 type */
 }

Yes, all Babl objects are effectively singletons - and the same
internal object will be returned for all subsequent calls that refer
to one.

 BablFishes never change their source nor destination formats, and at
 the moment the source and destination formats of fishes are not
 exposed bu the publicly installed headers for babl.


 Then it looks like I have to remember the formats of all created fish
 myself :(

This depends on what you are trying to do, if all you are trying to do
is to avoid creating multiple fishes referring to the same two formats
than babl already does this for you internally. Just like pixel
formats and types, you should be getting the same fish, with
significantly less computation needed. On subsequent requests.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl: format comparison

2011-05-21 Thread Øyvind Kolås
On Sat, May 21, 2011 at 12:03 PM, Daniel Hiepler
ri...@boogiepalace.hopto.org wrote:
 Hi,

 what would be the best-practice to check if two BablFormats are the
 same? I would need something like:

 Babl *format1 = babl_format(R'G'B' u8);
 Babl *format2 = babl_format(CIE Lab float);

 if(is_same_format(format1, format2))

if (format1 == format2)
  { ... } else { ... }

But do note that internally babl will provide you with a memcpy
instead of a conversion if the passed in formats are the same; thus
this should only be neccesary if direct access with no copies
whatsoever is an option where used.

 { ... } else { ... }

 Also I would need to get the current source- and destination-format of
 a fish.

 Is that possible?

BablFishes never change their source nor destination formats, and at
the moment the source and destination formats of fishes are not
exposed bu the publicly installed headers for babl.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] Fwd: [Gimp-developer] gegl-vips

2011-04-17 Thread Øyvind Kolås
-- Forwarded message --
From:  jcup...@gmail.com
Date: Sun, Apr 17, 2011 at 10:22 AM
Subject: [Gimp-developer] gegl-vips
To: gimp-developer gimp-develo...@lists.xcf.berkeley.edu


Hi all,

I've had a stab at a quick hack of gegl-0.1.6 to use libvips (another
demand-driven image processing library) as the backend for batch
processing. I think it is maybe an interesting way to look at gegl
performance, for this use case at least.

https://github.com/jcupitt/gegl-vips

This has some very strong limitations. First, it will not work
efficiently with interactive destructive operations, like paint a
line. This would need area cache invalidation in vips, which is a way
off. Secondly, I've only implemented a few operations (load / crop /
affine / unsharp / save / process), so all you can do is some very
basic batch processing. It should work for dynamic graphs (change the
parameters on a node and just downstream nodes will recalculate) but
it'd need a display node to be able to test that.

There's a README with some more detail on how it works, a test program
and some timings.

If I run the test program linked against gegl-0.1.6 on a 5,000 x 5,000
pixel RGB PNG image on my laptop (a c2d at 2.4GHz), I get 96s real,
44s user. I tried experimenting with various settings for GEGL_SWAP
and friends, but I couldn't get it to go faster than that, I probably
missed something. Perhaps gegl's disk cache plus my slow laptop
harddrive are slowing it down.

Linked against gegl-vips with the operations set to exactly match
gegl's processing, the same thing runs in 27s real, 38s user. So it
looks like some tuning of the disc cache, or maybe even turning it off
for batch processing, where you seldom need pixels more than once,
could give gegl a very useful speedup here. libvips has a threading
system which is on by default and does double-buffered write-behind,
which also help.

If you use uncompressed tiff, you can save a further 15s off the
runtime. libpng compression is slow, and even with compression off,
file write is sluggish.

The alpha channel is not needed in this case, dropping it saves about
5s real time.

babl converts to linear float and back with exp() and log(). Using
lookup tables instead saves 12s.

The gegl unsharp operator is implemented as gblur/sub/mul/add. These
are all linear operations, so you can fold the maths into a single
convolution. Redoing unsharp as a separable convolution saves 1s.

Finally, we don't really need 16-bit output here, 8 is fine. This
saves only 0.5s for tiff, but 8s for PNG.

Putting all these together, you get the same program running in 2.3s
real, 4s user. This is still using linear float light internally. If
you switch to a full 8-bit path you get 1s real, 1.5s user. I realise
gegl is committed to float, but it's interesting to put a number on
the cost.

Does this sound useful? I think it's maybe a way to weight the
benefits of the various possible optimisations. I might try running
the tests on a machine with a faster hard disk.

John
___
Gimp-developer mailing list
gimp-develo...@lists.xcf.berkeley.edu
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer



-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] Fwd: [Gimp-developer] gegl-vips

2011-04-17 Thread Øyvind Kolås
I didn't see that the discussion was on gimp-devel, forwarding my
reply as well, in case someone are following GEGL developer/digging in
its archives.

-- Forwarded message --
From: Øyvind Kolås pip...@gimp.org
Date: Sun, Apr 17, 2011 at 2:24 PM
Subject: Re: [Gimp-developer] gegl-vips
To: jcup...@gmail.com
Cc: gimp-developer gimp-develo...@lists.xcf.berkeley.edu


Thank you for taking a serious look at GEGL, I've trimmed away the
bits relating to the VIPS backend and rather focus on the performance
numbers you get out and will try to explain them.

On Sun, Apr 17, 2011 at 10:22 AM,  jcup...@gmail.com wrote:
 Linked against gegl-vips with the operations set to exactly match
 gegl's processing, the same thing runs in 27s real, 38s user. So it
 looks like some tuning of the disc cache, or maybe even turning it off
 for batch processing, where you seldom need pixels more than once,
 could give gegl a very useful speedup here. libvips has a threading
 system which is on by default and does double-buffered write-behind,
 which also help.

On my c2d 1.86ghz laptop I get 105s real 41s user with default settings.
Setting GEGL_SWAP=RAM in the environment to turn off the disk swapping
of tiles makes it run in 43s real 41s user. With the default settings
GEGL will start swapping when using more than 128mb of memory for
buffers, this limit can be increased by setting for instance
GEGL_CACHE_SIZE=1024 to not start swapping until 1gb of memory is in
use. This leads to similar behavior, the tile backend of GEGL is using
reads and writes on the tiles, using mmaping instead could increase
the performance.

 If you use uncompressed tiff, you can save a further 15s off the
 runtime. libpng compression is slow, and even with compression off,
 file write is sluggish.

Loading a png into a tiled buffer as used by GeglBuffer is kind of
bound to be slow, at the moment GEGL doesnt have a native TIFF loader,
if the resources were spent on writing a proper TIFF backend to
GeglBuffer GEGL would be able to lazily swap in the image data from
TIFF files as needed.

 babl converts to linear float and back with exp() and log(). Using
 lookup tables instead saves 12s.

If the original PNG was 8bit, babl should have a valid fast path for
using lookup tables converting it to 32bit linear. For most other
conversions involved in this process babl would likely fall back to
reference conversions that go via 64bit floating point; and processes
each pixel with lots of logic perutating components etc. By
adding/fixing the fast paths in babl to match the reference conversion
a lot of the time spent converting pixels in this test should vanish.

 The gegl unsharp operator is implemented as gblur/sub/mul/add. These
 are all linear operations, so you can fold the maths into a single
 convolution. Redoing unsharp as a separable convolution saves 1s.

For smaller radiuses this is fine, for larger ones it is not, ideally
GEGL would be doing what is optimal behind the users back.

 Finally, we don't really need 16-bit output here, 8 is fine. This
 saves only 0.5s for tiff, but 8s for PNG.

Making the test case you used save to 8bit PNG instead gives me 34s
real and 33s user. I am not entirely sure if babl has a 32bit float -
8bit nonlinear RGBA conversion, it might just be libpngs data
throughput that makes this difference.

 save = gegl_node_new_child (gegl,
                             operation, gegl:png-save,
                             bitdepth, 8,
                             path, argv[2],
                             NULL);

 Putting all these together, you get the same program running in 2.3s
 real, 4s user. This is still using linear float light internally. If
 you switch to a full 8-bit path you get 1s real, 1.5s user. I realise
 gegl is committed to float, but it's interesting to put a number on
 the cost.

This type of benchmark really stress tests the file loading/saving
parts of code where I am fully aware that GEGL is far from optimal,
but it is also something that doesn't in any way reflect GIMPs
_current_ use of GEGL which involves converting 8bit data to and from
float with some very specific formats and then only doing raw
processing. This will of course change in the future.

 Does this sound useful? I think it's maybe a way to weight the
 benefits of the various possible optimisations. I might try running
 the tests on a machine with a faster hard disk.

It is useful, but it would perhaps be even more useful to see similar
results for a test where the loading/saving is taken out of the
benchmark
and measure raw image data crunching.

Setting GEGL_SWAP=RAM, BABL_TOLERANCE=0.02 in the environment to make
babl be  lenient with the error introduced by its fast paths I run the
test in, it should be possible to fix the fast paths in babl to be
correct enough to pass the current stricter criteria for use; and thus
get these results without lowering standards. Even adding slightly
faster but guaranteed to be correct 8bit

Re: [Gegl-developer] [Gimp-developer] gegl-vips

2011-04-17 Thread Øyvind Kolås
On Sun, Apr 17, 2011 at 9:40 PM,  jcup...@gmail.com wrote:
 On 17 April 2011 14:24, Øyvind Kolås pip...@gimp.org wrote:
 On my c2d 1.86ghz laptop I get 105s real 41s user with default settings.
 Setting GEGL_SWAP=RAM in the environment to turn off the disk swapping
 of tiles makes it run in 43s real 41s user.

 I found GEGL_SWAP=RAM, but on my laptop the process wandered off into
 swap death before finishing. Is there some way to limit mem use? I
 only have 2gb.

My laptop has 3gb of RAM and thus doesn't end up crunching swap on such a test.

Setting GEGL_CACHE_SIZE=1300 or so, should have a similar effect,
hopefully GEGL wouldn't need to make everying swap. (not that in doing
so you should _not_ set GEGL_SWAP=RAM). I noticed that setting
GEGL_THREADS=anything_more_than_1 causes things to crash, along with
other things that more subtly break.. are the reason GEGL doesnt
default to keep all cores busy yet.

 Loading a png into a tiled buffer as used by GeglBuffer is kind of
 bound to be slow, at the moment GEGL doesnt have a native TIFF loader,

 You can work with tiled tiff straight from the file, but for sadly for
 striped tiff (as 90%+ are, groan) you have to unpack the whole file
 first :-(

I'm not sure what a striped tiff is, if it stores each scanline
separately GeglBuffer could be able to load data directly from it by
using 1px high tiles that are as wide as the image.

 babl converts to linear float and back with exp() and log(). Using
 lookup tables instead saves 12s.

 If the original PNG was 8bit, babl should have a valid fast path for
 using lookup tables converting it to 32bit linear. For most other

 OK, interesting, I shall look at the callgrind output again.

I'd recommend setting the BABL_TOLERANCE=0.004 environment variable as
well, to permit some fast paths with errors around or below 1.0/256
avoiding the rather computationally intensive synthetic reference
conversion code in babl.

 The gegl unsharp operator is implemented as gblur/sub/mul/add. These
 are all linear operations, so you can fold the maths into a single
 convolution. Redoing unsharp as a separable convolution saves 1s.

 For smaller radiuses this is fine, for larger ones it is not, ideally
 GEGL would be doing what is optimal behind the users back.

 Actually, it works for large radius as well. By separable convolution
 I mean doing a 1xn pass then a nx1 pass. You can bake the
 sub/mul/add into the coefficients you calculate in gblur.

I thought you meant hard-coded convultions similar to the
crop-and-sharpen example, baking it into the convolution might be
beneficial, though at the moment I see it as more important to make
sure gaussian blur is as fast as possible since it is a primitive that
both this, and dropshadow and other commonly employed compositing
things are built from.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Gimp-developer] GIMP vs Photoshop

2011-03-08 Thread Øyvind Kolås
On Tue, Mar 8, 2011 at 7:47 PM, Bogdan Szczurek thebod...@gmail.com wrote:
 Yes, but why use RGB at all if one can use e.g. XYZ from the start?
 So wide RGB would also require greater than 8 bit depths to work
 satisfactorily (HSV, HSL or Lab do quite nicely even with 8 bits per
 component). I think one consolation is possible backward compatibility
 with some other RGB spaces, but isn't BC a b**ch? ;) Besides there's a
 trouble of defining such “new” RGB workspace: what white point should
 be choosen and what primaries (all have to be defined in some absolute
 color coordinates BTW)?  Whatever space would be choosen we wouldn't
 escape color conversions in color managed workflow, so while I'm not
 RGB enemy I fail to see the reason to stick to it especially since
 there are “wider” color spaces that are more intuitive to work with.

It is a matter of which well defined color space the operations
desired provide sensible outputs. For some types of operations doing
them in premultiplied linear light RGB is superior to doing them in
sRGB, CIE Lab or other more or less perceptual spaces, for other
operations the opposite is true. My stance is that the sliders on an
operations should be predictable and always do the same thing for the
colorimetrically absolute same color - whis is why the operations of
GEGL request temporary working buffers in their preferred working
space (this is where babl does the; optimized; conversions you
correctly state have to happen) rather than blindly handling incoming
numbers. The RGB space defined by and used by babl uses the same
primaries as sRGB, and has well defined conversions to CIE Lab, Xyz
and others.

The preferred^Wenforced working space of some operations in GEGL might
need some scrutinization and review, though for compositing; gaussian
blurs; interpolation etc I think the current choice of linear light
RGB.

GEGL also does not support working in an internal 8bit or 16bit mode,
it is floating point with high precision and additional
headroom/footroom (wide gamut/HDR) for all temporary buffers, if the
desired output is 8bit it happens when displayed or exported.
Operations like for instance unsharp-mask does not work correctly if
termporary results are clipped.

/Ø
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] gegl_init(),gegl_exit() and modules

2011-02-15 Thread Øyvind Kolås
On Tue, Feb 15, 2011 at 5:29 AM, Jan Kovanda kovandajan11...@gmail.com wrote:
 At first I thought that using gegl_exit() should delete (unref and free)
 module_db. A bit of testing revealed some unpleasant surprises. Even after
 gegl_exit() I am still able to access GeglNodes a gegl methods as if no exit 
 was
 called.

 Then what is method gegl_exit() good for?

GEGL is not designed to be torn down and reinitialized, gegl_exit will
cause unreferencing some of the runtime data as well as report any
problems detected by sanity checks. Patches making it possible to
reload the GEGL ops would be welcome, do however note that the GType
system underlying GObject is likely to provide some unexpected
hurdles.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL 0.1.6

2011-02-13 Thread Øyvind Kolås
GEGL (Generic Graphics Library) is a graph based image processing framework.

GEGL provides a graph based API and framework to do demand driven, cached, non
destructive image editing of larger than RAM images. Through babl it provides
support for a wide range of color models and pixel storage formats for input
and output.

To build gegl-0.1.6 you will also need babl-0.1.4

Changes in this release:

 • Fixed a bugs in matting-levin that made GEGL halt due to errors
   detected by babl sanity code, this made 0.1.4 be unusable if you had
   all dependendency when building.
 • build/test improvements.
 • New operations: max-rgb, pixelise, motion blur
 • Added extension points for GeglBuffer to use external tile
backends, allowing to plug-in alien
   tilebackends, for legacy GIMP tilemanager/Krita/OSM and similar.


This release of GEGL was made possible by contributions from:

Tobias Ellinghaus, Øyvind Kolås, Barak Itkin and Martin Nordholts

Where to get GEGL:

The latest versions of GEGL and it's hard dependencies babl and glib can be
fetched from:

ftp://ftp.gimp.org/pub/babl/0.1/babl-0.1.4.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.1/gegl-0.1.6.tar.bz2
ftp://ftp.gtk.org/pub/glib/2.20/glib-2.20.5.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
1abe98b11e67737b6f74d6993d45046eec93bcda  babl-0.1.4.tar.bz2
27bedcfd077da7a6913b82966dbec904b22c121d  gegl-0.1.6.tar.bz2
19e2b2684d7bc35a73ff94eb7fd15fc70cc6f292  glib-2.20.5.tar.bz2

Where to get more information about GEGL

More information about GEGL can be found at the GEGL website, or by
joining #gegl or #gimp on the irc network GIMPnet.

/Øyvind Kolås
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] internal structure of GEGL

2011-01-25 Thread Øyvind Kolås
On Tue, Jan 25, 2011 at 3:30 PM, Jan Rabusic jrabu...@gmail.com wrote:
 For example my problem: I would like to extend color operations. I would like 
 to
 rewrite every operation which depends on color model of input (invert,
 brightness-contrast, etc.) to have in arguments an color model format, and
 according to this variable would be perform the appropriate version of the
 operation. Example: I have sRGB 8bit integer data and I would like to call
 invert, so ...(gegl, operation, gegl:invert, c_m_format, sRGB 8bit,
 NULL) would call invert for 8bit and three channels...

The working space of most of GEGLs processing ops are by design 32bit
linear light RGB, this allows both headroom and footroom allowing for
intermediate results that go beyond the 0.0-1.0 / 0-255 range, which
is neccesary for some operations like unsharp mask and provides more
predictable results than having separate implementations for a wider
range of pixel formats, babl is used as a universal translator to
implicitly convert between various pixelformats/colorspaces. See
http://gegl.org/babl/ for more details about babl.

For some of the color operations currently used in GIMP doing the
processing in 32bit float with conversions back and forth from 8bit is
already as fast as GIMPs old code operating only in 8bit, adding code
to deal with gamut limited formats seems like something that would
bring mostly problems and not many obvious benefits.

 - Second question about this is: can be get_gegl_buffer_format usefull for
 this? can I call it in operation invert on its input? if yes, what points the
 pointer Babl*, which is returned? an array of chars?

Do you mean gegl_buffer_get_format ? This does return a reference to
an opaque data structure that can be queried for information with the
babl API, see that babl documentation/headers for further insight into
what can be done with it.

Adding paralell implementations that specially deal with other color
models, or code paths that deals generically with multi component
color models is something I would primarily see as beneficial for CMYK
- and at least initially that is something that I would not consider
necessary during processing of photos/drawings, but something to be
done after GEGL/GIMP has dealt with the image when the final printing
color space is known and well defined. Most users desiring a CMYK mode
should be satisfied by working in properly color managed RGB with CMYK
soft-proofing, and perhaps attaching an ICC profile later, perhaps
separating to CMYK at export if the software/hardware used further
down a printing pipeline does not support PDF/X.

/Øyvind Kolås
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL 0.1.4 and babl 0.1.4

2011-01-20 Thread Øyvind Kolås
GEGL (Generic Graphics Library) is a graph based image processing framework.

GEGL provides a graph based API and framework to do demand driven, cached, non
destructive image editing of larger than RAM images. Through babl it provides
support for a wide range of color models and pixel storage formats for input
and output.

To build gegl-0.1.4 you will also need babl-0.1.4

Changes in this release:

 • Operations:
 save (chooses delegate save op automatically)
 rgbe load/save
 jpeg200 load/save
 ppm load/save
 map-absolute (GIMP cage tool gsoc helper op)
 whirl and pinch
 mirrors
 grid render
 fixed imagemagick fallback load op
 fixed pipe based dcraw wrapper
 GSoC 2010 ops: exp-combine, reinhard05, fattal02, mantiuk06, matting-levin
 • Various source and build improvements.
 • improvements towards threaded rendering
 • Buffer:
 refactored away some constant overhead
 made GeglBufferIterator API public

This release of GEGL was made possible by contributions from:

Michael Natterer, Øyvind Kolås, Vincent Untz, Kaja Liiv, Nils
Philippsen, Étienne Bersac, Martin Nordholts, Debarshi Ray, Danny
Robson, Stuart Axon, Kao, Mukund Sivaraman, Ruben Vermeersch, Barak
Itkin, Michael Muré, Mikael Magnusson, Patrick Horgan and Andy Gill.


Where to get GEGL:

The latest versions of GEGL and it's hard dependencies babl and glib can be
fetched from:

ftp://ftp.gimp.org/pub/babl/0.1/babl-0.1.4.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.1/gegl-0.1.4.tar.bz2
ftp://ftp.gtk.org/pub/glib/2.20/glib-2.20.5.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
1abe98b11e67737b6f74d6993d45046eec93bcda  babl-0.1.4.tar.bz2
dcb437205850e598a48e314add68b13cd26f542c  gegl-0.1.4.tar.bz2
19e2b2684d7bc35a73ff94eb7fd15fc70cc6f292  glib-2.20.5.tar.bz2

Where to get more information about GEGL

More information about GEGL can be found at the GEGL website, or by
joining #gegl or #gimp on the irc network GIMPnet.

/Øyvind Kolås
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] various blurs

2011-01-19 Thread Øyvind Kolås
On Wed, Jan 19, 2011 at 10:29 AM, andy gill andygg...@gmail.com wrote:
 Could you explain how the tests work, it's not obvious to me what I need to
 add. Do the tests make sure that the results match a reference image in some
 way?

XML files in gegl/tests/compositions are rendered and their output is
tested against the PNG files by the same names in
gegl/tests/compositions/reference, visual files indicating where the
outputs differ are also produced if the tests are wrong.

It would probably be good to have a section on the website explaining
how these regression tests work. There are also bots the build the
GEGL code base nightly and will complain to us on IRC if the build
breaks or the tests fail passing.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL run -- heavy resources consumption

2010-10-20 Thread Øyvind Kolås
On Tue, Oct 19, 2010 at 10:12 PM, Jan Kovanda kovandajan11...@gmail.com wrote:
 A testing picture is 8.5 MB RGB jpeg image 6000px x 6000px.

uncompressed this is 103 MB as 8bit RGB data, 549 MB as 32bit float
RGBA data which is what GEGL prefers to work with internally.

 Why GEGL needs so much resources for such simple program?
 I am not so familiar with inner workings of buffers and caching, but I would
 expect smaller use of the resources.

At least the load and save ops themselves need a buffer the full size
of the image to be able to do all the png processing in one go, there
is potentially also caches for some of the other operations in a
graph.

 Why those swap files are created?
 In the program I didn't set any properties for swapping to disk.

GEGL defaults to swapping to disk, see the various environment
variables in http://gegl.org/#_environment for how to tweak this,
these settings are also available in the singleton object returned
with gegl_config()

You would probably want to increase the tile cache size which defaults
to 256mb by setting GEGL_CACHE_SIZE

Disable swapping to disk by setting GEGL_SWAP=RAM in the environment,
this will cause GEGL to swap unused tiles to RAM instead.

/Øyvind K.
--
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl: Floating point suffix

2010-10-20 Thread Øyvind Kolås
On Sun, Oct 3, 2010 at 12:44 AM, Rupert Weber g...@leguanease.org wrote:
 Many floating point constants in babl are suffixed with an 'F', even
 though they are used (i.e. converted soon thereafter) as doubles. (And
 again recently on GIMP with the Megapixel-patch).

 While my reflex would be to just change that whenever I come across it,
 I first wanted to make sure there isn't some rationale behind it that
 I'm not seeing. Is there?

I do not think so, feel free to change this.

/Øyvind K.
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl docs

2010-09-12 Thread Øyvind Kolås
On Sat, Sep 11, 2010 at 8:28 PM, Rupert Weber g...@leguanease.org wrote:
 So it's a three-liner now. Hope it's ok that I include it here.
 I decided to insert a declaration instead of pulling up the static function
 to the top, so the patch wouldn't look like stuff has changed that hasn't.
 If you want it the other way, let me know or just change it. Either way,

Thank you, commited to git.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl docs

2010-09-11 Thread Øyvind Kolås
On Fri, Sep 10, 2010 at 11:55 PM, Rupert Weber g...@leguanease.org wrote:
 Something else I don't understand about models/formats:

 If babl automatically creates a double-format for every registered
 model, how can there be models without a double-format?
 Namely RaGaBaA, RGB, R'G'B', YaA, Y'A, and Y'?

Looking at the code babl doesn't create a double-format, but when
registering a color model conversions to/from a (perhaps synthesized)
double format is provided to be able to regression test.

 Also, why are there so many empty spots on the introspection?
 E.g. Lab float/u8/u16: shouldn't babl find it's own way from double to
 float? And type conversions to/from u8 and u16 are supplied by CIE.c.
 (Actually, those are buggy in several ways, but fixing it doesn't help)

Empty spots in what, if you are referring to
http://gegl.org/babl/BablFishPath.html
then the empty spots are the spots where babl is finding its own way,
the single dots are where there are direct conversions and the bars of
varying vertical height indicate how many steps a multi step
conversion takes.

The 8bit / 16bit data types for CIE lab are very different beasts from
the 8bit types used for sRGB and will be used when those pixel formats
are used.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl docs

2010-09-11 Thread Øyvind Kolås
On Sat, Sep 11, 2010 at 1:21 PM, Rupert Weber g...@leguanease.org wrote:
 On 09/11/2010 10:14 AM, Øyvind Kolås wrote:

 Looking at the code babl doesn't create a double-format, but when
 registering a color model conversions to/from a (perhaps synthesized)
 double format is provided to be able to regression test.

 I'm sure you think this all totally obvious, but it's actually really
 confusing. ;o)

 An example:
 - I registered a color model HSV and its components, but no format.
 - Now I can successfully register a conversion between RGBA and
  HSV, all components are (implicitly) double
 - BablFishPath.html shows a format HSV double
 - But HSV double doesn't actually exist as a format. Trying to
  register a conversion to/from babl_format(HSV double) gives
  an error: babl_format(HSV double): not found
 - In contrast, when I _use_ babl (i.e. not inside babl)
  babl_format (HSV double) works just fine.
 - Then again, babl_format (RGB double) always fails, both inside
  babl and in userland.

 Maybe there is a red line somewhere in there which I fail to see, but right
 now I'm just hopelessly confused and wouldn't know how to sanely describe
 the situation in the docs.

 My knee-jerk proposition would be:
 Automatically register a double format for every model that is registered.
 Is there any downside to that?

I do not see a downside to this, it would probably result in a net
code size reduction which is only a good thing.

 (I thought before that happens already but failed to realize that I had
 followed the call hierarchy to somewhere in babl/tests)

 Empty spots in what, if you are referring to
 http://gegl.org/babl/BablFishPath.html
 then the empty spots are the spots where babl is finding its own way,

 I still don't understand that. What is 'its own way'?
 E.g. the CMYK float row has only empty spots. Picking one of them, I get
 e.g. 'Reference CMYK float to CIE Lab u16' in the popup window.
 How can babl possibly find its own way from CMYK to CIE Lab u16 without
 hopping over several extension-supplied conversions?

When there are no direct conversions available, and no way to use
multiple registered linear conversions to get from the source format
to the destination format babl uses the generic conversion code in

http://git.gnome.org/browse/babl/tree/babl/babl-fish-reference.c

It can do this because a BablFormat contains knowledge of the color
model used, the permutation (order) of the components as well as the
types of the individual components.
This reference conversion is bound to be quite a bit slower than a
direct conversion between two pixel formats, since it contains
intermediate conversions to the relevant double pixel formats, it
takes the permutation of the components into account etc. This
reference conversion is also used to verify that shortcuts registered
in extensions actually provide sufficiently accurate results.

-
Those two even I understood. ;)  But I'm still riddling over the red bars.

Something changed making the stats output a little bit less useful
than it used to be, only conversions that are using the reference
fishes[1] and are used to convert a significant count of pixels
should be marked like this, as an indication that the given conversion
is a likely bottleneck in processing.

1: The reason for both babls name, and for classes to be called fishes
can be found in the hitchhikers guide to the galaxy
http://en.wikipedia.org/wiki/Babel_fish_%28leech-like%29#Babel_fish
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] babl docs

2010-09-09 Thread Øyvind Kolås
On Thu, Sep 9, 2010 at 10:18 AM, Rupert Weber g...@leguanease.org wrote:
 On 09/09/2010 08:03 AM, Martin Nordholts wrote:
 That's pretty nice, could you provide a patch against the docs part in babl?
 http://git.gnome.org/browse/babl/tree/docs

 Sure: https://bugzilla.gnome.org/show_bug.cgi?id=629146

Yep it is nice to get someone to document some of this process :), I
wonder if you can be tricked into documenting how to interpret the
statistics in /tmp/babl-stats that occur when the environment variable
BABL_STATS is set as well; to guide the understanding of which slow
paths are being taken decreasing overall performance.

Comments for the editnotes, it would have been easier to reply to
these, in context if you asked them as questions here on the
mailinglist rather than embed them in the document.

linear, plane, planar

linear is for converting a buffer of n pixels with a given pixel
format, the pixels are expected to contain the components
packed/interleaved/chunky in the order specified in the pixel format.

plane is for converting a single plane, this can be used internally
by babl when constructing reference/fallback conversions, it allows
doing processing on one and one component and as guessed with
individual pitch changes (to skip the other components if needed).

planar is for converting full images where the components might be
stored separately, like it is done for some YCbCr formats in video
compression (where the dimensions of the images for the Cb and Cr
components might be smaller than the Y image), this feature in babl is
not used by GEGL and migh not be completely functional.

...
yes, you should re-register color models and used pixel formats in
extensions that are not present in the babl-base, since the order
extensions are loaded in are not guaranteed.

...
the use of babl_type_new and ... integer, unsigned indeed seems to be wrong.

..
the return value of conversion functions was intended to be the number
of samples actually converted, the value is not really used anywhere
in babl though and could probably be removed and be made void.

..

the chroma, alpha and luma flags have no meaning inside babl but
can be useful in determining behavior for image processing algorithms
in a manner that is independent of the actual color model used. At one
point it was also used to detmine whether conversion would incurr a
loss of features thus blacklisting possible multi-step conversion
paths, this is now achieved through other means.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Development step

2010-09-04 Thread Øyvind Kolås
On Sat, Sep 4, 2010 at 6:52 PM, Jacopo Corzani corz...@gmail.com wrote:
 I have a stupid question about gegl devel workflow...
 I readed documentation and i saw gegl's bugzilla page, it seems that
 there aren't any ufficial open task to complete (associate to any
 person or group), only a open bug or feature that i can't say if is
 under develop and who is a developer.
 It seems that someone (that wants to contribute) writes any patch
 without knowing that will be accepted or will be useless (and don't know
 if anyother working at the same things).
 Who can manage developer's task and its priority/human resources?

Patches the solve issues kept track of in the bugzilla are welcome,
please also use the bugzilla and/or the mailinglist to clarify
something that is being worked on - this would act as a sign to others
that there is current interest in a particular topic or area.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Gimp-developer] Lab conversion, GEGL, RGB space, Illuminant

2010-08-13 Thread Øyvind Kolås
On Fri, Aug 13, 2010 at 9:06 AM,  jcup...@gmail.com wrote:
 On 13 August 2010 02:57, James Cox jay...@gimp.org wrote:
 You don't need to worry that the sRGB gamut is rather small since,
 because GEGL is using float, it can represent values outside the gamut
 as less than 0 or greater than 1.

 That sounds good in theory, but there will be some very sharp edges in
 practice.  What does the UI for the curve tool look like when possible
 values are -FLOATMAX to +FLOATMAX.  What does the contrast tool do with
 values above 1.0.  When I blend some layers with multiply mode they can
 only get darker right?

 scRGB actually does define a range, -0.5 to +7.5, according to
 wikipedia, so tools like the levels dialog are not totally in the
 dark.

That is just due to the encoding chosen, (fitting in 16bit) GEGL uses
normal IEEE floats just like EXR and thus has the range -FLOATMAX to
+FLOATMAX supporting HDR buffers with huge range. Thus the native
pixel format used by GEGL isnt directly scRGB, but IEEE floating point
RGB(A) with linear light and primaries like in sRGB.

Some additional comments about color management in GEGL, confirming
what has already been stated/suggested. GeglBuffers have a specified
pixel-format, as defined by babl, babl's pixel formats are (at least
supposed to be) well defined and accurate conversions between both
precisions and color models. Thus once data is in a babl governed
pixel format the color values should already be well defined. If the
color space of a source image is in a device-dependent color space it
either is converted upon load to for instance RGBA float or a
dynamically created babl pixel format with an attached/referenced ICC
profile and lcms2 powered conversions would be used.

GEGLs image processing is intended to all operate in device
independent color spaces, no matter which camera you took a picture
with gaussian blurs, color adjustments etc, should behave the same.
For many operations RGBA float, linear light RGBA in 32bit floating
point is good. For other operations RaGaBaA float is good this being
the same as RGBA float but with pre-multiplied alpha, this is used
by most compositing operators. Some operations might prefer to operate
in (and generate) CIE Lab float buffers, like the color layer mode.
If the previous operation generated buffer data in the preferred
format of our current operation the conversion will be a no-op or babl
will fall back to a memcpy (in cases where direct access to underlying
tiles is not possible). The net-effect of this is that GEGL should
provide a color managed result that can ultimately be
converted/separated according to a target profile.

To force operation in a non-color managed, paint by numbers-mode you
would have to force the format of a buffer, casting a device-dependent
pixel format to RGBA float before the operations - and casting it
back to the device-dependent format after the device-dependent
processing is done.

-- 
«The future is already here. It's just not very evenly distributed»
                                                 -- William Gibson
http://pippin.gimp.org/                            http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Inkscape-devel] Cairo rendering proposal

2010-04-09 Thread Øyvind Kolås
2010/4/8 Krzysztof Kosiński tweenk...@gmail.com:
 On 4/7/10, Krzysztof Kosiński wrote:
 Here's my Cairo rendering proposal. I made it public so that all
 people can comment.


(linking to archived mail instead of full quoting original message)
http://article.gmane.org/gmane.comp.graphics.inkscape.devel/33871

To me this looks like a good approach for a cairo based renderer for
inkscape, since I maintain GEGL which could possibly considered an
alternative I'll post some thoughts on whether GEGLs rendering model
could possibly fit into inkscape. (Note, until the last paragraph I
list thing that are similar to what is needed, but at the moment
probably would be a much worse option than what you have outlined).
GEGL deals with many or most of the concerns of an interactive SVG
canvas. And at least the long term it should be an eligible candidate
for such SVG rendering (I've probably deleted an old naive SVG - GEGL
graph compiler I had lying around, as well as experiments with
stroking SVG paths with soft brushes and variable line widths).

GEGL already does various caching of intermediate rendered surfaces
and propagation of dirty rectangles in the compositing graph based on
graph re-arrangements/property changes. Rendering is at the moment
split into spatial regions that are processed sequentially (work is
slowly under way to paralellize this processing of rectangular
subregions with threads).

The biggest disadvantages I see with doing something primarily vector
focused using GEGL at the moment is that GEGL uses sparse tiled
buffers, which are not currently supported cairo, thus additional
copies are needed for vector rendering. The GEGL model is also
currently avoiding any possible in-place compositing of vectors and
thus ends up using more copies. The naive approach to convert an SVG
document to a GEGL graph also yielded various resampling artifacts as
shapes were rasterized prior to transforms being applied, this is an
issue that might be possible to work around by making all nodes in the
GEGL compositing graph have/be aware of transformation matrices that
apply, I have also entertained the idea of passing bezier paths
between nodes, allowing nodes in the graph to simply be 2geom
filters manipulating vector data similar to how raster data is
manipulated.

Replacing the full inkscape rendering with GEGL would probably not be
a good idea (long term, _I_ probably want to experiment with some such
hybrid non-SVG raster/vector authoring UI, with features such as
stroking with soft brushes, variable line widths, non SVG 1.2 filters
and more, so perhaps it will more sense at some point in the future).
Where GEGL and SVG overlap most is SVG 1.2 Filters, it would make
sense to use GeglBuffers ability to wrap other in-memory linear
buffers (like cairo image surfaces) and do such raster ops using GEGL.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://gegl.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Inkscape-devel] Cairo rendering proposal

2010-04-09 Thread Øyvind Kolås
On Fri, Apr 9, 2010 at 12:33 PM,  hend...@topoi.pooq.com wrote:
 On Fri, Apr 09, 2010 at 03:52:03PM +0100, Øyvind Kolås wrote:
 2010/4/8 Krzysztof Kosiński tweenk...@gmail.com:
  On 4/7/10, Krzysztof Kosiński wrote:
  Here's my Cairo rendering proposal. I made it public so that all
  people can comment.

 (linking to archived mail instead of full quoting original message)
 http://article.gmane.org/gmane.comp.graphics.inkscape.devel/33871

 To me this looks like a good approach for a cairo based renderer for
 inkscape, since I maintain GEGL which could possibly considered an
 alternative I'll post some thoughts on whether GEGLs rendering model
 could possibly fit into inkscape. (Note, until the last paragraph I
 list thing that are similar to what is needed, but at the moment
 probably would be a much worse option than what you have outlined).
 GEGL deals with many or most of the concerns of an interactive SVG
 canvas. And at least the long term it should be an eligible candidate
 for such SVG rendering (I've probably deleted an old naive SVG - GEGL
 graph compiler I had lying around, as well as experiments with
 stroking SVG paths with soft brushes and variable line widths).

 GEGL already does various caching of intermediate rendered surfaces
 and propagation of dirty rectangles in the compositing graph based on
 graph re-arrangements/property changes. Rendering is at the moment
 split into spatial regions that are processed sequentially (work is
 slowly under way to paralellize this processing of rectangular
 subregions with threads).

 A few years ago, Henk Boom did a google summer-of-code project to
 integrate svg rendering into the Gimp.  His code was placed on hold
 until enough bogs were fixed in the Gimp to make it prectical to add new
 features.  If people are starting to look at connecting Inkscape and
 Gegl, perhaps it's time to dust off his code and have a look at it.

I'm not sure.

GEGL already does more/other vector graphics than the vector layers
feature that was added in the GSOC, and in a manner that would seamlessly
intergrate with how effect-layers, GEGL based text layers and other
composition based enhancements will be done.

As I recall it, the vector layers as implemented in that branch feels
like a proof
of concept and the UI integration with the rest of GIMP is rather ad-hoc.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Some Questions about GEGL library

2010-03-30 Thread Øyvind Kolås
On Mon, Mar 29, 2010 at 4:58 PM, Nicolas Robidoux
nicolas.robid...@gmail.com wrote:
 Øyvind (and all):

 Long term development question:

 If one was to try to optimize gegl operations which involve resampling
 (image rotation, affine and perspective transformations), do you think
 this should be done on the GPU, or should be done, outside of the GPU,
 by exploiting SSE-type operations? Any other idea?

Note that multiple other ops will eventually also be using the
resampler infrastructure, at least when using C code, among these are
displacement maps, mirrors/kaleidoscope (already exist in git),
ripples/waves ported from GIMP, mapping to and from polar coordinates
and more.

It is likely that such transformations would, at least initially reuse
the texture resampling units found in the GPU and thus probably only
provide standard samplers.

 It is not obvious to me that the goal should be to port everything
 to the GPU. Is it obvious to you?

To get the benefits offered by the GPU, at least in a scenario where
texture data has to be migrated between the systems, any operations
that does not exist on the GPU will slow down GPU based acceleration,
potentially to the degree where benefits from using the GPU will be
lost.

The approach I think makes sense for GEGL is to allow ops to opt-in to
be able to do GPU processing. With the GSOC GPU branch GPU and CPU
usage of the same GeglBuffer is transparent and tiles are
automatically migrated from RAM to texture memory and back as needed.

 What parts of GEGL are more likely to benefit from having a GPU
 version? Least likely?

Image processing algorithms that are embarassingly parallel will
benefit from having GPU versions. This at least includes compositing,
with good caching in place it might be possible to do fast gpu
recomposition of cached subgraph results from slow/non-gpuable
renderings.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Some Questions about GEGL library

2010-03-28 Thread Øyvind Kolås
On Fri, Mar 26, 2010 at 7:37 PM, Rahmati Fateme ftm.rahm...@gmail.com wrote:
 Hello,
 I'm a master's student in computer science at Strasbourg university (France).

 I start working on a project related to GEGL library, my goal is to study how 
 to
 optimize operators' graph to reduce execution time.It would be nice if I 
 could
  have some information about the optimizations which are already implemented 
 in
 GEGL.

 I would be grateful if you can give me some informations about these 
 questions:

 1.   Is there any optimizations done on the graph in the last version of GEGL?

 For instance, one could think of several optimizations:

 ·    Precomputation of node compositions: If you apply several nodes maybe the
 composition of the nodes is computable and easier to compute.

 Lets say that we have two nodes increase lightness by 10 then increase
 lightness by -20, the graph could be automatically simplified to increase
 lightness by -10, is it already the case in GEGL ?

 Of course one could assume that the application which is using GEGL should not
 generate such graphs, but maybe for more complicated composition it would be
 easier to do it in GEGL. For instance, is the composiion of two gaussian blur
 another blur operation ? Another example could be to combine,  Lightness and
 Curves operations into a single Curves operation with different parameters.

Currently GEGL does not do any extensive optimizations on the graph
level, some operations make sure that when the given parameters are a
no-op the pixels are not touched but the original buffer passed
through (blurs with radius == 0.0, rotations, and scales or translates
with no change). The porter duff over (normal layer compositing) op
also optimizes to a passthrough when only one input buffer is
provided.

Consecutive affine operations (a scale and then a translate) is also
collapsed to be a single affine operation (avoiding the inherent loss
of multiple resamplings). This is handled within the affine ops by
making them all be subclasses of a common operation. Ideally this
would be extended in such a manner that GEGL would be able to
re-arrange all affine operations to happen only once, immediately
after loading the pixel data - this would reduce the number of
resamplings as well as reduce total processing time.

 ·    Precomputation of operators' graphs for several pictures: If you want to
 apply the same graphs to several pictures it could be nice if some
 precomputation is done on the graph before it is evaluated on all the 
 pictures.

 For instance, given a point operators f which performs the same operation on 
 the
 different channels of the image (r,g,b) (lightness, contrast, ...), if one is
 working with 8 bits pictures, one could precompute an array containing f(x) 
 for
 x in 0-255, and then using this same array for evaluating the graph on all 
 the
 pictures.

 Is it already the case in GEGL ?

GEGL has lazily initialized lookup tables that even work for floating
point, doing processing on 8bit image data is best avoided.

 ·    Evaluation in parallel of several nodes of the graph using OpenMP

There is an experimental multi processing configure option, the
paralellization is done by having separate threads compute separate
parts of the final render. There is no need to use OpenMP to achieve
this.

 ·    Evaluation of the nodes using GPU, I have read it was the subject of a
 Google summer of code, what is the current status of this ?

The result of last years summer of code was proof of concept code
allowing automatic migration of tiles for GeglBuffers between system
memory and GPU memory. Large gains can not be made until many ops
exist in a GPU version thus avoiding excessive migrations back and
forth.

 2.   How the operator's graph is maintained and how the nodes are saved?

 Can you also give me some references where I could find more related 
 information?

Please study the source code, for further questions please join the
irc channel #gegl on gimpnet (irc.gimp.org).

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] error message when executing gegl-paint

2009-11-13 Thread Øyvind Kolås
On Wed, Nov 11, 2009 at 4:42 PM, Øyvind Kolås islew...@gmail.com wrote:
 On Fri, Nov 6, 2009 at 6:11 PM, Tim Chen timc...@cs.nthu.edu.tw wrote:
 Today I pull babl / gegl clone from git
...
 However, when I tried running the gegl-paint in the example folder, a blank
 window poped up. And whenever I click on the window, I got error message :
...
 How should I fix this problem?

 The hardness property has been renamed stroke-hardness. Something else
 has broken elsewhere in GEGL at some point as well since fixing that
 still doesn't seem to cause any rendering to happen.

Both problems have been resolved now, and the example works again.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Passing parameter to sampler from XML file

2009-07-08 Thread Øyvind Kolås
On Wed, Jul 8, 2009 at 8:43 AM, Nicolas
Robidouxnrobid...@cs.laurentian.ca wrote:
 Suggestion implementing the s/nohalo family and the nohalobox family
 without an explicit, visible, parameter:

 Would it be possible/desirable to use the current code (which has a
 parameter) as some sort of template?

Sure, for most uses both developers and users will desire a default
sampler that just works and needs no tweaking. Additional properties
to configure some of the samplers will make it harder both for users
of GUIs as well as developers implementing or using operations that
use the samplers. Fewer presets that cover normal use cases is
probably better than many; this trimming down of the presets might be
done in GUI layers code as well.

The names for samplers would need some serious thought, linear, cubic
and lanczos in current GIMP is already too techical for many users,
most people would have no clue what box refers to in the suggested
names. When exposes as for instance a drop down in the GUI these names
need to be translatable into other languages as well.


-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Passing parameter to sampler from XML file

2009-07-08 Thread Øyvind Kolås
On Wed, Jul 8, 2009 at 1:08 PM, Nicolas
Robidouxnrobid...@cs.laurentian.ca wrote:
 PS

 Let me know if you'd rather I think about all this off list.

I dislike writing email, and you are almost using email like IRC, feel
free to continue but do not expect much response from me in particular
:d

/pippin


-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Passing parameter to sampler from XML file

2009-07-07 Thread Øyvind Kolås
On Tue, Jul 7, 2009 at 10:25 AM, Nicolas
Robidouxnrobid...@cs.laurentian.ca wrote:

 Adam Turcotte and Eric Daoust are implementing samplers (alternatives
 to nearest neighbour, bilinear, bicubic, lanczos... interpolation),
 names snohalo1 (tuned for upsampling) and nohalobox (tuned for
 downsampling), which both have a natural parameter.  This parameter is
 basically the amount of extra antialiasing which is applied. The way
 the extra antialiasing is done is with a customized blurring operator
 in the case of snohalo1, and by enlarging the integration box (like
 for exact area box filtering) for nohalobox.

 Adam is nearly done (fingers crossed) implementing the paramter so
 that it is settable through xml commands.

 My question:

 We've settled on the name blur for this paramter, because for most
 people this is the visible effect, and I think most people understand
 that blurring can be useful to smooth out jaggies.

 Would you guys prefer another name for this visible parameter?
 Antialiasing, for example, seems like a good candidate, although it
 sounds a little too technical to my taste.

I would feel more comfortable if this parameter was not exposed, but
rather that sane presets were added and given names. In most cases the
additional properties of for instance a displacement map operation
might be visual and conceptual clutter getting in the users way. When
it comes to naming it; I think perhaps smoothing is a good candidate.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Cache strategy

2009-06-16 Thread Øyvind Kolås
On Tue, Jun 16, 2009 at 8:58 AM, johannes hanikahana...@gmail.com wrote:
 this is handled well because changing the last operation in the graph
 will need the output of the previous one, thus incrementing the ``more
 recently used'' value of this one, preventing the important previous
 cache line from being swapped out.

 if this swaps out other important cache lines on the way, a mechanism to
 detect such a situation can be implemented (only changing parameters of
 the same op very often and quickly), such a thing is required for the
 history stack anyways, as it would also overflow.

 so i was thinking if maybe such a global (in the parent gegl node?),
 straight forward LRU cache with an appropriate hash could work for the
 tiles in GEGL as well (one tile = one cacheline, or one mip-map level of
 a tile = one cacheline..)? did you try it already? if so, how did it go?

Having caches for all nodes effectively implement what you suggest,
since the caches are just GeglBuffers and GeglBuffers that are unused
will end up having all their tiles in swap on disk.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Cache strategy

2009-06-16 Thread Øyvind Kolås
On Tue, Jun 16, 2009 at 11:11 AM, jcup...@gmail.com wrote:
 Another thing worth mentioning is that caches on every node doesn't
 scale well to concurrent evaluation of the graph since the evaluators
 would need to all the time synchronize usage of the caches, preventing
 nice scaling of performance as you use more CPU cores/CPUs.

 In most instances, this would only incur synchronization of a few
 tiles where the chunks/work regions overlaps. Unless you are stupid
 and compute with chunk-size~=tile-size the impact of this should be
 mostly neglible.

 You would still need a lock on the cache wouldn't you? For example, if
 the cache is held as a GHashTable of tiles, even if individual tiles
 are disjoint and not shared, you'll still need to lock the hash table
 before you can search it. A couple of locks on every tile on every
 node will hurt SMP scaling badly.

You do not need to make this be a global hashtable the way it is done
with GeglBuffers it would end up being one hashtable per node that has
a cache, not one cache for for all nodes. If I understood your concern
correctly it was about having a global lock that is locked. Also note
that GEGL does not use the tile-size for the computations, tile
dimensions are a concept that only belongs on the GeglBuffer level
that should be ignored when using the GeglBuffer API and at higher
levels of abstraction.


 For what it's worth, vips handles this by keeping caches
 thread-private. If threads are working in disjoint areas of the image,
 there's no benefit to a shared cache anyway. As you say, there will be
 a degree of recomputation for some operations (eg. convolution), but
 that's a small cost compared to lock/unlock.

 vips has two types of cache: a very small (just 1 or 2 tiles)
 thread-private cache on every image, and a large and complex shared
 cache operation that can be explicitly added to the graph. The GUI
 adds a cache operator automatically just after every operation that
 can output to the display, but you can use it elsewhere if you wish.

This type of cache is the cache that is currently in use in GEGL,
although it isnt an explicit member of the graph, but contained within
the preceding node (it is the sparse tiled buffer written to by the
operation contained in the node instead of allocating/recycling
temporary one-off buffers). The caches are GeglBuffers. Each
GeglBuffer (and thus cache) has a tile-cache as well that keeps
frequently used data from being swapped out to disk.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Cache strategy

2009-06-15 Thread Øyvind Kolås
On Mon, Jun 15, 2009 at 8:12 PM, Patrik Östmanpa.ost...@gmail.com wrote:
 node 1  to node 2. Are there any significant changes of cache
 handling done between 0.0.20 and 0.0.22 or are there a
 setting that must be turned on to get 'per node caches'
 functionality?

The caching policies and mechanisms in GEGL are still basic and rough.
At the moment the GeglOperationClass has a boolean no_cache member
that is checked. Which operation subclasses automatically do cache
have changed lately since the memory consumption of caching every
single node probably outweighs the benefits of caches for every single
node. In particular I think point operations now explicitly do not
cache their results.

Ive entertained the idea to use special nodes to indicate caches, but
that would to some extent muddle the graph. Perhaps a better solution
is to allow turning the caches on dynamically on demand and not only
define such hints in the class, the existing implementation should be
possible to bend in both ways.

 Another question: What is the difference between
 GEGL_BLIT_CACHE and GEGL_BLIT_DEFAULT flags of the
 'blit' function?

GEGL_BLIT_DEFAULT will not create a cache for the node but render
directly, using GEGL_BLIT_CACHE instead will create a cache that
results are rendered into and provided from, making subsequent
requests when properties and the graph has not changed be much faster.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL Perf tools - plan

2009-06-04 Thread Øyvind Kolås
On Thu, Jun 4, 2009 at 3:33 PM, Henrik Akesson h.m.akes...@gmail.com wrote:
 This is the moment to let me know for anyone who wants me to include a
 certain tool in the survey.

 I'm currently at:

 - gprof, sprof
 - valgrind (cachegrind, callgrind)
 - ltrace, ptrace
 - oprofile

GEGL itself contains built in instrumentation that allows breaking
down the time spent in pixel format conversions (babl) as well as the
different nodes of a composition. The small sample gallery at the
website used to be part of an automatic regression testing facility
operated by OSDL called crucible which did nightly builds and
performance/rendering regressions. See
http://www.gegl.org/gallery/clones.txt for examples of how this
infrastructure breaks down processing time.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] geglbuffer-add-image writes GeglBuffer to disk only after a gegl_buffer_flush()?

2009-06-03 Thread Øyvind Kolås
On Wed, Jun 3, 2009 at 8:45 PM, Giuseppe Rota rota.giuse...@gmail.com wrote:
 I got stuck with the geglbuffer-add-image example, though.
 I expected to find, after a successful run, a file (first argument)
 containing the serialization (or dump, if you will) of a GeglBuffer (I
 used data/surfer.png as input).
 That did not happen so I inserted a gegl_buffer_flush(buffer);
 instruction before the 2 g_object_unref near the end of the main().
 That did the trick, I now have a binary file with the serialization of
 a GeglBuffer (first 4 bytes are GEGL).
 This happens (on Linux) both with version 0.0.22 and with the HEAD svn
 version (both babl and gegl) (GIO enabled).

 Can you please explain the rationale behind this behaviour?

GeglBuffer currently lacks multi process support which it can (could?)
be enabled by patching GIO to allow simultanous read/write access from
different processes. With such extra tweaks I suspect that the example
would produce the desired output as written, this should be changed.

GeglBuffer was developed againt GIO it would have been better, and
will be better to mmap the file and share the tiles between processes
in that manner instead.

 On a unrelated note, what's the difference between gegl_buffer_load
 and gegl_buffer_open?

gegl_buffer_load  loads a on disk buffer into RAM, swapping into the
users swap directory for tiles that are not stored in memory.
gegl_buffer_open opens an existing on disk GeglBuffer using the buffer
itself for swapping.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] alignment of pixels with coordinates

2009-05-27 Thread Øyvind Kolås
On Thu, May 14, 2009 at 4:57 PM, Nicolas Robidoux
nrobid...@cs.laurentian.ca wrote:

 My working assumption is that GEGL should be as consistent as possible
 with GIMP.

 gegl/gegl/buffer/gegl-sampler-cubic.c, for example, contains the
 following code:

 --

 ...
 gegl_sampler_cubic_get (GeglSampler *self,
                        gdouble      x,
                        gdouble      y,
                        void        *output)
 {
  ...
  gint              dx,dy;
  ...
  dx = (gint) x;
  dy = (gint) y;
  sampler_bptr = gegl_sampler_get_ptr (self, dx, dy);
  ...

 --

 Ignoring the issue of the asymetric behavior of int casting when one
 crosses 0 vs the right boundary (see gegl-sampler-linear.c or
 gegl-sampler-sharp.c for a fix) I want to double check that pixels are
 understood to be centered at points with integer coordinates (for
 example (0,0) is a possible pixel location, but not (.5,.5) throughout
 GEGL and GIMP (excluding plug-ins, of course). If there are
 exceptions, are they relevant to resamplers and abyss policies?

 If there is a discrepancy between GEGL and GIMP, I will have Adam and
 Eric align GEGL with GIMP as much as possible.

I agree that the convention should be that pixel sampling sites are at
integer coordinates. I also feel it would be natural to let the extent
of a pixel be half way towards the neighbour pixel sites, this however
has the issue of not matching the display GIMP provides when zoomed
into the image.

At the moment the display code in GIMP assumes that we want to see big
pixels when zooming in and hence uses nearest neighbour interpolation
for zoom levels  100%. The pixels themselves are displayed as squares
that extend to the right and down from the pixel. This is useful for
some tasks, like for instance filling subpixel bezier curves based on
analytical geometric coverage.

GEGL might in the future also offer other resamplers for blitting /
display purposes, the best would of course be if all resamplers could
be plugged in and interchangeably used for different purposes, at the
moment the resampling that happens in gegl_node_blit does not use the
resamplers to do its job for the general cases it probably shouldn't
either since it needs to be as fast as possible.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Introduction to GEGL Buffers

2009-05-13 Thread Øyvind Kolås
On Wed, May 13, 2009 at 6:08 PM, utkarsh shukla utk.shu...@gmail.com wrote:
 So you are suggesting to parallelize the Gimp image operation means that
 multiple GEGL processes should run at the same time. So currently the GEGL
 has graph manipulation and then the rendering.
 I am not sure how you tried to split the rendering from graph manipulation.

By having a dedicated thread that does the actual processing work, and
reporting that results have finished rendering in the main thread
(which is with the application/GUI/graph manipulation code).

  Dou you mean to say that
 curretnly Gimp first processes the graph and then renders the whole of the
 image afterwards. So if I get a clear overview then what I feel that this
 thing is much different than the GPU thing as here the parallelization is
 needed at much higher level and just very below the Gimp interface infact on
 the interface the things should be parallel threaded. Am I correct??

Not quite sure I understand what you mean. The paralellization in GEGL
should occur within the existing API and be splitting up the workload
into paralell rendering tasks for different subregions of the output
image.

GEGL is a demand driven caching data-flow based rendering system.
First the graph is set up, nodes connected and properties set. Then
either a sink node is processed or more normally like in a GIMP use
case; a GeglProcessor is set up with a full region to be computed.
GEGL doesn't compute all data at once but splits the requested region
into rectangular chunks and processes these chunks in paralell. As
chunks are computed GEGL signals will be emitted on the node reporting
which areas have been computed. Behind the scenes a GeglProcessor
could be doing it's real work in a thread, or even create multiple
GeglProcessors that operate on separate parts of the output in
paralell. Going beyond this, with buffers shared between processes and
hosts it should be possible to extend the processing even further.
After this GSOC I hope to have the means to have a unified memory
architecture for GeglBuffers, at that stage GEGL could perhaps even do
portions of the processing and|or compositing on the GPU (IO will be a
concern in this case).

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Introduction to GEGL Buffers

2009-05-12 Thread Øyvind Kolås
On Tue, May 12, 2009 at 3:50 PM, Nicolas Robidoux
nrobid...@cs.laurentian.ca wrote:
 I'm not making promises on the following (given that they are not part
 of the original GSoC) but they are related to Adam and Eric GSoCs, but
 it would make sense to have them have a look at the following (I may
 give more programming help with the resampler parts to free them for
 what's below):

   - Detect when a tile is set to be a solid block of the background color,
     and make the tiled shared with the empty tile.
   - Detect uniformly colored and perhaps other types of tiles and store
     them more compactly, perhaps even just compressing tile contents and
     share duplicate tiles detected through hashing of their compressed data.

I forgot to add one more item to my list of potential/desired
enhancements of GeglBuffer and that is to make the extent (width and
heights) of the buffer be updated on demand when tiles are changed,
allowing automatically growing buffers that are auto-clipped to the
bounding box of content that differs from the configured background
color.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Introduction to GEGL Buffers

2009-05-12 Thread Øyvind Kolås
On Tue, May 12, 2009 at 9:55 PM, utkarsh shukla utk.shu...@gmail.com wrote:
 hi,
 Actually I am not a GSOC student but I was very much interested in writing
 some code or some patch for gimp. Please guide me in case you feel I can be
 of bit help.

I am not a mentor in the summer of code but I am interested in GEGL
becoming a powerful framework for both using and developing image
processing algorithms. I welcome you to discuss and help implement and
improve any part of GEGL. You've got knowledge of relevant
technologies like OpenGL, GLSL as well as development in general and
can be valuable in guidance on prototype code and ideas as that
project gets off the ground.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GPU support

2009-05-11 Thread Øyvind Kolås
On Mon, May 11, 2009 at 7:49 PM, Richard H. for...@gimpusers.com wrote:
 Hello,

Implementing multi-threading in GEGL is out of my scope and I'm not
even sure if it's in GEGL's scope.

 I understand that as your project's task is adding OpenGL support. In my
 opinion, multi-CPU support would be more important, but that is of course
 another big task/project.

GEGL has been designed to have an API that will allows using it
without concern of whether it internally is single threaded (like its
current incarnation), threaded, multi-process, multi-host or
multi-process with parallel tasks driving GeglProcessors for different
subregions, or perhaps even with the workload divided in a stream
processing like manner.

 GEGL is pretty low-level and
threading can be implemented on top of GEGL by the relevant client
(i.e. GIMP).

Nope,. see above.

 My work will be concerned with accelerating pixel-level operations by
parallelizing each pixel operation in the GPU.  The key in my work is
that all pixel operations should (theoretically) work in parallel.

 That would indeed be very nice to have.

A GPU based backend should be possible to integrate with some of the
above outlined possible approaches of dividing labour, ideally it
would be possible to use GEGL and let GEGL itself figured out how to
best make use computational resources available.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL 0.0.22

2008-12-31 Thread Øyvind Kolås
GEGL 0.0.22
⎺⎺⎺
GEGL (Generic Graphics Library) is a graph based image processing framework.

GEGL provides infrastructure to do demand driven, cached, non destructive image
editing of larger than RAM rasters. Through babl it provides support for a wide
range of color models and pixel storage formats for input and output.

This is a release introduces a feature freeze the current feature set
perhaps with some
features will become the basis for the first 0.1.0 release, the APIs
which will receive
some changes (removal of feature) is GeglPath, apart from that most of
the current API
seems to be sufficient for a quite wide range of uses. After the
introduction of
gegl_node_add_child and gegl_node_remove_child calls
gegl_node_adopt_child call might be removed. Please note that
documentation of unstable APIs is not complete.

Happy new year.

/pippin

Changes in this release
⎺⎺⎺
 • GeglOperation
   • operation names are now prefixed, the ops in GEGL use 'gegl:' as prefix.
   • gegl:opacity - combine value and aux mask input when both are available.
   • gegl:src-in - deal correctly with extens.
   • gegl:path - new op covering the stroke/fill needs of SVG.
   • deprecated gegl:shift, the affine familiy of operations now
 uses the same fast code paths for integer translations.
 • GeglBuffer
   • Profiling motivated speed ups in data reading/writing.
   • Remove left-over swapfiles from dead processes at startup.
 • GeglNode
   • made gegl_node_add_child and gegl_node_remove_child public API. (#507298)
 • GeglPath
   Vector path representation infrastructure, supporting poly lines and beziers
   by default, the infrastructure allows extensions from applications with
   other curve types (smooth curves, spiro curves and others.).

The improvements in GEGL in this release brought to you by:
  Hubert Figuiere, Sven Neumann, Øyvind Kolås, Michael Natterer,
  Kevin Cozens, Sam Hocevar, Martin Nordholts, Manish Singh,
  Étienne Bersac and Michael Schumacher.


Where to get GEGL
⎺
GEGL and it's dependencies babl and glib can be fetched from:

ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.22.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.22.tar.bz2
ftp://ftp.gtk.org/pub/glib/2.18/glib-2.18.1.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
9de50fb5833f41691f50f6e735d6422aad52ea94  babl-0.0.22.tar.bz2
de684d4c8d9eaa9b7e283c55c5f779e5bdabee78  gegl-0.0.22.tar.bz2
d34a30cfccc8322dfe4198d26cf6bfc0210f141b  glib-2.18.1.tar.bz2

Where to get more information about GEGL

More information about GEGL can be found at the GEGL website
http://www.gegl.org/

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] tile size in filters

2008-10-24 Thread Øyvind Kolås
On Mon, Oct 20, 2008 at 3:56 PM, Dierk Fröhling [EMAIL PROTECTED] wrote:
 Hans Petter Jansson wrote:
 On Thu, 2008-10-09 at 11:08 +0200, Dierk Fröhling wrote:

 I need to handle all pixels of an image in one tile for my new filter.
 The problem is that every pixel in the filtered image should depend on
 values from all other pixels...
..
 I wrote a color reduction filter that does Floyd-Steinberg dithering,
 where each pixel depends on all previous pixels (the bottom-right pixel
 depends on the entire image). It should be among the workshop filters.
 Maybe that'd be useful to look at.

 This worked up to a certain size of images - but with an image with 3112
 x 4200 pixels I get this message from gegl:

 ** Message: unable to write tile data to self: No space left on device
 (-1/131072 bytes written)

 There is enough space in my /tmp directory and all other possible
 working directories for gegl - 2GB of memory should be enough as well...
 It's not that my filter won't work at all with these big images - but
 only in parts. It seems that gegl splits it into tiles again...

The place that GEGL probably tries to swap is ~/.gegl/swap I'm not
sure what is going on here. Does this happen with the color reduction
filter as well? Please open a bug
so we can track this issue, perhaps even with an example XML file
provoking the issue (perhaps using fractal-explorer as source data or
some similar synthethic buffer as input.)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL 0.0.20

2008-10-05 Thread Øyvind Kolås
GEGL 0.0.20
⎺⎺⎺
GEGL (Generic Graphics Library) is a graph based image processing framework.

GEGL provides infratructure to do demand driven, cached, non destructive image
editing of larger than RAM rasters. Through babl it provides support for a wide
range of color models and pixel storage formats for input and output.

Changes in this release
⎺⎺⎺
 • Build and code clean ups and fixes.
 • RAW loader using libopenraw.
 • GeglBuffer
   • Linear buffer support, amongst other things enabling GeglBuffer API access
 to external linear buffers in memory.
   • Reworked samplers using a shared caching neighbourhood infrastructure.
   • YAFR - a new resampler contributed by Nicolas Robidoux.
 • GeglOperations
   • Marked user visible strings for translation.
   • Added a fill operation (might be a bit fragile) that allows rendering
 SVG like paths backed by a GeglVector.

The improvements in GEGL in this release brought to you by:

  Martin Nordholts, Øyvind Kolås, Sam Hocevar, Manish Singh, Hubert Figuiere,
  Sven Neumann, yahvuu at gmail.com and Michael Natterer.

Where to get GEGL
⎺
GEGL and it's dependencies babl and glib can be fetched from:

ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.22.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.20.tar.bz2
ftp://ftp.gtk.org/pub/glib/2.18/glib-2.18.1.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
9de50fb5833f41691f50f6e735d6422aad52ea94  babl-0.0.22.tar.bz2
37be399b58d50a87134f2dfad389a476e1155874  gegl-0.0.20.tar.bz2
d34a30cfccc8322dfe4198d26cf6bfc0210f141b  glib-2.18.1.tar.bz2

Where to get more information about GEGL

Information about GEGL can be found at the GEGL website http://www.gegl.org/
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] How to get bounding box from inside a sampler

2008-09-19 Thread Øyvind Kolås
On Sat, Sep 20, 2008 at 3:41 AM, Nicolas Robidoux
[EMAIL PROTECTED] wrote:

 Hello all:

 This question will make clear that I don't understand c++.

 Suppose that, in the code for, say,
 gegl/gegl/buffer/gegl-sampler-cubic.c, I want to use information about
 the bounding box of the input data.

 More precisely:

 I (believe that) I already know that the relevant pixel values start
 at indices 0,0. Requested values to the left and above those are
 created by the (currently 0,0,0,0) abyss policy.  Which is to say that
 0 and 0 are the smallest x and y for which I have real data.

Not true, the valid pixel values can be in any rectangular sub region of the
buffer, negative values should also be supported. GeglBuffer supports
dynamically growing (will be useful for GIMP having auto-growing layers when
painting.)

 What I want to know is the width and height (in pixels) the area with
 valid pixel values.

 This is almost the same as:

 I want to know the lowest positive indices at which the abyss policy
 kicks in.

 Which is almost the same as:

 What is the index of the rightmost/lowest pixel with real data
 associated to it.

From within the sampler you cannot really know the extent of the buffer being
handled. It would often be a rectangular sub-buffer of the real buffer
so you cannot
check the extent of the buffer being sampled from.

One way to achieve the desired behavior from a sampler is to pass the extent
of the rectangle in when using the sampler. This could then be done from bits
of the code that knows what extents to use. Haven't thought about how to add
or change API to well accommodate such a need.

For most cases though I think that extending GeglBuffer to support more abyss
models like mirror and smear as well as constant value of different kinds would
allow simplifying the code needed for many samplers.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Is there a reason why -ffast-math is not included in the CFLAGS?

2008-09-16 Thread Øyvind Kolås
On Tue, Sep 16, 2008 at 10:09 PM, Nicolas Robidoux
[EMAIL PROTECTED] wrote:
 At least on my machine (recent Intel Ubuntu laptop), it makes a small,
 but noticeable, difference.

 Why not include it? I doubt very much that any of us is doing
 something which depends too closely on exactly how floating point is
 done. I certainly trust that the samplers will not be affected (maybe
 nearest neighbour, but nitpicking about a discontinuous method...).

 In the gegl/gegl/buffer Makefile, for example:

 CFLAGS = -g -DGEGL_ENABLE_DEBUG -g -O2 -Wall -Wdeclaration-after-statement 
 -Wmissing-prototypes -Wmissing-declarations -Winit-self -Wpointer-arith 
 -Wold-style-definition -mmmx -msse

It probably doesn't harm, though I do not know in which circumstances it would
matter either. If it doesn't cause any problems it could probably be
added to the
build system.

/Øyvind K.
--
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Optimisations

2008-09-14 Thread Øyvind Kolås
On Sun, Sep 14, 2008 at 5:01 PM, Henrik Akesson [EMAIL PROTECTED] wrote:
 Hi,

 This is the first time I write on this list, so I'll introduce myself
 briefly:

 I've been working/developing for the european space industry for 7
 years, but have decided that I want to do SW research, which is why
 I'm currently doing a Master (to be followed by a PhD).

 During this MSc I'm specialising in parallelism.

 The second half of this master, (first half of 2009) is a research
 project. This will be on the subject of optimising image treatment
 algorithms using different parallel languages/addons such as :
 - CUDA
 - AMD Stream
 - OpenMP
 - MPI
 - the Barcelona Supercomputing Center's Cell/SMP Superscalar

 So, now to the point: I'd like to know if you would find it useful if
 I do and contribute this work on algoritms in GEGL?

At the moment GEGL is not paralellised beyond usage of SIMD instructions.
The usage of SIMD instructions follows the add-on like approach that
you suggest,
this is currently done by having GEGL switch to different implementations of the
core algorithms. A runtime regression testing framework for different
implementations
based on the readable C version is on the wish list for GEGL.

With the public API of GEGL as stable as it is now, it would be
possible for you to create
an API compatible fork of GEGL where you significantly changed how it
worked internally
as well, doing perhaps a subset of what GEGL can do built around other
ways of traversing
the data when rendering it. I can imagine such an approach could be
potentially easier to
implement some possible ways of parallellising GEGL.

The planned approach is to use existing divide and conquer for
dividing the rendering task,
and it's dependency graph computation as currently used to segment the
work when GEGL is
rendering result pixels. Different parts of the final result would be
distributed to rendering slaves
that would be doing the computation for the controlling process. The
slaves are planned to be
either on the same machine or on the network. The rendering host will
be able to share it's open
GeglBuffers with processes on the same machine or even over the
network. The slaves will
be given graphs of nodes to render that have the rendering hosts
GeglBuffers as sources and
destinations for rendered data. IO of pixel data will be a potential
bottleneck. The way it is planned done
is by extending the tiled buffer storage backend to work over the
network. (Proof of concept of sharing the same GeglBuffer objects for
local processes through a shared swap file is already implemented.)


 Would you have any restrictions on which technologies to use
 (availability of open source compiler/runtime, size etc...) ?

As long as additional dependencies are optional and are freely
available for download and compatible
with GEGLs existing licensing, good code contributions are always welcome.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Speeding up/documenting the gegl code

2008-09-13 Thread Øyvind Kolås
On Sat, Sep 13, 2008 at 1:49 PM, Sven Neumann [EMAIL PROTECTED] wrote:
 Hi,

 On Sat, 2008-09-13 at 08:41 -0400, Nicolas Robidoux wrote:

 One thing which I would not mind seeing throughout the gegl code is the 
 systematic use of the const keyword.

 We will happily accept patches that introduce more constness. Pippin, do
 you agree?

Yes, more usage of const is a good thing. I think most of the public
API has const
arguments in the places where it should be, omissions there would be most
important to get fixed. For the internals cleaning up the code will
aid the future
refactoring and make development of new features like parallel processing
easier.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] libopenraw support

2008-08-16 Thread Øyvind Kolås
On Fri, Aug 1, 2008 at 2:44 AM, Hubert Figuiere [EMAIL PROTECTED] wrote:
 Here is my patch to provide (optional) libopenraw support to GEGL.

 Is it OK to commit?

Feel free.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] [Gimp-user] Is CMYK off the table for Gimp?

2008-06-30 Thread Øyvind Kolås
On Mon, Jun 30, 2008 at 12:29 PM, Øyvind Kolås [EMAIL PROTECTED] wrote:
 I am happy with GEGLs current limited focus on three-dimensional (plus
 alpha) color models, this might be expanded with something resembling
 spot colors, for z-buffers from 3d renders for use in compositing, as
 well as native support for multi-spectral pixels if I find the need.
 Native CMYK compositing and processing is something I consider to be
 of little benefit to most and of minimal interest to myself, thus I am
 unlikely to spend much time on it.

Just to add a note, this wouldn't stop someone from modifying GEGL to
be capable of having a set of CMYK processing operations, or alternate
code paths for dealing with CMYK buffers in existing operations. If
done correctly without intruding much on the existing code - patches
that implement the missing functionality would be welcome.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Area filters

2008-06-27 Thread Øyvind Kolås
On Thu, Jun 26, 2008 at 4:33 PM, yahvuu [EMAIL PROTECTED] wrote:
 On Thu, Jun 26, 2008 at 2:31 PM, Øyvind Kolås [EMAIL PROTECTED] wrote:
 Anyhow, implementing these filters as new operations solves the problem
 for now. Having two kinds of gaussian blur seems awkward at first, but
 it is a user choice which edges to blur and not GEGL's.
 The filter pairs can be merged later on by implementing
 one as a meta operation of the other or simply by an
 option property like preserve bounding box.

 I'll derive the new filters from GeglOperationEdgedAreaFilter if
 no better naming comes up. For the filters probably:
 gaussian-blur-edged,
 box-blur-edged

It is much better to extend GeglBuffer to have an abyss policy, this
means that requests for pixels outside
the define area gets read back as if they were smeared/mirrored (or
like now all 0). After this the gaussian blur could be changed to not
expand it's result rectangle beyond the original input, and still use
the current easily managable code paths for the actual filtering.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Area filters

2008-06-27 Thread Øyvind Kolås
On Fri, Jun 27, 2008 at 10:31 AM, yahvuu [EMAIL PROTECTED] wrote:
 handling the bounding box inside the filter is kind of a PITA, yes.
 But anything else will be a rough approximation (at least for blur filters).
 I feel it somewhat contradicting to utilize floating point arithmetic for the
 calculation of low quality results.

I do not see how allowing to specify that pixels outside the defined
rectangle for a buffer by
definition is for instance the smeared out values (or the mirrored
values) of the defined content
would yield a different result from handling this inside the operation itself.

Doing it this way keeps the blur operations clean and simple and moves
the complexity down in the abstraction layers.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] New GEGL logo

2008-06-26 Thread Øyvind Kolås
A new GEGL logo has been created by me with help and advice from others.
This mail sent out also to test whether the mailing list has become unclogged
after recent problems.

/Øyvind K
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
attachment: GEGL.png___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL-0.0.18 released

2008-06-14 Thread Øyvind Kolås
GEGL 0.0.18
⎺⎺⎺
GEGL (Generic Graphics Library) is a graph based image processing framework.

GEGL provides infrastructure to do demand based cached non destructive image
editing on larger than RAM buffers. Through babl it provides support for a
wide range of color models and pixel storage formats for input and output.

This development release will include optimizations for the cpu capabilities
of the host system. Pass --disable-mmx and --disable-sse to configure to
disable these when building packages that should work on a wider range of
hardware. Making GEGL adapt at runtime is a blocker for the next release.

There is no new API in this release thus bindings do not need to be updated.

Changes in this release
⎺⎺⎺
 • Configuration both from commandline arguments and at runtime.
 • GeglBuffer
   • New raw tiled raster file format, used both as swap and stored buffers.
   • Sharing between processes through synced swap.
   • Babl powered scan iteration infrastructure for efficient access.
   • Cubic and lanczos samplers re-enabled.
 • Operations
   • Use scan iterator for point-filter, point-composer and point-render base
 classes internally for minimal amount of copies.
   • Optimized variants of some point and compositing operations
 reimplemented using a new data type /g4float/ that allows writing cpu
 agnostic vectorized code for GCC.
   • New temporal filter base class, for operations operating on color values
 from neighbouring frames in a video stream.
   • Autogenerated operation reference installed for use with devhelp.
   • New operations: write-buffer, v4l, color-temperature.


A new release of babl is also available for the quickest operations GEGL work
best with babl-0.0.22 or newer.

This release appears due to contributions from:

  Øyvind Kolås, Kevin Cozens, Sven Neumann, Manish Singh, Martin Nordholts,
  Étienne Bersac, Hans Petter Jansson, Jan Heller, dmacks at netspace.org,
  Sven Anders, Hubert Figuiere and Geert Jordaens.

Where to get GEGL
⎺
GEGL and it's dependencies babl and glib can be fetched from:

ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.22.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.18.tar.bz2
ftp://ftp.gimp.org/pub/glib/2.14/glib-2.14.5.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
9de50fb5833f41691f50f6e735d6422aad52ea94  babl-0.0.22.tar.bz2
f8113ad33161337eb107ad84c0ac968dca1d02d2  gegl-0.0.18.tar.bz2
d8ae9dcb744ebfcb23809c3c552f4d724cb2458c  glib-2.14.5.tar.bz2

Where to get more information about GEGL

Information about GEGL can be found at the GEGL website http://www.gegl.org/

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL XML library

2008-05-27 Thread Øyvind Kolås
On Tue, May 27, 2008 at 11:52 AM, Ferran Basora [EMAIL PROTECTED] wrote:




 On Tue, May 27, 2008 at 11:56 AM, Øyvind Kolås [EMAIL PROTECTED] wrote:

 On Tue, May 27, 2008 at 9:09 AM, Ferran Basora [EMAIL PROTECTED]
 wrote:
  Hello,
 
  I have been watching the code about reading and generation of XML in
  GEGL. I
  think it is obsolete and pour extensible.

 This code should not be extended much, if at all, it should perhaps be
 cleaned up, but that also pends on reaching agreement/consensus on the
 OpenRaster specification at freedesktop. Right now the current code
 serves the purpose and it is not meant to be extended much even when
 reshaped to be more inline with the OpenRaster plans.

 We may not have to extend the code but clean.

This cleaning could just as well take place without adding a huge
external dependency, after all serialization to an XML format as well
as loading it is quite far outside the core functionality of GEGL and
might be suited for frameworks, libraries or applications on top.

 As you say we have to wait for a final specification of
 OpenRaster format, but is propable that OpenRaster format
 will be a structure in XML, as OpenDocument.
 For this reason GEGL will need an interface to load OpenRaster format
 from an XML. I do not see feasible to remove completely
 all the XML functionality.

It shold be possible to implement all of the XML funcitonality using
the other API and thus make the XML handling be an external library,
perhaps called gegl-openraster or similar, for such a library a
dependency on an external XML handling framework makes more sense. For
internal XML need for GEGL (meta operations for instance), GMarkup
which is currently used is sufficient.

Waiting for a final specification of OpenRaster doesn't make sense, we
need to prototype things and check out how much of what has been
created would be possible to push into OpenRaster, open raster is in
part specified due to how the XML handling is done/being planned to
potentially be done in GEGL.

GEGL never has promised to handle OpenRaster in any way, and the API
documentation warns that the current XML is a stopgap measure that
might be radically changed. OpenRaster is probably too domain specific
since it might be difficult to push for instance the more video
editing and compositing like things people would want to do with GEGL
(ref http://pippin.gimp.org/oxide/) which is a precursor/inspiration
for OpenRaster, that extends the scope to animations and sequences of
clips.

Going down a route of making the OpenRaster/tree based XML less
prominent in GEGL is probably sane since the pure internal
representation of GEGL does not use trees. A more free form XML for
describing the graph for use with the meta operation as well might
replace all of the existing XML.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL XML library

2008-05-27 Thread Øyvind Kolås
On Tue, May 27, 2008 at 9:09 AM, Ferran Basora [EMAIL PROTECTED] wrote:
 Hello,

 I have been watching the code about reading and generation of XML in GEGL. I
 think it is obsolete and pour extensible.

This code should not be extended much, if at all, it should perhaps be
cleaned up, but that also pends on reaching agreement/consensus on the
OpenRaster specification at freedesktop. Right now the current code
serves the purpose and it is not meant to be extended much even when
reshaped to be more inline with the OpenRaster plans.

One of the things that is pending with regard to the XML format is
finding a way to make the meta operations be described as XML instead
of C, this should also be easily doable continuing to use gmarkup
(this might be unrelated to OpenRaster, or might be something that
could be folded into the set of things specified there.)

I would like to see a significant advantage over the current parsing
approach for dragging in an external library. For the serialization
(generation of XML) I doubt that other approaches would yield any
siginificantly saner code. It might even be better to completely
remove all XML based functionality than to add a new dependency on an
external library.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Patch: GIO dependency made optionnal

2008-05-18 Thread Øyvind Kolås
On Sat, May 17, 2008 at 11:59 PM, Geert Jordaens
[EMAIL PROTECTED] wrote:
 Is what you are trying to do for gegl_buffer not possible with  the
 GIOChannel?
 http://library.gnome.org/devel/glib/2.12/glib-IO-Channels.html#GIOChannel

It probably is, but I would like to use one API to do this, namely the
GIO API and start out with a GFile. I guess the port to GIO was
premature, since this part of the code at some point might want to do
quite a lot of it's work using mmap instead of reads/writes as well.

Using GIO on the other hand would be very sweet if it worked.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Patch: GIO dependency made optionnal

2008-05-17 Thread Øyvind Kolås
On Sat, May 17, 2008 at 9:22 PM, Hubert Figuiere [EMAIL PROTECTED] wrote:
 Here is my initial patch for GEGL to make gio an optional dependency for
 those who run an already obsolete version of glib.

This isn't only about obsolete versions of glib since there is no
version having a GIO
supporting all the features GeglBuffer would want it to, see bug
#533547. Thus unless
this gets resolved in glib we might have to fall back to regular posix
calls anyways.

 The only non-trivial part is GFileMonitor, and I actually scraped that
 part.

Could be reimplemented using polling, or perhaps even better using
mmap for at least the buffer header.

 Also another caveat is that I had to change the prototype of two
 functions that wanted a GInputStream *.

These are internal for now so it isn't an issue.

 Any comment?

Commit this change at will to GEGL when you think it has recevied enough polish.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] speeding up GEGL operations in GIMP

2008-05-17 Thread Øyvind Kolås
On Wed, May 14, 2008 at 8:14 AM, Sven Neumann [EMAIL PROTECTED] wrote:
 currently the GEGL operations in GIMP are very slow. I have done some
 basic profiling yesterday and it appears that the main problem is the
 conversion from floating point to 8bit. Here is where the most time is
 being spent. So it doesn't really make much sense to optimize the
 operations in GIMP or the point filters in GEGL. We need to look at the
 babl conversions first.

Some of the extra overhead spent in the GeglOperationPointFilter base
class has now been optimized away in a fast code path. The new code
paths is markedly faster.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] gdb messages

2008-05-16 Thread Øyvind Kolås
On Tue, May 13, 2008 at 5:37 PM, Zhang Junbo [EMAIL PROTECTED] wrote:
 Hi,

 I'm just starting to write my code for gegl, I spent the whole day to
 debug but failed. My code(svn 2287) can be found on
 http://svn.gnome.org/viewvc/gegl/branches/branch_zhangjb/ . Here is
 some messages from gdb.

The reason the code segfaults is that you are passing buffer of 32bit
floating point to a function in the underlying library that expects
64bit floating point. The attached patch creates the needed pixel
formats to represent 64bit buffers since babl doesn't know this format
yet.

The format could have been created with:

babl_format_new (
name, RGB double,
babl_model(RGB),
babl_type (double),
babl_component (R),
babl_component (G),
babl_component (B),
NULL);

and then referred to, I chose to just create it directly without
giving it a name.

If the fftw library has functions working on 32bit buffers it might be
more suited
for integration, if not I guess we just have to live with these larger buffers.

I've attached a patch that makes the operation operate in 64bit like
the function used.

/Øyvind K.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/


dftdiff
Description: Binary data
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Color temperature correction GeglOperation

2008-04-26 Thread Øyvind Kolås
On Fri, Apr 25, 2008 at 6:52 PM, Jan Heller [EMAIL PROTECTED] wrote:

 I wrote it to better familiarize myself with
 Gegl and I am posting it here in hope it will be useful for
 others.

I think it is a good operation to have, so I have commited a slightly
modified version to svn.

GEGL and babl deals with the out of gamut handling themselves at a
later stage, during processing we preserve headroom and footroom. This
allows us to change the contrast of the image to bring details back in
later. The implemented gamut handling also seemed to introduce banding
that  the conversions in babl does not.

It would also be nice to replace the planckian locus lookup table with
a function that approximates it.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Scanline processing in a GeglOperation

2008-04-23 Thread Øyvind Kolås
On Tue, Apr 22, 2008 at 7:59 AM, Hans Petter Jansson [EMAIL PROTECTED] wrote:
 On Mon, 2008-04-21 at 20:36 +0100, Øyvind Kolås wrote:

  http://hpjansson.org/temp/meadow-dithered.png

  The picture has one bit per channel for a total of 8 colors, making it a
  true retro experience. From left to right -- original, thresholding,
  Bayer, F-S, covariant random and random dithering.

This might indeed be useful at some point, but right now I do not think the
GEGL architecture is flexible enough to warrant compilation and installation
by default. Thus I will drop this .c file into the workshop directory where
various works in progress reside. It is possible to write specialized ops
that would read the RGBA u16 and output the required file. (Using
R'G'B'A u16) would probably give slightly better results assuming the
displays and data involved are roughly sRGB data.

A plan for supporting pallettized images is forming somwhere on the
horizon for GEGL. It would probably involve a specialized babl format and
the ability to attache a floating point RGBA pallette to the format.
Another similar
issue for babl is that it isn't currently capable of generating pixels
for formats where
the components are not a multiple of 8, it is due to these short comings in GEGL
I've placed color-reduction in the workshop for now.

For some ramblings about indexed/palettized images take a look at:
http://codecave.org/?weblog_id=indexed_metamers

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] compile failed with GCC4.0

2008-04-21 Thread Øyvind Kolås
On Mon, Apr 21, 2008 at 12:58 PM, lode leroy [EMAIL PROTECTED] wrote:
 (sorry, my previous mail was too fast...)

Please svn up, should work in svn trunk now, I've changed the
USE_GCC_VECTORS define to be possible to check with both #if and
#ifdef. (I think this should work at least)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Scanline processing in a GeglOperation

2008-04-21 Thread Øyvind Kolås
On Mon, Apr 21, 2008 at 7:51 PM, Hans Petter Jansson [EMAIL PROTECTED] wrote:
 On Mon, 2008-04-21 at 16:43 +0100, Øyvind Kolås wrote:
   On Mon, Apr 21, 2008 at 11:18 AM, Øyvind Kolås [EMAIL PROTECTED] wrote:

 Thus to correctly implement floyd steinberg you would actually have to
 request the processing of the entire image and not piece by piece thus
 losing the ability to handle larger than RAM images.

   This isn't entirely true as you can fetch and store individual
   scanlines when reading/writing from the involved GeglBuffers as the op
   is processing for the entire image, nevertheless such an op would need
   the entire image as source data to update the bottomrightmost pixel.
   And it would make future scheduling and paralellization of graphs
   involving such ops much harder than needed.

  Yeah, that's what I thought. But insofar as my implementation is
  concerned, I don't care about speed, as long as it can be done.

You need to do the following:

static GeglRectangle
get_required_for_output (GeglOperation*operation,
 const gchar *input_pad,
 const GeglRectangle *roi)
{
  /* request that we have the entire bounding box to operate on */
  return *gegl_operation_source_get_bounding_box (operation, input);
}

static GeglRectangle
get_cached_region (GeglOperation   *operation,
   const GeglRectangle *roi)
{
  /* request that all of the op should be cached for this request */
  return *gegl_operation_source_get_bounding_box (operation, input);
}

As well as setting the corresponding methods on the
GeglOperationClass, see other operations for examples.

At this stage:

The input and output regions requested for processing
should be the same and you can start reading/writing linear
rectangular subregions to the input buffer as well as writing results
to the output buffer. You could at this stage choose to do the entire
buffer in one chunk, this is where an intelligent implementation
allows to still work on larger than RAM images, while a stupid one
needs the entire memory temporarily in memory as a linear buffer.

  So I guess the question is: How do I request processing of the entire
  image, on a row by row basis?

If you look at the stretch contrast operation it is operating on a
line by line basis when it is doing the actual stretching (it is slow
though and allocates a huge linear buffer for the min/max detection
instead of doing it in chunks).

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] BABL path vs. reference fish

2008-04-13 Thread Øyvind Kolås
On Sat, Apr 12, 2008 at 3:53 PM, Jan Heller [EMAIL PROTECTED] wrote:
   attached is a path that introduces logic to disallow
   creation of a fish path that is actually slower than
   appropriate reference fish.

Thank you for yet another contribution further cleaning up babl, the
patch has been applied.

One issue in babl's current design is that other activity on the
system at the same time as measuring is performed can skew results
quite a lot for a given conversion, not sure if there is a good way to
deal with this at runtime though.

/Øyvind K.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] BABL fishing patch

2008-04-08 Thread Øyvind Kolås
On Mon, Apr 7, 2008 at 5:31 PM, Jan Heller [EMAIL PROTECTED] wrote:
   attached is a patch that improves logic of go_fishing code
   in babl-fish.c. The current code searches list of all
   fishes while looking for suitable preexistent
   BABL_FISH_PATH instance. The new code only searches
   relevant part of database's hash table. Further, the
   current code searches for fish path every time such a babl
   fish is requested, even though the same fish path has been
   requested before and not found. The new code creates dummy
   BABL_FISH instance with appropriate source/destination
   formats and inserts it into the fish database to indicate
   that fish path has been searched for and not found. See
   comments in the patch for details.

One thing you could do to improve the process of applying your already
excellent patches for babl is to provide a draft ChangeLog entry as
well. If you continue at this pace we might have to start working on
getting you commit access to the svn repository.

Thanks a lot for the good work thus far.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] BABL list API patch

2008-04-01 Thread Øyvind Kolås
On Tue, Apr 1, 2008 at 8:13 PM, Jan Heller [EMAIL PROTECTED] wrote:
   attached is a patch that introduces minimal changes needed
   for removal of the old list routines. It ports several
   lists to the new API and deletes the unused old functions.

The patch has been applied.

   There are still several plain C arrays in the code used as lists,
   however, these do not depend on the old routines and are
   left untouched by the patch. I can try to identify and port these as
   well. This would certainly improve things from the
   readability point of view, although it wouldn't IMO do much
   about the speed of the code.

Improving the readability in babl is probably important the code hasn't been
properly handled in years, and it contains half implemented and thus
unused features. Someone cleaning up and perhaps thinking about how to
make babl do more of what it could be doing is very welcome.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL-0.0.16

2008-02-27 Thread Øyvind Kolås
GEGL 0.0.16
⎺⎺⎺
GEGL is a graph based image processing framework offering non-destructive image
processing and compositing on large images. GEGL is suitable for projects
ranging from small one-off projects to interactive applications.

Changes in this release
⎺⎺⎺
 • Install headers for development of external operation plug-ins.
 • Added rowstride argument to gegl_buffer_set ()
 • Made it possible for sink operations to do cunkwise processing
   through GeglProcessor.
   when processed using a GeglProcessor.
 • constification of GeglRectangles and babl formats.
 • Build and dist fixes, plugged annoying buffer leaks, GEGL now
   also works on OSX
 • New operations: stress, c2g, mblur, grey.
 • Reorganized operations directories.

A new release of babl is also available, GEGL will work best with
babl-0.0.20 or newer.

This release appears due to contributions from:

  Øyvind Kolås, Étienne Bersac, Kevin Cozens, Sven Neumann,
  Manish Singh, Michael Natterer, Hans Brauer, Deji Akingunola,
  Bradley Broom and Tor Lillqvist.

Where to get GEGL
⎺
GEGL and it's dependencies babl and glib can be fetched from:

ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.20.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.16.tar.bz2
ftp://ftp.gimp.org/pub/glib/2.15/glib-2.15.4.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
ac3ac25c3d77bc1c812b64e843cac74287a50688  babl-0.0.20.tar.bz2
de262a29fc3c6c5fc1a436828044cf22756fb54b  gegl-0.0.16.tar.bz2
dacc3f4c810e69677846a9414374fd68f9073cd2  glib-2.15.4.tar.bz2

Where to get more information about GEGL

Information about GEGL can be found at the GEGL website http://www.gegl.org/

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Build problems on OS X

2008-02-26 Thread Øyvind Kolås
On Thu, Feb 21, 2008 at 11:05 PM, Ettore Pasquini
[EMAIL PROTECTED] wrote:
 On 2/20/08 5:51 PM, Ettore Pasquini [EMAIL PROTECTED]
  wrote:


   On Wed, Feb 20, 2008 at 11:50 PM, Øyvind Kolås [EMAIL PROTECTED] wrote:
  

   GEGL has not yet been successfully built on Mac OS X, please upgrade
to the vrey latest version and try again and report back whether it
compiles succesfully or not.

  I wrote a blog post about that:

  http://cubelogic.org/act/building-gegl-and-babl-on-mac-os-x.html

GEGL has now finally been confirmed to be working correctly on Mac OSX and
we're closing in on the 0.0.16 release.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] article about gegl

2008-02-21 Thread Øyvind Kolås
On Thu, Feb 7, 2008 at 9:01 PM, Valent Turkovic
[EMAIL PROTECTED] wrote:
  I'm interested in writing an article about gegl. I can't find much
  information online so I came to the source.
  What has happened with gegl project in past 2 years?
  I saw this article:
  
 http://www.digg.com/linux_unix/The_GIMP_s_next_generation_imaging_core_demonstrated
  and I see that your site hasn't changed much since it was written so
  if somebody would be interested for few quick QA that would be great.

The best source for information about GEGL is probably the ChangeLog
and NEWS files in the subversion repositories of GEGL  and GIMP. As
well as peering into bugzilla to see what issues are open. Interviews
tend to take away time that most often could be better spent improving
code or internal project documentation. Feel free to ask further
questions on the mailing list after looking through
the pointers provided, a timely response is not guaranteed though.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/ http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Split Result?

2008-01-30 Thread Øyvind Kolås
On Jan 30, 2008 9:46 PM, Ferran Basora [EMAIL PROTECTED] wrote:
 the operation that I am creating renders a simple gradient from 0 to image
 width but in the middle of the image ends the gradient and starts again to
 the end of the image. I don't understand the reason.

You probably want to look at either the mandelbrot or the checkerboard
operations and how they deal with coordinates. Be aware that the
operaiton will be asked to render a subrectangle (with an x,y offset
as well) and not it's entire output in one pass. This applies to all
operations and is due to GEGL
supporting processing and generation of images larger than system RAM
as well as that this design constraint will enable a future version of
GEGL to be
performing paralell processing.

The API for writing operations is still settling, I hope you are looking at the
latest version in SVN and not the last released version, since there has been
considerable amounts of changes recently. (The next release of GEGL will be
the first release where header files for writing custom operation
plug-ins will be installed.)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL doubts

2008-01-12 Thread Øyvind Kolås
On Jan 11, 2008 5:05 PM, Ferran Basora [EMAIL PROTECTED] wrote:
 Nowadays, I think that all people that works with GIMP have a 3D Graphic
 card. It could be possible to integrate some of GEGL operations with the
 OpenGL library and delegate a part of work to be faster?
 For example, rotate, transform, blur, mask operations.

Some operations of GEGL can potentially be accelerated by the means of
a GPU. Accelerating things directly with OpenGL is not possible since
OpenGL gives no warranties about the precision of the resulting
rendering (it just has to look good enough). GEGL on the other hand
aims for high precision rather than performance in it's output. It
might be viable at some point in the future to add fast paths to GEGL
that use GLSL or similar fragment shaders to do some of the work.

One of the main issues with accelerating these things with a GPU is
that moving data from the system memory to the graphics memory and
back is slow. Another problem is that you restrict the portability of
the software severely. Thus you will often end up with a problem if
some of your operations are GPU accelerated and some are not, the net
effect might be that the end result is slower than a pure software
implementation.

The only way I see it as viable to add usch acceleration to GEGL is to
add optional fast paths in addition to the reference code already
existing in C. This will be the same route GEGL will go down in
accepting 8bit, 16bit, MMX, SSE and similar optimizations as well,
they will be in addition to the sofware based floating point
operations and it shall be possible to disable their use if they do
not achieve sufficient precision.

Another thing that GEGL currently is lacking but it will most
certainly get support for before GPU based acceleration is proprly
considered is other forms of parallellziation, two, four, eight and
eighty cpu cores are things that seems to become more and more wide
spread.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Gegl questions

2008-01-06 Thread Øyvind Kolås
On Jan 6, 2008 6:43 PM, Patrik Östman [EMAIL PROTECTED] wrote:

 To exemplify. If you want to make a fast preview by applying an operation on
 a scaled down version of an image, do you have to use separate graph
 representations for the scaled down version versus the full size image
 meaning that you need a scale operator in one of graph paths or will this be
 managed by the mipmap buffers and using the scale parameter in the
 blit-function. Meaning that the operation is only performed on the mipmap
 scaled version that is closest to the choosen scale.

GEGL doesn't already do this in an efficient manner, but some of the
infrastructure to do so is present, and the public API has been
designed with such usage in mind.

Some of the things that haven't received proper attention yet is how
to deal with spatial properties for the ops. Blur radiuses need to be
scaled, has issues with such operaiton, traditional convolve
operations are only defined for a 1:1 pixel
grid etc.

Do note that GEGL doesn't do such optimizations yet, and GEGL is still
in a state where the public API is very close to be declared ready
while the internals will probably see quite a bit of refactoring to
enable optimizations like the one you describe here as well as other
optimizations.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Gegl questions

2007-12-12 Thread Øyvind Kolås
On Dec 12, 2007 7:50 AM, Patrik Östman [EMAIL PROTECTED] wrote:
 - The main idea of gegl is that you can build up graphs of nodes and that
 you decide when to process the graph. You are also able to specify a region,
 scale and output format. To get the best performance I guess that cropping
 and scaling is done early in the process stage. Correct? And is this true
 for all operations? Cropping should not be a problem but can imagine that
 scaling may cause problems for operations like filters there you have to
 adapt the filter to get the same effect as for a none scaled image.

By requesting a subregion to be rendered, the minimal required regions
to be computed for every node is first computed in a first pass
(expanding as needed for context for blurs, and restricted by crop
operations present in the graph.) Moving scaling to be performed as
early as possible is something that has been considered but currently
is not done since it would be in conflict with the per-node caches.

 - If a graph is processed and an operation is added to the graph I guess
 that when reprocessing the graph the cache of the previous rendering is
 used. This means that only the new operation is processed. But what if you
 have rendered the graph using different scales and regions, do you have
 separate caches for different render options?

As mentioned there is only a single cache, but the buffers these
caches are built on have built in capabilities for mipmap scaling.
These things are not mentioned in detail on the webpage because
they are things that might change for the better in the future
independently of the public API.

Another key element you didn't touch upon is parallellization of the
processing which is also related to such future internal developments,
please examine the GEGL bugzilla for some information on
ideas in this regard.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Performance of GEGL

2007-10-09 Thread Øyvind Kolås
On 10/9/07, Lavergne Thomas [EMAIL PROTECTED] wrote:
 Hi,

 I've just installed GEGL and BABL and started to do some test. For
 example the following code :

 So does any of you have an idea about what can cause this slow down ?

GEGL is still going through architectual level internal refactoring
even though the public API
haven't changed much lately.

The slow down can come from quite a few different places, and it might
even be slower if you try the SVN version since it is in, and has been
in for a while, a intermediate state where
a new caching framework is being integrated. If babl's extensions
aren't being automatically
picked up the interpolation that happens during affine transformations
will be slower as well.

To figure out where time is spent set the environment variable
GEGL_DEBUG_TIME to some value and study the output, the results of
which is meaningless for the last released version since the affine
(scaling) operations has been significantly changed; as well as for
the SVN version since there are some semi-known issues with the still
fresh caching code.


/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Shortcoming in API or behavior of gegl_node_blit and gegl_buffer_get

2007-09-16 Thread Øyvind Kolås
On 9/16/07, Martin Nordholts [EMAIL PROTECTED] wrote:
 Øyvind Kolås skrev:
  [...] The rowstride should probably be added to
  gegl_buffer_get as well, keeping the current behavior of letting 0/-1
  denote a default rowstride of bytesperpixel*width.
 
  Any comments?
 
  /Øyvind K.

 Just a little comment; to increase code readability I think a symbolic
 constant like e.g. GEGL_DEFAULT_ROWSTRIDE should be provided by the API
 for passing to functions when a default rowstride is desired.

 I suspect that's what you intended, just wanted to mention it.

Perhaps

#define GEGL_ROWSTRIDE_AUTO   0

Describes the meaning even more precisely, since it would be computing
the rowstride based on the buffer width and the requested pixel
format.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] stretch-contrast crash, Fourier transform, some questions.

2007-09-15 Thread Øyvind Kolås
On 8/15/07, Håkon [EMAIL PROTECTED] wrote:
 snip
 to stretch-contrast.c fixed it.

This change has been committed.

 - I'm trying to implement a Fourier transform filter in GEGL. It uses RGB
 images with the real part of the complex numbers stored in red, and the
 imaginary part in green. This should allow for some interesting things, like
 implementing a frequency filter like this:

Fourier processing is interesting, but not something I've put a lot of
thought into myself.

 - Some questions:
 I guess storing complex data is a slight abuse of the RGB
 model... Are there any caveats in having negative or
 excessively large values in pixels?

As long as it is not being passed through an operation that requests 8bit data
there is no problem with neither negative nor very large RGB values,
in fact this
is explicitly supported to allow both high dynamic range imaging, as
well as wide gamut RGB buffers.

 Could one have pads other than 'input', 'aux' and 'output', for things like
 composing/decomposing to channels?

Yes, but then you can no longer use the nodes in the basic manner that
is currently offered by the XML format. One operations that currently
diverges from the normal set of inputs is operations/color/remap.c
which takes three inputs. You'll also notice that this file is quite a
bit more verbose, this is because it cannot use the preprocessor
tricks employed by the more normal operations. To use such operations
currently you have to construct the graph manually using the
C/ruby/python APIs directly.

The XML format should be extended to allow specifying meta
operations (like drop-shadow and unsharp-mask) using XML files
instead of .c files, the bug tracking this issue is:
http://bugzilla.gnome.org/show_bug.cgi?id=465743

 Can you have several versions of a node, taking different formats?

Currently not, at the moment each operation (the actual processing of
the node) requests the data, and babl is used behind the scenes to
convert the data to the desired format. At a later stage, multiple
implementations of operations might be possible to register.

 - I guess this is already known, but the GEGL tool
 currently exports XML with a '/' erroneously prepended to
 relative layer paths.

The XML format isn't considered stable, but this sounds like a bug,
could you please file a more throughout description of the issue in
bugzilla?

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] Shortcoming in API or behavior of gegl_node_blit and gegl_buffer_get

2007-09-14 Thread Øyvind Kolås
The main rendering functino of GEGL is gegl_node_blit, gegl_node_blit
is in essence a
wrapper around gegl_buffer_get (), with a GeglNode instead of a
GeglBuffer, a currently unused
rowstride of the destination_buf, and the GeglBlitFlags describing the
caching behavior desired. The rowstride should probably be added to
gegl_buffer_get as well, keeping the current behavior of letting 0/-1
denote a default rowstride of bytesperpixel*width.

void  gegl_node_blit (GeglNode  *node,
  GeglRectangle *roi,
  gdoublescale,
  Babl  *format,
  gint   rowstride,
  gpointer  *destination_buf,
  GeglBlitFlags  flags);

voidgegl_buffer_get   (GeglBuffer   *buffer,
   GeglRectangle*rect,
   gdouble   scale,
   Babl *format,
   void *dest);

If the rowstride is going to be used it should be present in
gegl_buffer_get as well. The real problem is using either of these as
the primitive to build a zoomable panable display. Both of them are
implemented in such a manner that the GeglRectangle (x,y,width,height)
specifies the integer coordinates of the upper left corner to be
rendered to the linear buffer as well as the width and height of the
linear buffer and the scale argument specifies the scale to be used
during rendering 1.0 == 1:1, 2.0 means that each source pixel becomes
a 2x2 block of pixels etc. Using this API it isn't possible to request
rendering of arbitrarily positioned buffers since the upper left pixel
will always be fully rendered with the upper left edge at integer
coordinates.

Changing GeglRectangle to use floating point coordinates doesn't feel
like a solution since almost all other places where GeglRectangles are
used in GEGL it does literally mean a region of a raster in integer
coordinates.

Adding horizontal and vertical offsets to the functions would clutter
the API quite a bit.

What I think might be the best option will be making the scale be
applied to the buffer before the rectangle is taken into account at
all, and let this GeglRectangle specify integer coordinates of an
already scaled buffer making the region rendered be (x/scale, y/scale,
width/scale, height/scale).

Any comments?

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Float/Curve patch

2007-05-22 Thread Øyvind Kolås
On 5/22/07, Mark Probst [EMAIL PROTECTED] wrote:
 Here's a small patch that corrects the floating point I/O problem for
 the curve and makes the contrast-curve operation use the curve instead
 of the object param type.

Committed, one adjustment to how you create patches that would making
commiting the patches easier is if you included an entry for the
ChangeLog as well.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Curve - First iteration

2007-05-18 Thread Øyvind Kolås
On 5/18/07, Mark Probst [EMAIL PROTECTED] wrote:
 On 5/17/07, Øyvind Kolås [EMAIL PROTECTED] wrote:
  Speaking of color to gray scale, be sure to test the c2g operation
  also in the workshop.

 My first impression: With the default value of 3 samples it produces
 way too noisy images, even from very clean input.  I'll play around
 with it more when I get to my application.

 Am I right in assuming that it's an implementation of the color2gray 
 algorithm?

The color2gray, it is a color2gray algorithm, and I would recommend
increasing the number of iterations instead of increasing the number
of samples. Think of running it with a low number of a iterations as a
preview of the results of multiple iterations. (the method is work in
progress and we're rtring to keep the implementation simple, rather
than engineer ad-hoc noise reduction capabilities into it at the
moment.)

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] OCRopus and Gegl

2007-05-18 Thread Øyvind Kolås
On 5/18/07, Étienne Bersac [EMAIL PROTECTED] wrote:
 Hi all,

 You may have heard about OCRopus project launched by Google last month.
 As a developer of gnome scan, this is the project i needed for OCR. I
 wonder how it is possible to plug it as a GeglOperation. I mean, is
 GeglOperation intended for such features ?

Sure, but such an operation would probably best ship with gnome scan
initially, and perhaps be moved over to the core GEGL distribution if
at a later point it is deemed to be generally useful. To speed the
process toward getting a stable operation API, helping out with
cleaning up and refactoring the existing Operation API as well as
cleanups within the core would be welcome.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] CMYK and GEGL

2007-05-14 Thread Øyvind Kolås
I do not know when support for CMYK in GEGL will be added, but the
initial support will most probably be as described below,
and it can be added without being intrusive on the current code.
The various tasks that needs to be done should probably be filed
against GEGL as separate enhancement requests in bugzilla.

GEGL itself at the moment focuses mostly at mixing and processing High
Dynamic Range additive RGB light. When introducing CMYK subtractive
mixing will be added but initially only for export purposes. The
following new operations would be desirable:

It should be possible to transform buffer data to CMYK buffers by
supplying an ouput profile and a rendering intent, as well as
rendering a mask indicating out-of-gamut colors. Both of these tasks
will be implemented as operations. And should provide a core set of
functionality allowing some control over generated CMYK values, and
for most uses sufficient control.

These operations will need some changes and additions to the GEGL code
most specifically a ICC profile property on GeglBuffers that is
propagated correctly through the graph.

When matching colors in a print job between rasters originating mainly
in photographs with CMYK vector graphics, it would be advised to use a
color picker on the written output CMYK file intended for inclusion in
print. Since if
painting is done on RGB buffers in this model with colors picked in
CMYK, the information about the black seperation in the user specified
CMYK values is lost.

It should then be possible to add CMYK specific operations, as well as making
the existing internal ones CMYK aware. For some operations where
abstracting away the number of colorant components, it might be
desired, but in most instances I would argue that it adds unneeded
complexity to the code.

Being able to preview the range available, perhaps even using
perceptual compression of values for display.

The operations could perhaps be structured as follows:

apply-profile
-
apples a color profile to a buffer, should be followed by an operation that
expects CMYK data if the buffer has been converted to CMYK in the
process to avoid information loss.

properties:
  profile - ICC-profile
  intent - absolute colorimetric, relative colorimetric, perceptual.
  convert - boolean value, convert image default value is TRUE.

gamut-distance
--
generate a gray scale map indicating how far outside the gamut
boundary a color is.

properties:
  profile - ICC-profile being converted to.

A sample chain of operations taking a photo from a raw file, and
making a sharpened CMYK file tagged with a profile.

load
   path:rgb.raw
apply-profile
   profile:mycamera.icc
   convert:false
apply-profile
   profile:sRGB
   convert:true
auto-levels
unsharp-mask
   std-dev:3.0
   amount:0.2
apply-profile
   profile:swop.icc
   convert:true
save
   path:cmyk.tiff

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Operations that I require

2007-05-10 Thread Øyvind Kolås
On 5/10/07, Mark Probst [EMAIL PROTECTED] wrote:
 Ok, so here's my mono mixer, implemented as a generic filter.

Looks good, the filter plug-in API headers are not installed yet, this because
there will be changes made to it, already there have been changes to
the GEGL tree causing your filter not to compile with SVN trunk.

   if ((result_rect-width  0)  (result_rect-height  0))
   {
   gint num_pixels = gegl_buffer_pixels (input);

Replace this with:
  gint num_pixels = result_rect-width * result_rect-height;

or use:
 gint num_pixels;
 g_object_get (input, pixels, num_pixels, NULL);

The function gegl_buffer_pixels was removed as gegl-buffer.h is being
prepared to be made more public.

/Øyvind K.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Operations that I require

2007-05-09 Thread Øyvind Kolås
On 5/8/07, Mark Probst [EMAIL PROTECTED] wrote:
 Hi!

 I'm trying to implement a B/W processing application using Gegl,
 similar to my B/W Photoshop workflow:

   http://schani.wordpress.com/2006/05/23/my-digital-bw-workflow/

 There are several operations that I need which, as far as I can tell
 (I'm completely new to Gegl), are not supported, directly or
 indirectly:

 * Channel Mixer.  What it does is it generates a B/W image out of a
 color image by calculating a weighted sum of the color channels.

There is no real equivalent to a Channel Mixer operation at the moment.

 * Gradient curves.  I want to give the user a curve control to modify
 the contrast of the image, like the Curve filter in GIMP/Photoshop.

There is no curves control either, the closest would be levels. Both
of these are point operations and would live in the
gegl/operations/color/ dir. The Channel Mixer is probably the one that
would be easiest to implement.

For a curves operation the main issue is how to pass the curve to the
operation, there currently is no operations in GEGL that take an array
of values as a parameter; thus you should probably bypass the
gegl-chant mechanisms and write all the needed boilerplate yourself
gegl/color/remap.c is an example of one operation that does this for
other reasons.
When it comes to how an array of values are best expressed, there
probably are some examples in GIMP plug-ins.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Segmentation Fault at initial run

2007-03-20 Thread Øyvind Kolås
On 3/20/07, Kerem Kat [EMAIL PROTECTED] wrote:
 Hi, I checked out babl and gegl from svn and compiled them on fedora 6 with
 autogen.sh , but without success to run.

 gegl: rev. 1436
 babl: rev. 230

 When I run the gegl binary, it gives the following:

 WARNING **: Failed to set operation type for nop, using a passthrough op
 instead

This mean that GEGL has failed to find any of it's plug-ins, you
probably want trying to set the environment variable GEGL_PATH to
point to the location where the .so's of the operations ended up being
installed and make another attempt.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Segmentation Fault at initial run

2007-03-20 Thread Øyvind Kolås
On 3/20/07, Øyvind Kolås [EMAIL PROTECTED] wrote:
 On 3/20/07, Kerem Kat [EMAIL PROTECTED] wrote:
  Hi, I checked out babl and gegl from svn and compiled them on fedora 6 with
  autogen.sh , but without success to run.
 
  gegl: rev. 1436
  babl: rev. 230
 
  When I run the gegl binary, it gives the following:
 
  WARNING **: Failed to set operation type for nop, using a passthrough op
  instead

 This mean that GEGL has failed to find any of it's plug-ins, you
 probably want trying to set the environment variable GEGL_PATH to
 point to the location where the .so's of the operations ended up being
 installed and make another attempt.

It seems like I responded a bit prematurely, there has been changes
recently to make GEGL and babl work on win32, these seems to have
broken the build on Unixes right now. I do not have the immediate time
available to look into these issues right now, unfortunately this
leaves us with broken trunk revisions, the changes to make it work
again shouldn't be very large though.

/Øyvind K.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Tiles Buffer and Pyramids question

2007-03-05 Thread Øyvind Kolås
On 3/5/07, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:
 hello,

 when brouwsing trough the bug reports Bug 378115 got my attention.
 I'm trying to figure out hou the buffer and tile's interact with each other.
 It seems to me that depending the call of gegl_buffer_get_scaled one pyramid 
 level is calculated.
 Is there realy a image pyramid? Should the image pyramid not be included in 
 the tiles?
 (As a consequence this would increase the tile size to 1 + 1/3.)

When gegl_buffer_get_scaled is called the tiles needed at the level to
satisfy the request is computed (and cached). Thus the tiles are
generated on demand (and cached for later use).

Level 0: is the base level, this level always exist (as things are
currently implemented).
Level 1: the tile size here is the same as tiles of the ones on level
0, but contains data from 4 tiles on level 0.
Level 2: one tile consists of data from 4 tiles on level 1.

This tile generation happens automatically within the tile
architecture, gegl_buffer_get_scaled just requests tiles at the
appropriate level, and retrieves either cached tiles or makes the tiles
needed be generated. When tiles for level 2 is requested, tiles on
level 1 are created and cached as well if needed.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


[Gegl-developer] GEGL 0.0.12

2007-02-18 Thread Øyvind Kolås
GEGL 0.0.12
⎺⎺⎺

GEGL is a graph based image processing framework offering non-destructive image
processing and compositing on large images. GEGL is suitable for projects
ranging from small one-off projects to interactive applications.


Changes in this release
⎺⎺⎺
 • Swapping out of image pyramid.
 • Speedups to text rendering.
 • GEGL compiles on win32
 • GEGL_SWAP now specifies swapdir location.
 • Small refactorings of public API.
 • Changed the XML parser/serializer to not use attributes for node properties.
 • Improvements to documentation.
 • Automagic build environment for operations simplified.
 • Internal API for saving/loading GeglBuffers to/from disk.
 • Ruby, C# and Python bindings added to version control system
   (not included in distributed tarball)

A new release of babl is also available that fixes the reference
conversion from premultiplied to non-premultipled data making it
work on platforms where the dynamically loaded performance extensions
do not work yet.

Contributions from:

Kevin Cozens, Øyvind Kolås, Sven Neumann and Michael Schumacher.


Where to get GEGL
⎺
GEGL and it's dependencies babl and glib can be fetched from:

ftp://ftp.gimp.org/pub/babl/0.0/babl-0.0.14.tar.bz2
ftp://ftp.gimp.org/pub/gegl/0.0/gegl-0.0.12.tar.bz2
ftp://ftp.gimp.org/pub/glib/2.12/glib-2.12.9.tar.bz2

The integrity of the tarballs can be verified with:

sha1sum *.bz2
fd344360c7ae900a4610951cd3dee855c2298f21  babl-0.0.14.tar.bz2
5d1e3b1a13d696fda4c9ca01df28435e58fb882f  gegl-0.0.12.tar.bz2
387da30929047ef88a6f369831a34f41a3d027f7  glib-2.12.9.tar.bz2


Where to get more information about GEGL

Information about GEGL can be found at the GEGL website http://www.gegl.org/

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] (no subject)

2007-02-13 Thread Øyvind Kolås
On 2/8/07, cazaciuc gabriel [EMAIL PROTECTED] wrote:
  I want to give a little help to the development of gegl. Which is
 the recommended method to get started?

You've already started that by attempting to build it locally from source ;)

  What are the operations that are considered usefull to be
 implemented?

At the moment I would not encourage people to write tons of new
operations. Documenting and re factoring the internal architecture
should happen before the amount of operations using internal API's
explode. This is also the reason GEGL is not currently installing the
headers needed for plug-in/operation development that API is not
stable yet.

Another thing that would be useful is using the GEGL API from C, ruby
or python (a new incarnation of the python bindings will be announced
soon). To test the API and give feedback on
the current shortcomings.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] New to GEGL, and HSL plugin

2007-02-04 Thread Øyvind Kolås
On 2/4/07, Sven Neumann [EMAIL PROTECTED] wrote:

 HSL layer modes have been requested for GIMP (see bug #401754 and also
 bug #404378 for another request that deals with layer and paint modes).
 It might make sense to consider adding these to babl/gegl.

I'd rather add CIE Luv and use that in place of HSV/HSL. Adding
HSV/HSL to babl should be a matter of writing an extension, but the
slightly more perceptual CIE color space is probably more desirable.
Ideally all possible candidate color spaces will be possible to use
but implementing the saner ones first should be a priority.

GEGL currently contains a large enough amount of plug-ins that changes
to the API they use take time. It is expected that this API will go
through considerable refactoring and thus getting a lot of new
plug-ins into the main distribution is not desirable as it will make
the refactoring take more time. This is part of the reason I want to
be conservative with which plug-ins are added.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Core Features

2007-01-30 Thread Øyvind Kolås
On 1/30/07, Konstantin N.Kozlov [EMAIL PROTECTED] wrote:
 I have just subscribed to this list and would like to say Hello to
 everybody.

 I am working in the field of systems biology and my work includes
 processing of images and writing software for it also.

 I have several questions to the developers about the core features of
 GEGL.

 Can the node have several input and output pads? And can it have zero
 number of input or output pads?

The current architecture allows both several input and several output
pads, though some internal restructuring/maintenance might be needed
to support multiple
output pads correctly throughout the system. There are nodes that
load/produce image data that have no inputs, as well as nodes that
store image data (the png-writer for instance) that have no output
pads.

 Where is the result of node execution stored - in memory or in temporal
 storage on disk?

Out of the box GEGL swaps tiles to RAM, by setting the environment
variable GEGL_SWAP to any non-zero value it will swap to disk instead
and has in such a manner been successfully used for image processing
on 12GB image rasters.

 There are several software packages that use DAG to store the list of
 operations called workflows or workspaces namely VisiQuest, TiViPe,
 SCIRUN, SIVIL and probably Matlab/Simulink. The image processing tools
 and api for nodes/connections are usually separated. What is the reason
 to put them in one library?

Because they are closely connected, image processing operations in GEGL do
not necessarily work on the entire image buffers but on the smallest
possible sub rectangles needed to compute a desired region of
interest. It is also possible to do other optimizations like
reordering of operations, changing of parameters according to scale
level etc.

 Are there plans to implement distributed processing?

This is planned, the first step will perhaps be multiple threads (or
processes on a single machine). The tiled buffer architecture of GEGL
is designed with network distributed read/write access in mind. When
multi-threaded/distributed processing
becomes possible the aim is that this should happen without changes to
the public API. Thus existing tools built on top of GEGL should
automatically get the same capabilities without any code changes.

 Are there any efforts to implement visual programming environment for
 creating and editing DAG with GEGL?

Right now the closest thing is the tree based test app the comes with
GEGL. It implements a proxy between the graph and a tree (which allows
clones, but not editing of them yet). A tree with clones can represent
any DAG as long as you do not allow multiple output pads for any of
the nodes. (all nodes have a single output pad).

I've got an old graph editor[1] from the gggl[2] project (gggl has now
been assimilated by GEGL). Which I probably will resurrect at some
point.

Thank you for your interest.

/Øyvind K.

1: http://people.freedesktop.org/~pippin/cairo/bauxite_0_86.png
2: http://pippin.gimp.org/gggl/

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Little GUI thought

2007-01-10 Thread Øyvind Kolås
On 1/10/07, Piotr Stopniak [EMAIL PROTECTED] wrote:
 I was just doing some work in Photoshop which involved multiple layer
 sets that had to have the same opacity and it was a pain to change them
 all each time so I had this idea that you could define global variables
 or, in the DAG paradigm, simple scalar nodes you could hook up to drive
 values in many layers/nodes from one location.
 Could be an interesting thing for the GUI: a variable list/editor.

GEGL itself has no GUI since it is a library/framework that applications can use
to drive the rendering of both graph based GUIs as well as other
approaches. The GUI that comes with the GEGL distribution is a code
sample/sandbox for developers to test plug-ins, as well as a way to
test the current performance of the GEGL engine it is not, at least at
the moment; aiming to become a useful tool for end users. For that you
would have to wait for GIMP to integrate with GEGL or perhaps other
applications built on top of GEGL to emerge.

In DAG based GUIs the ability to use scalar values in the graph is
common. The GEGL architecture has supported this in the past but it is
possible that recent changes has made that ability disappear
temporarily.

/Øyvind K.
-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] GEGL 0.0.6

2007-01-08 Thread Øyvind Kolås
On 1/8/07, Øyvind Kolås [EMAIL PROTECTED] wrote:
 A new GEGL release a short time after the first, it should now build
 or be closer
 to building on more systems. Work is underway to make it possible to
 use GEGL from both python and ruby. A preliminary ruby binding can be
 found at http://pippin.gimp.org/rgegl/.

Note: Do _NOT_ upgrade babl to 0.0.10 unless you are trying to make it
build on Win32, since it contains a serious regression that
should never have been let sneak into a released tarball.

/Øyvind K.

-- 
«The future is already here. It's just not very evenly distributed»
 -- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Platform support and caching

2006-10-22 Thread Øyvind Kolås

On 10/22/06, Rasmus Bonnedal [EMAIL PROTECTED] wrote:

1. I have found no list of supported platforms so I tried to build it
on Cygwin but it fails because of differences in the dynamic library
mechanism between Windows and Linux. Are there any plans on Windows or
Cygwin support?


People who care about win32 will have to do that work, I do not care;
and in my opinion there is no hurry to make it work on that platform.


2. When trying simple tests it seems to me that there are
mechanisms present for caching the results of an entire filter chain,
but no caching between nodes. What I would like to do is something
like this:

Image Loader - Expensive Filter - Cheap Filter - Result

Then I would like to change parameters on the cheap filter without
having to recalculate the expensive filter over and over again. Is
this behaviour possible in the current gegl framework?


This is something I do care about, and I am currently working on
monitoring the graph and properties for changes to compute the
bounding box of the region that needs recomputation when things have
changed. This coupled with caching similar to what you describe (and
also described in
http://bugzilla.gnome.org/show_bug.cgi?id=357261 ) should speed up
interaction speed.

/Øyvind K.
--
«The future is already here. It's just not very evenly distributed»
-- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] DAGs make users' eyes cross

2006-10-18 Thread Øyvind Kolås

On 10/17/06, Ken Bateman [EMAIL PROTECTED] wrote:

I've independently been thinking of a similar imaging core for the last month or
so.  Of course, I think it's a good idea.  Logically, behind the scenes,
everything should be in the form of a DAG.  But I think that a raw DAG does not
make up a part of a good user interface.


The current user interface used in the prototype GUI of GEGL is an
abstraction above the DAG that is a tree with clones. This allows
expressing all DAGs that have sources (one output) filters (one input
and one output), composers (two inputs and one output). This is the
interface model I used in bauxite[1] , with the added ability to make
some of the nodes in this tree be embedded graphs I think you have the
best of both worlds. It shold also be noted that one of the operations
in GEGL at the moment is the layer, which is a composition of over
(or another compositing operator), translate and opacity.


Spreadsheets are in essence a DAG for performing numerical calculations, and I
would suggest that the user interface should take the form of a spreadsheet
since this is a model familiar to many users.   Some cells would contain source
rasters, other cells would contain paths, vector graphics, or masks (or even
references to other functions), some cells would contain a function that
referred to other cells for inputs, some cells could contain labels or comments,
and most cells would be empty.


Such a user inteface does not lend itself well to a user that wants to
do image manipulation in the manner traditionally done by users of
GIMP, an application that does something along these lines is nip2[2]
the interface of the vips projects.

1: http://pippin.gimp.org/bauxite/
2: http://www.vips.ecs.soton.ac.uk/index.php?title=Nip2

/OEyvind K.
--
«The future is already here. It's just not very evenly distributed»
-- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


Re: [Gegl-developer] Proposition : GeglInterpolator

2006-10-17 Thread Øyvind Kolås

On 10/17/06, [EMAIL PROTECTED] [EMAIL PROTECTED] wrote:

If you scale a image to 10% of the original size using cubic, you have
a situation where the data for each destination pixel is taken from a
region of 4x4pixel, whilst it should at least be taken from a region
of 10x10pixels, 84% of the image data is thrown away.

OK, the handling of scaling down is not yet in the proposition

Could we not just add the scale factor to the API ?


The scale factor is not enough, if we scale it to 10% horizontally and
70% vertically (or add some kind of rotation as well). A fixed scale
factor would no longer be correct. Doing a reverse transform of the
corners of the destination pixel would give us all the information
we need, and work for perspective transforms as well, hence the method
I suggested.

/Øyvind K.

--
«The future is already here. It's just not very evenly distributed»
-- William Gibson
http://pippin.gimp.org/http://ffii.org/
___
Gegl-developer mailing list
Gegl-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gegl-developer


  1   2   >