aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMattias Andrée <m@maandree.se>2026-02-25 21:56:05 +0100
committerMattias Andrée <m@maandree.se>2026-02-25 21:56:05 +0100
commit0f3b0c170753f69bb7eab56b8d7818ea32b97afa (patch)
tree14ad876af4e25bceb292474ed56be421492133a0
parentFix whitespace (diff)
downloadlibquanta-0f3b0c170753f69bb7eab56b8d7818ea32b97afa.tar.gz
libquanta-0f3b0c170753f69bb7eab56b8d7818ea32b97afa.tar.bz2
libquanta-0f3b0c170753f69bb7eab56b8d7818ea32b97afa.tar.xz
Fix bug (incorrect update to histogram)
Signed-off-by: Mattias Andrée <m@maandree.se>
-rw-r--r--libquanta_vquantise_wu.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/libquanta_vquantise_wu.c b/libquanta_vquantise_wu.c
index 3ddbe67..a303f78 100644
--- a/libquanta_vquantise_wu.c
+++ b/libquanta_vquantise_wu.c
@@ -69,6 +69,21 @@ compute_histogram(struct libquanta_image *image, struct histogram *histogram, st
v <<= channels[ch].colour_shift_up;
v += 1U;
index += v * channels[ch].subindex_multiplier;
+ }
+ for (ch = nchannels; ch--;) {
+ i = y * channels[ch].ch->image_row_size;
+ i += x * channels[ch].ch->image_cell_size;
+ p = &((const char *)channels[ch].ch->image)[i];
+ if (channels[ch].ch->bits_in <= 8)
+ v = *(const uint8_t *)p;
+ else if (channels[ch].ch->bits_in <= 16)
+ v = *(const uint16_t *)p;
+ else if (channels[ch].ch->bits_in <= 32)
+ v = *(const uint32_t *)p;
+ else if (channels[ch].ch->bits_in <= 64)
+ v = *(const uint64_t *)p;
+ else
+ abort();
libj2_j2u_add_ju(&channels[ch].histogram[index], v);
}
histogram[index].occurrences += 1U;
@@ -437,7 +452,7 @@ top_over_j2us_(const struct cube *cube, size_t channel, size_t position, const s
static void
top_over_j2us(const struct cube *cube, size_t channel, size_t position, const struct libj2_j2u *data,
- const struct channel_data *channels, size_t nchannels, struct libj2_j2u *result)
+ const struct channel_data *channels, size_t nchannels, struct libj2_j2u *result)
{
int use_addition = (int)(~nchannels & 1U);
result->high = 0;