X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=images%2Fduplicates.h;h=d824c8c81988d600fec5efb8588aa155fb48644c;hb=bc2bbfcbe76e78db9cde27455ddbcfe1ddcc61d6;hp=dd07b763cc6c4679817b2998b9db31a521cedd65;hpb=0e5c5828c3f3e1abd14bd012827e6b467075290b;p=libucw.git diff --git a/images/duplicates.h b/images/duplicates.h index dd07b763..d824c8c8 100644 --- a/images/duplicates.h +++ b/images/duplicates.h @@ -1,8 +1,41 @@ -#ifndef _IMAGES_DUP_CMP_H -#define _IMAGES_DUP_CMP_H +#ifndef _IMAGES_DUPLICATES_H +#define _IMAGES_DUPLICATES_H + +#ifdef CONFIG_UCW_CLEAN_ABI +#define image_dup_compare ucw_image_dup_compare +#define image_dup_context_cleanup ucw_image_dup_context_cleanup +#define image_dup_context_init ucw_image_dup_context_init +#define image_dup_estimate_size ucw_image_dup_estimate_size +#define image_dup_new ucw_image_dup_new +#endif + +enum image_dup_flags { + IMAGE_DUP_TRANS_ID = 0x0001, + IMAGE_DUP_FLIP_X = 0x0002, + IMAGE_DUP_FLIP_Y = 0x0004, + IMAGE_DUP_ROT_180 = 0x0008, + IMAGE_DUP_FLIP_BACK = 0x0010, + IMAGE_DUP_ROT_CCW = 0x0020, + IMAGE_DUP_ROT_CW = 0x0040, + IMAGE_DUP_FLIP_SLASH = 0x0080, + IMAGE_DUP_TRANS_ALL = 0x00ff, + IMAGE_DUP_SCALE = 0x0100, + IMAGE_DUP_WANT_ALL = 0x0200, +}; + +struct image_dup_context { + struct image_context *ic; + uint flags; + uint ratio_threshold; + uint error_threshold; + uint qtree_limit; + u64 sum_depth; + u64 sum_pixels; + uint error; +}; struct image_dup { - struct image *image; + struct image image; byte *tab_pixels; u32 tab_cols; u32 tab_rows; @@ -10,34 +43,23 @@ struct image_dup { u32 tab_size; }; -#define IMAGE_DUP_TRANS_ID 0x01 -#define IMAGE_DUP_FLIP_X 0x02 -#define IMAGE_DUP_FLIP_Y 0x04 -#define IMAGE_DUP_ROT_180 0x08 -#define IMAGE_DUP_FLIP_BACK 0x10 -#define IMAGE_DUP_ROT_CCW 0x20 -#define IMAGE_DUP_ROT_CW 0x40 -#define IMAGE_DUP_FLIP_SLASH 0x80 -#define IMAGE_DUP_TRANS_ALL 0xff -#define IMAGE_DUP_SCALE 0x100 -#define IMAGE_DUP_WANT_ALL 0x200 - /* dup-init.c */ -uns image_dup_init(struct image_context *ctx, struct image_dup *dup, struct image *image, struct mempool *pool); -uns image_dup_estimate_size(uns cols, uns rows); +void image_dup_context_init(struct image_context *ic, struct image_dup_context *ctx); +void image_dup_context_cleanup(struct image_dup_context *ctx); + +uint image_dup_estimate_size(uint cols, uint rows, uint same_size_compare, uint qtree_limit); +uint image_dup_new(struct image_dup_context *ctx, struct image *image, void *buffer, uint same_size_compare); /* dup-cmp.c */ -uns image_dup_compare(struct image_dup *dup1, struct image_dup *dup2, uns flags); +uint image_dup_compare(struct image_dup_context *ctx, struct image_dup *dup1, struct image_dup *dup2); /* internals */ -static inline byte * -image_dup_block(struct image_dup *dup, uns tab_col, uns tab_row) +static inline byte *image_dup_block(struct image_dup *dup, uint tab_col, uint tab_row) { return dup->tab_pixels + (dup->tab_row_size << tab_row) + (3 << (tab_row + tab_col)); } - #endif