Re: [Gimp-user] [Gimp-developer] GIMP should fork babl and GEGL
- From: Elle Stone <ellestone ninedegreesbelow com>
- To: Simos Xenitellis <simos lists googlemail com>
- Cc: gimp-user-list gnome org, Gimp-developer <gimp-developer-list gnome org>
- Subject: Re: [Gimp-user] [Gimp-developer] GIMP should fork babl and GEGL
- Date: Fri, 07 Nov 2014 06:26:17 -0500
On 11/07/2014 04:25 AM, Simos Xenitellis wrote:
Hi All,
I am a recent subscriber to the list and I have read with interest the
recent threads and I am trying to figure out the "what next?".
Developer resources in any project are generally very limited, so it's
important to get more people contributing.
Is there a test suite available that could show the expected behavior?
If not, let's try to build one, both the test-suite code plus the images
(before/after).
Regarding the color spaces and conversions, it should be easy to try to
make some of the the changes
(most of them sound like simple text substitutions),
compile the source and see how well it performs on the test-suite.
Any comments on that?
Simos
The text/code editor Geany can be used to do a file search in GEGL and
GIMP for the following string (confine the search to *.c and *.h files):
babl_format ("
GEGL has 212 such strings. GIMP has 503.
Here are some example strings with the actual babl formats included (the
list is not exhaustive):
babl_format ("Y' u8")
babl_format ("Y u32")
babl_format ("YA u32")
babl_format ("Y float")
babl_format ("Y' float")
babl_format ("Y'A float")
babl_format ("Y'CbCrA float")
babl_format ("R'G'B'A u8")
babl_format ("R'G'B'A u16")
babl_format ("R'G'B' float")
babl_format ("R'G'B'A float")
babl_format ("R'aG'aB'aA float")
babl_format ("CIE Lab alpha float")
and so on . . .
If I understand Jon Nordby correctly, all of these babl_formats really
are supposed to be dedicated formats that were intended to be used only
with images encoded using the sRGB primaries. Changing the intended
meaning of these formats might break compatibility with other software
that uses babl.
So new babl_formats need to be written to take the place of all the
"dedicated sRGB only" formats. Then the text substitutions could be made.
The problem is made more complicated by the fact that babl does many of
the calculations for GEGL and GIMP functions that use Y (in particular
painting on a mask and making an grayscale copy of the image for use as
a mask). Babl also does the conversions to the YCbCr and CIELAB formats
for GEGL and GIMP.
So all the babl functions that currently use hard-coded sRGB parameters
either need to be generalized to use parameters pulled from UserRGB
(meaning whatever RGB working space the user chooses, which might in
fact be sRGB, or might be ProPhotoRGB, or etc). Or else duplicate babl
functions for UserRGB need to be written.
The same is true for GEGL and GIMP functions that use Y to calculate
Luminance, except most likely for GEGL and GIMP there won't be any "side
by side" generalized and sRGB-only functions. Instead the existing
functions will all be generalized.
Only a few GIMP UI functions use RGB working-space-specific ("UserRGB")
Y and XYZ values. This article lists where UserRGB Y and XYZ parameters
need to be used:
http://ninedegreesbelow.com/gimpgit/gimp-hard-coded-sRGB.html
To avert any possible confusion, when you open an image using GIMP,
there is not and never has been a forced conversion from UserRGB to
sRGB. The previously planned code that would have done so, never was
written. If I understand Jon Nordby correctly, the development plan that
would have required such code seems to have been put aside.
Currently only a few GIMP UI editing operations (that use Y to calculate
Luminance or XYZ to convert to LAB) are affected by the "babl_format"
assumption that the image really is an sRGB image. This article lists
most of the GIMP UI functions that are currently only accurate for sRGB
images:
http://ninedegreesbelow.com/photography/users-guide-to-high-bit-depth-gimp.html
Hopefully Jon Nordby will point out any mistakes I might have made in
the above summary.
Best regards,
Elle
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]