extern uns *image_sig_prequant_thresholds;
extern uns image_sig_postquant_min_steps, image_sig_postquant_max_steps, image_sig_postquant_threshold;
extern double image_sig_textured_threshold;
+extern uns image_sig_compare_method;
#define IMAGE_VEC_F 6
#define IMAGE_REG_F IMAGE_VEC_F
#define IMAGE_SIG_TEXTURED 0x1
-/* Image signature (10 + len * 16 bytes) */
+/* Image signature (11 + len * 16 bytes) */
struct image_signature {
byte len; /* Number of regions */
byte flags; /* IMAGE_SIG_xxx */
struct image_region reg[IMAGE_REG_MAX];/* Feature vector for every region */
} PACKED;
+struct image_cluster {
+ union {
+ struct {
+ s32 dot; /* Dot product of the splitting plane */
+ s8 vec[IMAGE_VEC_F]; /* Normal vector of the splitting plane */
+ } PACKED;
+ struct {
+ u64 pos; /* Cluster size in bytes */
+ } PACKED;
+ } PACKED;
+} PACKED;
+
static inline uns
image_signature_size(uns len)
{
- return 4 + sizeof(struct image_vector) + len * sizeof(struct image_region);
+ return 5 + sizeof(struct image_vector) + len * sizeof(struct image_region);
}
/* sig-dump.c */
/* sig-cmp.c */
-#define IMAGE_SIG_DIST_SCALE (3 + 3 + 8 + 16)
-
uns image_signatures_dist(struct image_signature *sig1, struct image_signature *sig2);
+uns image_signatures_dist_explain(struct image_signature *sig1, struct image_signature *sig2, void (*msg)(byte *text, void *param), void *param);
#endif