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

openSUSE Build Service is sponsored by