Commit 95b8a6c7 for libheif
commit 95b8a6c75b1d1baeb701f73b346d907c2a3f8977
Author: Brad Hards <bradh@frogmouth.net>
Date: Tue Jun 23 09:36:35 2026 +1000
Fix pixi writing for multi-channel cases
Resolves #1847
diff --git a/libheif/image-items/image_item.cc b/libheif/image-items/image_item.cc
index ef813535..7495d766 100644
--- a/libheif/image-items/image_item.cc
+++ b/libheif/image-items/image_item.cc
@@ -333,14 +333,14 @@ Result<Encoder::CodedImageData> ImageItem::encode_to_bitstream_and_boxes(const s
valid_pixi = pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Y));
}
else if (colorspace == heif_colorspace_YCbCr) {
- valid_pixi = (pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Y)) ||
- pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Cb)) ||
+ valid_pixi = (pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Y)) &&
+ pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Cb)) &&
pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_Cr)));
}
else if (colorspace == heif_colorspace_RGB) {
if (chroma == heif_chroma_444) {
- valid_pixi = (pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_R)) ||
- pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_G)) ||
+ valid_pixi = (pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_R)) &&
+ pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_G)) &&
pixi->add_channel_bits(image->get_bits_per_pixel(heif_channel_B)));
}
else if (chroma == heif_chroma_interleaved_RGB ||
@@ -350,8 +350,8 @@ Result<Encoder::CodedImageData> ImageItem::encode_to_bitstream_and_boxes(const s
chroma == heif_chroma_interleaved_RRGGBBAA_LE ||
chroma == heif_chroma_interleaved_RRGGBBAA_BE) {
uint16_t bpp = image->get_bits_per_pixel(heif_channel_interleaved);
- valid_pixi = (pixi->add_channel_bits(bpp) ||
- pixi->add_channel_bits(bpp) ||
+ valid_pixi = (pixi->add_channel_bits(bpp) &&
+ pixi->add_channel_bits(bpp) &&
pixi->add_channel_bits(bpp));
}
}