File 0001-Fix-compilation-with-heif-1.20.2.patch of Package krita
From 6da631dcb7599537b0aa7c1c3982e1a0ceee5e4e Mon Sep 17 00:00:00 2001
From: Dmitry Kazakov <dimula73@gmail.com>
Date: Thu, 14 Aug 2025 14:08:40 +0200
Subject: [PATCH] Fix compilation with heif 1.20.2
They changed API again (reverted the original patch)
https://github.com/strukturag/libheif/commit/b8deaab965a2860df9824c8813f55953e8d2812b
krita#12
---
plugins/impex/heif/HeifExport.cpp | 26 ++++++++++++++++----------
plugins/impex/heif/HeifImport.cpp | 23 ++++++++++++++---------
2 files changed, 30 insertions(+), 19 deletions(-)
diff --git a/plugins/impex/heif/HeifExport.cpp b/plugins/impex/heif/HeifExport.cpp
index ccbc803..ab38ca7 100644
--- a/plugins/impex/heif/HeifExport.cpp
+++ b/plugins/impex/heif/HeifExport.cpp
@@ -137,12 +137,18 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
HeifLock lock;
#endif
-#if LIBHEIF_HAVE_VERSION(1, 20, 0)
+#if LIBHEIF_HAVE_VERSION(1, 20, 2)
using HeifStrideType = size_t;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane2));
+#elif LIBHEIF_HAVE_VERSION(1, 20, 0)
+ using HeifStrideType = size_t;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane));
#else
using HeifStrideType = int;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane));
#endif
+
KisImageSP image = document->savingImage();
const KoColorSpace *cs = image->colorSpace();
@@ -261,14 +267,14 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
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);
- uint8_t *ptrB = img.get_plane(heif_channel_B, &strideB);
+ uint8_t *ptrR = heifGetPlaneMethod(img, heif_channel_R, &strideR);
+ uint8_t *ptrG = heifGetPlaneMethod(img, heif_channel_G, &strideG);
+ uint8_t *ptrB = heifGetPlaneMethod(img, heif_channel_B, &strideB);
uint8_t *ptrA = [&]() -> uint8_t * {
if (hasAlpha) {
img.add_plane(heif_channel_Alpha, width, height, 8);
- return img.get_plane(heif_channel_Alpha, &strideA);
+ return heifGetPlaneMethod(img, heif_channel_Alpha, &strideA);
} else {
return nullptr;
}
@@ -297,7 +303,7 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
HeifStrideType stride = 0;
- uint8_t *ptr = img.get_plane(heif_channel_interleaved, &stride);
+ uint8_t *ptr = heifGetPlaneMethod(img, heif_channel_interleaved, &stride);
KisPaintDeviceSP pd = image->projection();
KisHLineConstIteratorSP it =
@@ -339,11 +345,11 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
HeifStrideType strideG = 0;
HeifStrideType strideA = 0;
- uint8_t *ptrG = img.get_plane(heif_channel_Y, &strideG);
+ uint8_t *ptrG = heifGetPlaneMethod(img, heif_channel_Y, &strideG);
uint8_t *ptrA = [&]() -> uint8_t * {
if (hasAlpha) {
img.add_plane(heif_channel_Alpha, width, height, 8);
- return img.get_plane(heif_channel_Alpha, &strideA);
+ return heifGetPlaneMethod(img, heif_channel_Alpha, &strideA);
} else {
return nullptr;
}
@@ -372,11 +378,11 @@ KisImportExportErrorCode HeifExport::convert(KisDocument *document, QIODevice *i
HeifStrideType strideG = 0;
HeifStrideType strideA = 0;
- uint8_t *ptrG = img.get_plane(heif_channel_Y, &strideG);
+ uint8_t *ptrG = heifGetPlaneMethod(img, heif_channel_Y, &strideG);
uint8_t *ptrA = [&]() -> uint8_t * {
if (hasAlpha) {
img.add_plane(heif_channel_Alpha, width, height, 12);
- return img.get_plane(heif_channel_Alpha, &strideA);
+ return heifGetPlaneMethod(img, heif_channel_Alpha, &strideA);
} else {
return nullptr;
}
diff --git a/plugins/impex/heif/HeifImport.cpp b/plugins/impex/heif/HeifImport.cpp
index 6bceea8..aab60c0 100644
--- a/plugins/impex/heif/HeifImport.cpp
+++ b/plugins/impex/heif/HeifImport.cpp
@@ -214,10 +214,15 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
HeifLock lock;
#endif
-#if LIBHEIF_HAVE_VERSION(1, 20, 0)
+#if LIBHEIF_HAVE_VERSION(1, 20, 2)
using HeifStrideType = size_t;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane2));
+#elif LIBHEIF_HAVE_VERSION(1, 20, 0)
+ using HeifStrideType = size_t;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane));
#else
using HeifStrideType = int;
+ auto heifGetPlaneMethod = std::mem_fn(qNonConstOverload<heif_channel, HeifStrideType*>(&heif::Image::get_plane));
#endif
// Wrap input stream into heif Reader object
@@ -395,9 +400,9 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
dbgFile << "monochrome heif file, bits:" << luma;
HeifStrideType strideG = 0;
HeifStrideType strideA = 0;
- const uint8_t *imgG = heifimage.get_plane(heif_channel_Y, &strideG);
+ const uint8_t *imgG = heifGetPlaneMethod(heifimage, heif_channel_Y, &strideG);
const uint8_t *imgA =
- heifimage.get_plane(heif_channel_Alpha, &strideA);
+ heifGetPlaneMethod(heifimage, heif_channel_Alpha, &strideA);
const int width = heifimage.get_width(heif_channel_Y);
const int height = heifimage.get_height(heif_channel_Y);
KisHLineIteratorSP it =
@@ -419,11 +424,11 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
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);
+ const uint8_t* imgR = heifGetPlaneMethod(heifimage, heif_channel_R, &strideR);
+ const uint8_t* imgG = heifGetPlaneMethod(heifimage, heif_channel_G, &strideG);
+ const uint8_t* imgB = heifGetPlaneMethod(heifimage, heif_channel_B, &strideB);
const uint8_t *imgA =
- heifimage.get_plane(heif_channel_Alpha, &strideA);
+ heifGetPlaneMethod(heifimage, heif_channel_Alpha, &strideA);
KisHLineIteratorSP it = layer->paintDevice()->createHLineIteratorNG(0, 0, width);
Planar::readPlanarLayer(luma,
@@ -448,7 +453,7 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
HeifStrideType stride = 0;
dbgFile << "interleaved SDR heif file, bits:" << luma;
- const uint8_t *img = heifimage.get_plane(heif_channel_interleaved, &stride);
+ const uint8_t *img = heifGetPlaneMethod(heifimage, heif_channel_interleaved, &stride);
width = heifimage.get_width(heif_channel_interleaved);
height = heifimage.get_height(heif_channel_interleaved);
KisHLineIteratorSP it =
@@ -471,7 +476,7 @@ KisImportExportErrorCode HeifImport::convert(KisDocument *document, QIODevice *i
dbgFile << "interleaved HDR heif file, bits:" << luma;
const uint8_t *img =
- heifimage.get_plane(heif_channel_interleaved, &stride);
+ heifGetPlaneMethod(heifimage, heif_channel_interleaved, &stride);
KisHLineIteratorSP it =
layer->paintDevice()->createHLineIteratorNG(0, 0, width);
--
2.50.1