]> mj.ucw.cz Git - libucw.git/blobdiff - images/object.c
some corrections in ImageSim config section
[libucw.git] / images / object.c
index 0d6a146feb2a6cb70bd8a740f4277c3cc94edab0..d817e1c92f10c519d087073e316c2f10fc5fd242 100644 (file)
@@ -6,7 +6,7 @@
  *     This software may be freely distributed and used according to the terms
  */
 
-#define LOCAL_DEBUG
+#undef LOCAL_DEBUG
 
 #include "sherlock/sherlock.h"
 #include "lib/base224.h"
@@ -52,7 +52,7 @@ get_image_obj_thumb(struct image_obj_info *ioi, struct odes *o, struct mempool *
     count++;
   byte buf[count * MAX_ATTR_SIZE], *b = buf;
   for (; a; a = a->same)
-    b += base224_decode(buf, a->val, strlen(a->val));
+    b += base224_decode(b, a->val, strlen(a->val));
   ASSERT(b != buf);
   ioi->thumb_data = mp_alloc(pool, ioi->thumb_size = b - buf);
   memcpy(ioi->thumb_data, buf, ioi->thumb_size);
@@ -75,9 +75,8 @@ read_image_obj_thumb(struct image_obj_info *ioi, struct fastbuf *fb, struct imag
   if (!io->background_color.color_space)
     io->background_color = color_white;
   struct image *img;
-  if (!(img = image_io_read_data(io, 0)))
+  if (!(img = image_io_read_data(io, 1)))
     goto error;
-  ASSERT(img->cols == ioi->thumb_cols && img->rows == ioi->thumb_rows);
   DBG("Decompressed thumbnail: size=%ux%u", img->cols, img->rows);
   return img;
 error:
@@ -89,20 +88,20 @@ void
 put_image_obj_signature(struct odes *o, struct image_signature *sig)
 {
   /* signatures should be short enough to fit one attribute */
-  ASSERT(MAX_ATTR_SIZE > BASE224_ENC_LENGTH(sizeof(struct image_vector) + 4 + sig->len * sizeof(struct image_region)));
-  byte buf[MAX_ATTR_SIZE], *b = buf;
-  memcpy(b, &sig->vec, sizeof(struct image_vector));
-  b += sizeof(struct image_vector);
-  *b++ = sig->len;
-  *b++ = sig->df;
-  *(u16 *)b++ = sig->dh;
-  for (uns i = 0; i < sig->len; i++)
-    {
-      memcpy(b, sig->reg + i, sizeof(struct image_region));
-      b += sizeof(struct image_region);
-    }
-  uns len = b - buf;
-  byte b224[MAX_ATTR_SIZE];
-  b224[base224_encode(b224, buf, len)] = 0;
-  obj_set_attr(o, 'H', b224);
+  byte buf[MAX_ATTR_SIZE];
+  uns size = image_signature_size(sig->len);
+  ASSERT(MAX_ATTR_SIZE > BASE224_ENC_LENGTH(size));
+  buf[base224_encode(buf, (byte *)sig, size)] = 0;
+  obj_set_attr(o, 'H', buf);
+}
+
+uns
+get_image_obj_signature(struct image_signature *sig, struct odes *o)
+{
+  byte *a = obj_find_aval(o, 'H');
+  if (!a)
+    return 0;
+  UNUSED uns size = base224_decode((byte *)sig, a, strlen(a));
+  ASSERT(size == image_signature_size(sig->len));
+  return 1;
 }