diff options
| author | Mattias Andrée <m@maandree.se> | 2026-02-25 21:56:05 +0100 |
|---|---|---|
| committer | Mattias Andrée <m@maandree.se> | 2026-02-25 21:56:05 +0100 |
| commit | 0f3b0c170753f69bb7eab56b8d7818ea32b97afa (patch) | |
| tree | 14ad876af4e25bceb292474ed56be421492133a0 /libquanta_vquantise_wu.c | |
| parent | Fix whitespace (diff) | |
| download | libquanta-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>
Diffstat (limited to 'libquanta_vquantise_wu.c')
| -rw-r--r-- | libquanta_vquantise_wu.c | 17 |
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; |
