File 0001-Fix-build-with-libheif-1.20.patch of Package krita
From 169339accb9e4e0e0e9921176c5cd60d340b7b04 Mon Sep 17 00:00:00 2001
From: Halla Rempt <halla@valdyas.org>
Date: Thu, 10 Jul 2025 10:08:24 +0200
Subject: [PATCH] Fix build with libheif 1.20
https://github.com/strukturag/libheif/issues/1419 introduced a
source incompatible api change, this patch by Brad Smith make
Krita build with 1.20. I've also checked with 1.15.2, which we
use and it still builds.
BUG:506778
(cherry picked from commit 6ad4fa68a9e1ce06fc884e34f3cedcdd4b9a2076)
---
plugins/impex/heif/HeifExport.cpp | 24 +++++++++++++++---------
plugins/impex/heif/HeifImport.cpp | 22 ++++++++++++++--------
2 files changed, 29 insertions(+), 17 deletions(-)
diff --git a/plugins/impex/heif/HeifExport.cpp b/plugins/impex/heif/HeifExport.cpp
index 3e70cf925e..ccbc8034b5 100644
--- a/plugins/impex/heif/HeifExport.cpp
+++ b/plugins/impex/heif/HeifExport.cpp
@@ -137,6 +137,12 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
HeifLock lock;
#endif
+#if LIBHEIF_HAVE_VERSION(1, 20, 0)
+ using HeifStrideType = size_t;
+#else
+ using HeifStrideType = int;
+#endif
+
KisImageSP image = document->savingImage();
const KoColorSpace *cs = image->colorSpace();
@@ -250,10 +256,10 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
img.add_plane(heif_channel_G, width,height, 8);
img.add_plane(heif_channel_B, width,height, 8);
- int strideR = 0;
- int strideG = 0;
- int strideB = 0;
- int strideA = 0;
+ HeifStrideType strideR = 0;
+ HeifStrideType strideG = 0;
+ HeifStrideType strideB = 0;
+ HeifStrideType strideA = 0;
uint8_t *ptrR = img.get_plane(heif_channel_R, &strideR);
uint8_t *ptrG = img.get_plane(heif_channel_G, &strideG);
@@ -289,7 +295,7 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
img.create(width, height, heif_colorspace_RGB, chroma);
img.add_plane(heif_channel_interleaved, width, height, 12);
- int stride = 0;
+ HeifStrideType stride = 0;
uint8_t *ptr = img.get_plane(heif_channel_interleaved, &stride);
@@ -330,8 +336,8 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
img.add_plane(heif_channel_Y, width, height, 8);
- int strideG = 0;
- int strideA = 0;
+ HeifStrideType strideG = 0;
+ HeifStrideType strideA = 0;
uint8_t *ptrG = img.get_plane(heif_channel_Y, &strideG);
uint8_t *ptrA = [&]() -> uint8_t * {
@@ -363,8 +369,8 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
img.add_plane(heif_channel_Y, width, height, 12);
- int strideG = 0;
- int strideA = 0;
+ HeifStrideType strideG = 0;
+ HeifStrideType strideA = 0;
uint8_t *ptrG = img.get_plane(heif_channel_Y, &strideG);
uint8_t *ptrA = [&]() -> uint8_t * {
diff --git a/plugins/impex/heif/HeifImport.cpp b/plugins/impex/heif/HeifImport.cpp
index 3c1a52cc28..6bceea85eb 100644
--- a/plugins/impex/heif/HeifImport.cpp
+++ b/plugins/impex/heif/HeifImport.cpp
@@ -214,6 +214,12 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
HeifLock lock;
#endif
+#if LIBHEIF_HAVE_VERSION(1, 20, 0)
+ using HeifStrideType = size_t;
+#else
+ using HeifStrideType = int;
+#endif
+
// Wrap input stream into heif Reader object
Reader_QIODevice reader(io);
@@ -387,8 +393,8 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
if (heifChroma == heif_chroma_monochrome) {
dbgFile << "monochrome heif file, bits:" << luma;
- int strideG = 0;
- int strideA = 0;
+ HeifStrideType strideG = 0;
+ HeifStrideType strideA = 0;
const uint8_t *imgG = heifimage.get_plane(heif_channel_Y, &strideG);
const uint8_t *imgA =
heifimage.get_plane(heif_channel_Alpha, &strideA);
@@ -409,10 +415,10 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
} else if (heifChroma == heif_chroma_444) {
dbgFile << "planar heif file, bits:" << luma;
- int strideR = 0;
- int strideG = 0;
- int strideB = 0;
- int strideA = 0;
+ HeifStrideType strideR = 0;
+ HeifStrideType strideG = 0;
+ HeifStrideType strideB = 0;
+ HeifStrideType strideA = 0;
const uint8_t* imgR = heifimage.get_plane(heif_channel_R, &strideR);
const uint8_t* imgG = heifimage.get_plane(heif_channel_G, &strideG);
const uint8_t* imgB = heifimage.get_plane(heif_channel_B, &strideB);
@@ -439,7 +445,7 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
displayNits,
colorSpace);
} else if (heifChroma == heif_chroma_interleaved_RGB || heifChroma == heif_chroma_interleaved_RGBA) {
- int stride = 0;
+ HeifStrideType stride = 0;
dbgFile << "interleaved SDR heif file, bits:" << luma;
const uint8_t *img = heifimage.get_plane(heif_channel_interleaved, &stride);
@@ -461,7 +467,7 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
colorSpace);
} else if (heifChroma == heif_chroma_interleaved_RRGGBB_LE || heifChroma == heif_chroma_interleaved_RRGGBBAA_LE || heifChroma == heif_chroma_interleaved_RRGGBB_BE || heifChroma == heif_chroma_interleaved_RRGGBB_BE) {
- int stride = 0;
+ HeifStrideType stride = 0;
dbgFile << "interleaved HDR heif file, bits:" << luma;
const uint8_t *img =
--
2.50.0