Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libXISF for openSUSE:Factory checked in at 2023-08-28 17:17:10 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libXISF (Old) and /work/SRC/openSUSE:Factory/.libXISF.new.1766 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libXISF" Mon Aug 28 17:17:10 2023 rev:7 rq:1106269 version:0.2.9 Changes: -------- --- /work/SRC/openSUSE:Factory/libXISF/libXISF.changes 2023-06-14 16:32:31.047640305 +0200 +++ /work/SRC/openSUSE:Factory/.libXISF.new.1766/libXISF.changes 2023-08-28 17:17:13.812992273 +0200 @@ -1,0 +2,6 @@ +Mon Aug 28 09:24:58 UTC 2023 - Paolo Stivanin <i...@paolostivanin.com> + +- Update to 0.2.9: + * Support for ZSTD + +------------------------------------------------------------------- Old: ---- libXISF-0.2.8.tar.gz New: ---- libXISF-0.2.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libXISF.spec ++++++ --- /var/tmp/diff_new_pack.UF8AKu/_old 2023-08-28 17:17:14.985034361 +0200 +++ /var/tmp/diff_new_pack.UF8AKu/_new 2023-08-28 17:17:14.989034504 +0200 @@ -18,7 +18,7 @@ %define sover 0 Name: libXISF -Version: 0.2.8 +Version: 0.2.9 Release: 0 Summary: Library to read/write PixInsight XISF files License: GPL-3.0-or-later @@ -28,6 +28,7 @@ Patch0: fix-pkgconfig.patch BuildRequires: cmake BuildRequires: liblz4-devel +BuildRequires: libzstd-devel BuildRequires: pkg-config BuildRequires: pugixml-devel BuildRequires: zlib-devel ++++++ libXISF-0.2.8.tar.gz -> libXISF-0.2.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxisf/CMakeLists.txt new/libxisf/CMakeLists.txt --- old/libxisf/CMakeLists.txt 2023-06-13 12:25:13.000000000 +0200 +++ new/libxisf/CMakeLists.txt 2023-08-13 19:13:39.000000000 +0200 @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.14) -project(libXISF VERSION 0.2.8 LANGUAGES CXX C +project(libXISF VERSION 0.2.9 LANGUAGES CXX C HOMEPAGE_URL https://gitea.nouspiro.space/nou/libXISF DESCRIPTION "LibXISF is C++ library that can read and write XISF files produced by PixInsight.") @@ -94,6 +94,12 @@ set_target_properties(XISF PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION ${PROJECT_VERSION_MAJOR}) +pkg_check_modules(ZSTD libzstd IMPORTED_TARGET) +if(ZSTD_FOUND) + target_compile_definitions(XISF PRIVATE HAVE_ZSTD) + target_link_libraries(XISF PUBLIC PkgConfig::ZSTD) +endif(ZSTD_FOUND) + if(BUILD_SHARED_LIBS) target_compile_definitions(XISF PRIVATE LIBXISF_LIBRARY) else(BUILD_SHARED_LIBS) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxisf/libxisf.cpp new/libxisf/libxisf.cpp --- old/libxisf/libxisf.cpp 2023-06-13 12:25:13.000000000 +0200 +++ new/libxisf/libxisf.cpp 2023-08-13 19:13:39.000000000 +0200 @@ -27,6 +27,9 @@ #include <lz4hc.h> #include <pugixml.hpp> #include <zlib.h> +#ifdef HAVE_ZSTD +#include <zstd.h> +#endif #include "streambuffer.h" namespace LibXISF @@ -142,6 +145,15 @@ if(LZ4_decompress_safe(tmp.constData(), data.data(), tmp.size(), data.size()) < 0) throw Error("LZ4 decompression failed"); break; + case ZSTD: +#ifdef HAVE_ZSTD + data.resize(uncompressedSize); + if(ZSTD_isError(ZSTD_decompress(data.data(), data.size(), tmp.constData(), tmp.size()))) + throw Error("ZSTD decompression failed"); +#else + throw Error("ZSTD support not compiled"); +#endif + break; } byteUnshuffle(data, byteShuffling); @@ -192,9 +204,34 @@ data.resize(compSize); break; } + case ZSTD: + { +#ifdef HAVE_ZSTD + size_t compSize = 0; + data.resize(ZSTD_compressBound(uncompressedSize)); + compSize = ZSTD_compress(data.data(), data.size(), tmp.data(), tmp.size(), compressLevel < 0 ? ZSTD_CLEVEL_DEFAULT : compressLevel); + if(ZSTD_isError(compSize)) + throw Error("ZSTD compression failed"); + + data.resize(compSize); +#else + throw Error("ZSTD support not compiled"); +#endif + break; + } } } +bool DataBlock::CompressionCodecSupported(CompressionCodec codec) +{ + (void)codec; +#ifndef HAVE_ZSTD + if(codec == ZSTD) + return false; +#endif + return true; +} + Property::Property(const String &_id, const char *_value) : id(_id), value(_value) @@ -663,6 +700,10 @@ dataBlock.codec = DataBlock::LZ4HC; else if(compression[0].find("lz4") == 0) dataBlock.codec = DataBlock::LZ4; +#ifdef HAVE_ZSTD + else if(compression[0].find("zstd") == 0) + dataBlock.codec = DataBlock::ZSTD; +#endif else throw Error("Unknown compression codec"); @@ -988,6 +1029,12 @@ codec = "lz4"; else if(dataBlock.codec == DataBlock::LZ4HC) codec = "lz4hc"; + else if(dataBlock.codec == DataBlock::ZSTD) +#ifdef HAVE_ZSTD + codec = "zstd"; +#else + throw Error("ZSTD support not compiled"); +#endif if(dataBlock.byteShuffling > 1) codec += "+sh"; @@ -1149,6 +1196,10 @@ compressionCodecOverride = DataBlock::LZ4HC; else if(compression.find("lz4") == 0) compressionCodecOverride = DataBlock::LZ4; +#ifdef HAVE_ZSTD + else if(compression.find("zstd") == 0) + compressionCodecOverride = DataBlock::ZSTD; +#endif if(compression.find("+sh") != std::string::npos) byteShuffleOverride = true; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxisf/libxisf.h new/libxisf/libxisf.h --- old/libxisf/libxisf.h 2023-06-13 12:25:13.000000000 +0200 +++ new/libxisf/libxisf.h 2023-08-13 19:13:39.000000000 +0200 @@ -172,7 +172,8 @@ None, Zlib, LZ4, - LZ4HC + LZ4HC, + ZSTD }; bool embedded = false; uint32_t byteShuffling = 0; @@ -184,6 +185,8 @@ ByteArray data; void decompress(const ByteArray &input, const std::string &encoding = ""); void compress(int sampleFormatSize); + /// ZSTD compression can be disabled at compile time + static bool CompressionCodecSupported(CompressionCodec codec); }; struct LIBXISF_EXPORT Property diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libxisf/test/benchmark.cpp new/libxisf/test/benchmark.cpp --- old/libxisf/test/benchmark.cpp 2023-06-13 12:25:13.000000000 +0200 +++ new/libxisf/test/benchmark.cpp 2023-08-13 19:13:39.000000000 +0200 @@ -78,6 +78,17 @@ std::cout << "LZ4HC compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: " << size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl; } + if(DataBlock::CompressionCodecSupported(DataBlock::ZSTD)) + { + image.setCompression(DataBlock::ZSTD); + timer.start(); + XISFWriter writer; + writer.writeImage(image); + ByteArray xisfImage; + writer.save(xisfImage); + std::cout << "ZSTD compression \tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: " + << size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl; + } image.setByteshuffling(true); { image.setCompression(DataBlock::Zlib); @@ -109,6 +120,17 @@ std::cout << "LZ4HC compression SH\tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: " << size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl; } + if(DataBlock::CompressionCodecSupported(DataBlock::ZSTD)) + { + image.setCompression(DataBlock::ZSTD); + timer.start(); + XISFWriter writer; + writer.writeImage(image); + ByteArray xisfImage; + writer.save(xisfImage); + std::cout << "ZSTD compression SH\tElapsed time: " << timer.elapsed() << " " << "ms\tSpeed: " + << size/1024.0/1.024/timer.elapsed() << "MiB/s\tRatio: " << baseSize/xisfImage.size() << std::endl; + } } void benchmark()