[gegl] gegl: add GEGL_BABL_VARIANT_ALPHA



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]