babl-fish-reference: improve component match checking for same-model
authorØyvind Kolås <pippin@gimp.org>
Mon, 27 Aug 2018 23:23:56 +0000 (01:23 +0200)
committerØyvind Kolås <pippin@gimp.org>
Mon, 27 Aug 2018 23:23:56 +0000 (01:23 +0200)
babl/babl-fish-reference.c

index 27040ae01c796ad3cd9b4c738f94f7740cc29dfb..2dceba02b2c3d2849938968580465c8de4776e5e 100644 (file)
@@ -388,6 +388,18 @@ process_to_n_component (const Babl  *babl,
   return 0;
 }
 
+static int compatible_components (const BablFormat *a,
+                                  const BablFormat *b)
+{
+  int i;
+  if (a->components != b->components)
+    return 0;
+  for (i = 0; i < a->components; i++)
+   if (a->component[i] != b->component[i])
+     return 0;
+  return 1;
+}
+
 static void
 process_same_model (const Babl  *babl,
                     const char *source,
@@ -396,16 +408,23 @@ process_same_model (const Babl  *babl,
 {
   void *double_buf;
 #define MAX(a, b) ((a) > (b) ? (a) : (b))
+  if (BABL (babl->fish.source) == BABL (babl->fish.destination))
+  {
+    if (source == destination)
+    {
+      memcpy (destination, source, n * babl->fish.source->format.bytes_per_pixel);
+    }
+    return;
+  }
+
 
   double_buf = babl_malloc (sizeof (double) * n *
                             MAX (BABL (babl->fish.source)->format.model->components,
                                  BABL (babl->fish.source)->format.components));
 #undef MAX
 
-  if ((BABL (babl->fish.source)->format.components ==
-       BABL (babl->fish.destination)->format.components)
-      && (BABL (babl->fish.source)->format.model->components !=
-          BABL (babl->fish.source)->format.components))
+  if (compatible_components ((void*)babl->fish.source,
+                             (void*)babl->fish.destination))
     {
       ncomponent_convert_to_double (
         (BablFormat *) BABL (babl->fish.source),