[gegl] gegl: add GEGL_BABL_VARIANT_ALPHA
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl: add GEGL_BABL_VARIANT_ALPHA
- Date: Tue, 4 Dec 2018 01:01:17 +0000 (UTC)
commit 5e670d87957fa95132ca6a6d0b58f7326e1731cf
Author: Øyvind Kolås <pippin gimp org>
Date: Tue Dec 4 01:58:14 2018 +0100
gegl: add GEGL_BABL_VARIANT_ALPHA
gegl/gegl-enums.c | 1 +
gegl/gegl-enums.h | 2 ++
gegl/gegl-serialize.c | 2 +-
gegl/gegl-utils.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 48 insertions(+), 1 deletion(-)
---
diff --git a/gegl/gegl-enums.c b/gegl/gegl-enums.c
index d75e2f294..1ecb123ce 100644
--- a/gegl/gegl-enums.c
+++ b/gegl/gegl-enums.c
@@ -123,6 +123,7 @@ gegl_babl_variant_get_type (void)
{ GEGL_BABL_VARIANT_PERCEPTUAL_PREMULTIPLIED, N_("Perceptual-premultiplied"),
"perceptual-premultiplied"},
{ GEGL_BABL_VARIANT_LINEAR_PREMULTIPLIED_IF_ALPHA, N_("Linear-premultiplied-if-alpha"),
"linear-premultiplied-if-alpha"},
{ GEGL_BABL_VARIANT_PERCEPTUAL_PREMULTIPLIED_IF_ALPHA, N_("Perceptual-premultiplied-if-alpha"),
"perceptual-premultiplied-if-alpha"},
+ { GEGL_BABL_VARIANT_ALPHA, N_("add-alpha"), "add-alpha"},
{ 0, NULL, NULL }
};
gint i;
diff --git a/gegl/gegl-enums.h b/gegl/gegl-enums.h
index 6a656e5dc..1855872ac 100644
--- a/gegl/gegl-enums.h
+++ b/gegl/gegl-enums.h
@@ -91,6 +91,8 @@ enum _GeglBablVariant
/* Y YaA RGB RaGaBaA */
GEGL_BABL_VARIANT_PERCEPTUAL_PREMULTIPLIED_IF_ALPHA,
/* Y~ Y~aA R~G~B~A R~aG~aB~aA */
+ GEGL_BABL_VARIANT_ALPHA
+ /* add alpha if missing keep as premultiplied if already so */
};
typedef enum _GeglBablVariant GeglBablVariant;
diff --git a/gegl/gegl-serialize.c b/gegl/gegl-serialize.c
index 0c6843adc..c560c9c7f 100644
--- a/gegl/gegl-serialize.c
+++ b/gegl/gegl-serialize.c
@@ -108,7 +108,7 @@ gegl_create_chain_argv (char **ops,
if (error && *error)
{
GeglNode **an = (void*)error;
- ret_sinkp = *an;
+ ret_sinkp = (void*)*an;
*error = NULL;
}
diff --git a/gegl/gegl-utils.c b/gegl/gegl-utils.c
index 18cf925d1..e05c77227 100644
--- a/gegl/gegl-utils.c
+++ b/gegl/gegl-utils.c
@@ -327,6 +327,7 @@ static const Babl *gegl_babl_format_float (const Babl *format)
space = babl_format_get_space (format);
encoding = babl_format_get_encoding (format);
+ {
char *encdup = g_strdup (encoding);
char *newenc;
char *s = strrchr (encdup, ' ');
@@ -336,9 +337,50 @@ static const Babl *gegl_babl_format_float (const Babl *format)
g_free (encdup);
g_free (newenc);
+ }
return format;
}
+static const Babl *gegl_babl_format_alpha (const Babl *format)
+{
+ const Babl *model = babl_format_get_model (format);
+ if (babl_get_model_flags (model) & BABL_MODEL_FLAG_ALPHA)
+ {
+ const Babl *type = babl_format_get_type (format, 0);
+ if (type == babl_type ("float"))
+ return format;
+ }
+
+ if (babl_model_is (model, "Y'"))
+ {
+ return babl_format_with_space ("Y'A float", format);
+ }
+ else if (babl_model_is (model, "Y"))
+ {
+ return babl_format_with_space ("YA float", format);
+ }
+ else if (babl_model_is (model, "RGB"))
+ {
+ return babl_format_with_space ("RGBA float", format);
+ }
+ else if (babl_model_is (model, "R'G'B'"))
+ {
+ return babl_format_with_space ("R'G'B'A float", format);
+ }
+ else if (babl_model_is (model, "cmyk") ||
+ babl_model_is (model, "CMYK") ||
+ babl_model_is (model, "CMYKA") ||
+ babl_model_is (model, "cmykaA") ||
+ babl_model_is (model, "CaMaYaKaA") ||
+ babl_model_is (model, "camayakaA"))
+ {
+ return babl_format_with_space ("cmykA float", format);
+ }
+
+ return babl_format_with_space ("RGBA float", format);
+}
+
+
static const Babl *gegl_babl_format_float_premultiplied_linear_if_alpha (const Babl *format)
{
if (!format)
@@ -363,6 +405,8 @@ const Babl *gegl_babl_variant (const Babl *format, GeglBablVariant variant)
return NULL;
switch (variant)
{
+ case GEGL_BABL_VARIANT_ALPHA:
+ return gegl_babl_format_alpha (format);
case GEGL_BABL_VARIANT_FLOAT:
return gegl_babl_format_float (format);
case GEGL_BABL_VARIANT_LINEAR:
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]