[babl] add babl_format_is_palette



commit 2e301fd87651f325a3684fe0cc23acd2ac67bc6a
Author: Ãyvind KolÃs <pippin gimp org>
Date:   Wed Mar 21 18:13:38 2012 +0000

    add babl_format_is_palette

 babl/babl-format.h  |    1 +
 babl/babl-palette.c |   23 +++++++++++++++++------
 babl/babl.h         |   12 ++++++++++--
 3 files changed, 28 insertions(+), 8 deletions(-)
---
diff --git a/babl/babl-format.h b/babl/babl-format.h
index 01f8f12..bc78f42 100644
--- a/babl/babl-format.h
+++ b/babl/babl-format.h
@@ -41,6 +41,7 @@ typedef struct
   int              visited; /* for convenience in code while searching
                                for conversion paths */
   int              format_n; /* whether the format is a format_n type or not */
+  int              palette;
 } BablFormat;
 
 #endif
diff --git a/babl/babl-palette.c b/babl/babl-palette.c
index 4655211..8639ba9 100644
--- a/babl/babl-palette.c
+++ b/babl/babl-palette.c
@@ -21,13 +21,13 @@
 #include <stdio.h>
 #include <values.h>
 #include <assert.h>
+#include "config.h"
+#include "babl-internal.h"
 #include "babl.h"
 #include "babl-memory.h"
 
 #define HASH_TABLE_SIZE 1111
 
-void babl_sanity (void);
-
 /* A default palette, containing standard ANSI / EGA colors
  *
  */
@@ -446,6 +446,14 @@ conv_pala8_pal8 (unsigned char *src, unsigned char *dst, long samples)
   return samples;
 }
 
+int
+babl_format_is_palette (const Babl *format)
+{
+  if (format->class_type == BABL_FORMAT)
+    return format->format.palette;
+  return 0;
+}
+
 /* should return the BablModel, permitting to fetch
  * other formats out of it?
  */
@@ -455,8 +463,8 @@ const Babl *babl_new_palette (const char  *name,
 {
   const Babl *model;
   const Babl *model_no_alpha;
-  const Babl *f_pal_u8;
-  const Babl *f_pal_a_u8;
+  Babl *f_pal_u8;
+  Babl *f_pal_a_u8;
   const Babl *component;
   const Babl *alpha;
   BablPalette **palptr;
@@ -490,14 +498,17 @@ const Babl *babl_new_palette (const char  *name,
   cname[0] = 'v';
   model_no_alpha = babl_model_new ("name", name, component, NULL);
   cname[0] = 'x';
-  f_pal_a_u8 = babl_format_new ("name", name, model,
+  f_pal_a_u8 = (void*) babl_format_new ("name", name, model,
                                 babl_type ("u8"),
                                 component, alpha, NULL);
   cname[0] = 'y';
-  f_pal_u8  = babl_format_new ("name", name, model_no_alpha,
+  f_pal_u8  = (void*) babl_format_new ("name", name, model_no_alpha,
                                babl_type ("u8"),
                                component, NULL);
 
+  f_pal_a_u8->format.palette = 1;
+  f_pal_u8->format.palette = 1;
+
   babl_conversion_new (
      model,
      babl_model ("RGBA"),
diff --git a/babl/babl.h b/babl/babl.h
index 019b7b9..80333c0 100644
--- a/babl/babl.h
+++ b/babl/babl.h
@@ -211,6 +211,11 @@ const Babl *babl_new_palette (const char  *name,
                               const Babl **format_u8_with_alpha);
 
 /**
+ * check whether a format is a palette backed format.
+ */
+int   babl_format_is_palette   (const Babl *format);
+
+/**
  * Assign a palette to a palette format, the data is a single span of pixels
  * representing the colors of the palette.
  */
@@ -220,15 +225,18 @@ void  babl_palette_set_palette (const Babl        *babl,
                                 int                count);
 
 /**
- * reset a palette to initial state.
+ * reset a palette to initial state, frees up some caches that optimize
+ * conversions.
  */
 void  babl_palette_reset       (const Babl        *babl);
 
 
+
 /**
  * associate a data pointer with a format/model, this data can be accessed and
  * used from the conversion functions, encoding color profiles, palettes or
- * similar with the data.
+ * similar with the data, perhaps this should be made internal API, not
+ * accesible at all from
  */
 void   babl_set_user_data     (const Babl *babl, void *data);
 



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