* of the GNU Lesser General Public License.
*/
-#define LOCAL_DEBUG
+#undef LOCAL_DEBUG
-#include "sherlock/sherlock.h"
+#include "lib/lib.h"
#include "lib/conf.h"
#include "lib/heap.h"
#include "images/images.h"
prequant_finish_region(struct image_sig_region *region)
{
if (region->count < 2)
- memcpy(region->c, region->a, sizeof(region->c));
+ {
+ region->e = 0;
+ }
else
{
u64 a = 0;
DBG("Step... regions_count=%u heap_count=%u region->count=%u, region->e=%u",
regions_count, heap_count, region->count, (uns)region->e);
if (region->count < 2 ||
- region->e < image_sig_prequant_thresholds[regions_count - 1] * region->count)
+ region->e < image_sig_prequant_thresholds[regions_count - 1] * blocks_count)
{
HEAP_DELMIN(struct image_sig_region *, heap, heap_count, prequant_heap_cmp, HEAP_SWAP);
continue;
}
- /* Select axis to split - the one with maximum covariance */
+ /* Select axis to split - the one with maximum average quadratic error */
axis = 0;
u64 cov = (u64)region->count * region->c[0] - (u64)region->b[0] * region->b[0];
for (uns i = 1; i < 6; i++)
cval++;
}
}
-
+
/* Select split value - to minimize error */
uns b1 = val[0] * cnt[0];
uns c1 = isqr(val[0]) * cnt[0];
c2 -= c0;
i += cnt[k];
j -= cnt[k];
- u64 err = (u64)c1 - (u64)b1 * b1 / i + (u64)c2 - (u64)b2 * b2 / j;
+ u64 err = (u64)c1 - (u64)b1 * b1 / i + (u64)c2 - (u64)b2 * b2 / j;
if (err < best_err)
{
best_err = err;
split_val = val[k];
}
}
- DBG("split_val=%u best_err=%Lu b[axis]=%u c[axis]=%u", split_val, (long long)best_err, region->b[axis], region->c[axis]);
+ DBG("split_val=%u best_err=%llu b[axis]=%u c[axis]=%u", split_val, (long long)best_err, region->b[axis], region->c[axis]);
/* Split region */
block = region->blocks;
if (error > last_error)
break;
u64 dif = last_error - error;
- if (dif * image_sig_postquant_threshold < last_error * 100)
+ if (dif * image_sig_postquant_threshold < (u64)last_error * 100)
break;
}
}