Index | Thread | Search

From:
Brad Smith <brad@comstyle.com>
Subject:
UPDATE: Krita - libheif
To:
Rafael Sadowski <rsadowski@openbsd.org>
Cc:
ports@openbsd.org
Date:
Thu, 10 Jul 2025 04:58:07 -0400

Download raw body.

Thread
Here is a diff to fix building Krita with libheif 1.20.


Index: Makefile
===================================================================
RCS file: /cvs/ports/graphics/krita/Makefile,v
retrieving revision 1.79
diff -u -p -u -p -r1.79 Makefile
--- Makefile	4 Jul 2025 18:34:33 -0000	1.79
+++ Makefile	10 Jul 2025 08:55:30 -0000
@@ -2,6 +2,7 @@ COMMENT =	advanced drawing and image man
 
 VERSION =	5.2.10
 DISTNAME =	krita-${VERSION}
+REVISION =	0
 
 SHARED_LIBS +=  kritabasicflakes          4.1 # 16.0
 SHARED_LIBS +=  kritacolord               2.0 # 16.0
Index: patches/patch-plugins_impex_heif_HeifExport_cpp
===================================================================
RCS file: patches/patch-plugins_impex_heif_HeifExport_cpp
diff -N patches/patch-plugins_impex_heif_HeifExport_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-plugins_impex_heif_HeifExport_cpp	10 Jul 2025 08:55:30 -0000
@@ -0,0 +1,65 @@
+Fix build with libheif 1.20
+169339accb9e4e0e0e9921176c5cd60d340b7b04
+
+Index: plugins/impex/heif/HeifExport.cpp
+--- plugins/impex/heif/HeifExport.cpp.orig
++++ plugins/impex/heif/HeifExport.cpp
+@@ -137,6 +137,12 @@ KisImportExportErrorCode HeifExport::convert(KisDocume
+     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(KisDocume
+                 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(KisDocume
+                 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(KisDocume
+ 
+                 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(KisDocume
+ 
+                 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 * {
Index: patches/patch-plugins_impex_heif_HeifImport_cpp
===================================================================
RCS file: patches/patch-plugins_impex_heif_HeifImport_cpp
diff -N patches/patch-plugins_impex_heif_HeifImport_cpp
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-plugins_impex_heif_HeifImport_cpp	10 Jul 2025 08:55:30 -0000
@@ -0,0 +1,63 @@
+Fix build with libheif 1.20
+169339accb9e4e0e0e9921176c5cd60d340b7b04
+
+Index: plugins/impex/heif/HeifImport.cpp
+--- plugins/impex/heif/HeifImport.cpp.orig
++++ plugins/impex/heif/HeifImport.cpp
+@@ -214,6 +214,12 @@ KisImportExportErrorCode HeifImport::convert(KisDocume
+     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(KisDocume
+ 
+         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(KisDocume
+         } 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(KisDocume
+                                     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(KisDocume
+                                       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 =