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-05-25 23:52:26
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/libXISF (Old)
 and      /work/SRC/openSUSE:Factory/.libXISF.new.1533 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "libXISF"

Thu May 25 23:52:26 2023 rev:4 rq:1088998 version:0.2.5

Changes:
--------
--- /work/SRC/openSUSE:Factory/libXISF/libXISF.changes  2023-04-12 
12:52:24.441214948 +0200
+++ /work/SRC/openSUSE:Factory/.libXISF.new.1533/libXISF.changes        
2023-05-25 23:52:38.663648911 +0200
@@ -1,0 +2,9 @@
+Thu May 25 06:44:00 UTC 2023 - Paolo Stivanin <i...@paolostivanin.com>
+
+- Update to 0.2.5:
+  * Add method to for ICC profile
+  * Add StreamBuffer to optimize save/load from memory
+  * Add support for thumbnail
+- Add fix-pkgconfig.patch
+
+-------------------------------------------------------------------

Old:
----
  libXISF-0.2.3.tar.gz

New:
----
  fix-pkgconfig.patch
  libXISF-0.2.5.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ libXISF.spec ++++++
--- /var/tmp/diff_new_pack.DxAAYu/_old  2023-05-25 23:52:39.127651635 +0200
+++ /var/tmp/diff_new_pack.DxAAYu/_new  2023-05-25 23:52:39.135651682 +0200
@@ -18,14 +18,17 @@
 
 %define sover 0
 Name:           libXISF
-Version:        0.2.3
+Version:        0.2.5
 Release:        0
 Summary:        Library to read/write PixInsight XISF files
 License:        GPL-3.0-or-later
 URL:            https://gitea.nouspiro.space/nou/libXISF
 Source:         
https://gitea.nouspiro.space/nou/libXISF/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
+# PATCH-FIX-UPSTREAM
+Patch0:         fix-pkgconfig.patch
 BuildRequires:  cmake
 BuildRequires:  liblz4-devel
+BuildRequires:  pkg-config
 BuildRequires:  pugixml-devel
 BuildRequires:  zlib-devel
 BuildRequires:  cmake(Qt5Core) >= 5.14.0
@@ -83,5 +86,6 @@
 %{_includedir}/libXISF_global.h
 %{_includedir}/libxisf.h
 %{_libdir}/libXISF.so
+%{_libdir}/pkgconfig/libxisf.pc
 
 %changelog

++++++ fix-pkgconfig.patch ++++++
--- libxisf/libxisf.pc.in.orig  2023-05-25 11:33:46.092163914 +0200
+++ libxisf/libxisf.pc.in       2023-05-25 11:38:50.753870840 +0200
@@ -7,7 +7,5 @@
 Description: @CMAKE_PROJECT_DESCRIPTION@
 URL: @CMAKE_PROJECT_HOMEPAGE_URL@
 Version: @PROJECT_VERSION@
-Requires.private: @PC_LIBS_REQUIRE@
 Cflags: -I"${includedir}"
 Libs: -L"${libdir}" -lXISF
-Libs.private: -L"${libdir}" @PC_LIBS_REQUIRE@

++++++ libXISF-0.2.3.tar.gz -> libXISF-0.2.5.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-04-11 12:25:14.000000000 +0200
+++ new/libxisf/CMakeLists.txt  2023-05-24 16:28:11.000000000 +0200
@@ -1,6 +1,8 @@
 cmake_minimum_required(VERSION 3.14)
 
-project(libXISF VERSION 0.2.3 LANGUAGES CXX C)
+project(libXISF VERSION 0.2.5 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.")
 
 include(CMakeDependentOption)
 
@@ -16,7 +18,7 @@
 cmake_dependent_option(USE_BUNDLED_PUGIXML "Use bundled PugiXML" ON 
"USE_BUNDLED_LIBS" OFF)
 cmake_dependent_option(USE_BUNDLED_ZLIB "Use bundled Zlib" ON 
"USE_BUNDLED_LIBS" OFF)
 
-find_package(PkgConfig REQUIRED)
+find_package(PkgConfig)
 
 if(USE_BUNDLED_LZ4)
     list(APPEND THIRD_PARTY_SRC
@@ -64,6 +66,8 @@
   libXISF_global.h
   libxisf.cpp
   libxisf.h
+  streambuffer.cpp
+  streambuffer.h
   utils.cpp
   variant.cpp
   ${THIRD_PARTY_SRC}
@@ -73,15 +77,19 @@
     target_include_directories(XISF PRIVATE ${THIRD_PARTY_INCLUDE})
     if(NOT USE_BUNDLED_LZ4)
         target_link_libraries(XISF PUBLIC PkgConfig::LZ4)
+        list(APPEND PC_LIBS_REQUIRE lz4)
     endif(NOT USE_BUNDLED_LZ4)
     if(NOT USE_BUNDLED_PUGIXML)
         target_link_libraries(XISF PUBLIC PkgConfig::PUGIXML)
+        list(APPEND PC_LIBS_REQUIRE pugixml)
     endif(NOT USE_BUNDLED_PUGIXML)
     if(NOT USE_BUNDLED_ZLIB)
         target_link_libraries(XISF PUBLIC PkgConfig::ZLIB)
+        list(APPEND PC_LIBS_REQUIRE zlib)
     endif(NOT USE_BUNDLED_ZLIB)
 else(USE_BUNDLED_LIBS)
     target_link_libraries(XISF PUBLIC PkgConfig::LZ4 PkgConfig::PUGIXML 
PkgConfig::ZLIB)
+    list(APPEND PC_LIBS_REQUIRE lz4 pugixml zlib)
 endif(USE_BUNDLED_LIBS)
 
 set_target_properties(XISF PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 
${PROJECT_VERSION_MAJOR})
@@ -97,8 +105,11 @@
 include(GNUInstallDirs)
 
 install(FILES ${XISF_PUBLIC_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/libxisf.pc DESTINATION 
${CMAKE_INSTALL_LIBDIR}/pkgconfig)
 install(TARGETS XISF LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
 
+configure_file(libxisf.pc.in libxisf.pc @ONLY)
+
 #testing
 
 enable_testing()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxisf/libxisf.cpp new/libxisf/libxisf.cpp
--- old/libxisf/libxisf.cpp     2023-04-11 12:25:14.000000000 +0200
+++ new/libxisf/libxisf.cpp     2023-05-24 16:28:11.000000000 +0200
@@ -27,6 +27,7 @@
 #include <lz4hc.h>
 #include <pugixml.hpp>
 #include <zlib.h>
+#include "streambuffer.h"
 
 namespace LibXISF
 {
@@ -357,6 +358,16 @@
     return false;
 }
 
+const ByteArray &Image::iccProfile() const
+{
+    return _iccProfile;
+}
+
+void Image::setIccProfile(const ByteArray &iccProfile)
+{
+    _iccProfile = iccProfile;
+}
+
 void *Image::imageData()
 {
     return _dataBlock.data.size() ? _dataBlock.data.data() : nullptr;
@@ -520,6 +531,7 @@
      *  @param readPixel when false it will read pixel data from file and 
imageData()
      *  will return nullptr */
     const Image& getImage(uint32_t n, bool readPixels = true);
+    const Image& getThumbnail();
 private:
     void readXISFHeader();
     void readSignature();
@@ -531,7 +543,9 @@
     Image parseImage(const pugi::xml_node &node);
 
     std::unique_ptr<std::istream> _io;
+    std::unique_ptr<StreamBuffer> _buffer;
     std::vector<Image> _images;
+    Image _thumbnail;
     std::vector<Property> _properties;
 };
 
@@ -546,8 +560,8 @@
 void XISFReaderPrivate::open(const ByteArray &data)
 {
     close();
-    std::string str((char*)data.data(), data.size());
-    _io = std::make_unique<std::istringstream>(str, std::ios_base::in | 
std::ios_base::binary);
+    _buffer = std::make_unique<StreamBuffer>(data);
+    _io = std::make_unique<std::istream>(_buffer.get());
     readSignature();
     readXISFHeader();
 }
@@ -563,6 +577,7 @@
 void XISFReaderPrivate::close()
 {
     _io.reset();
+    _buffer.reset();
     _images.clear();
     _properties.clear();
 }
@@ -588,6 +603,19 @@
     return img;
 }
 
+const Image &XISFReaderPrivate::getThumbnail()
+{
+    Image &img = _thumbnail;
+    if(_thumbnail._dataBlock.attachmentPos)
+    {
+        _io->seekg(img._dataBlock.attachmentPos);
+        ByteArray data(img._dataBlock.attachmentSize);
+        _io->read(data.data(), data.size());
+        img._dataBlock.decompress(data);
+    }
+    return _thumbnail;
+}
+
 void XISFReaderPrivate::readXISFHeader()
 {
     uint32_t headerLen[2] = {0};
@@ -608,6 +636,9 @@
 
         for(auto &property : root.children("Property"))
             _properties.push_back(parseProperty(property));
+
+        if(root.child("Thumbnail"))
+            _thumbnail = parseImage(root.child("Thumbnail"));
     }
     else throw Error("Unknown root XML element");
 }
@@ -784,6 +815,9 @@
         image._iccProfile = icc.data;
     }
 
+    if(node.child("Thumbnail") && std::strcmp(node.name(), "Thumbnail"))
+        _thumbnail = parseImage(node.child("Thumbnail"));
+
     return image;
 }
 
@@ -818,10 +852,10 @@
 
 void XISFWriterPrivate::save(ByteArray &data)
 {
-    std::ostringstream oss;
+    StreamBuffer buffer;
+    std::ostream oss(&buffer);
     save(oss);
-    std::string str = oss.str();
-    data = ByteArray(str.data(), str.size());
+    data = buffer.byteArray();
 }
 
 void XISFWriterPrivate::save(std::ostream &io)
@@ -1034,6 +1068,11 @@
     return p->getImage(n, readPixels);
 }
 
+const Image &XISFReader::getThumbnail()
+{
+    return p->getThumbnail();
+}
+
 XISFWriter::XISFWriter()
 {
     p = new XISFWriterPrivate;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxisf/libxisf.h new/libxisf/libxisf.h
--- old/libxisf/libxisf.h       2023-04-11 12:25:14.000000000 +0200
+++ new/libxisf/libxisf.h       2023-05-24 16:28:11.000000000 +0200
@@ -301,6 +301,8 @@
      *  For example OBSERVER => Observer:Name, SITELAT => 
Observation:Location:Latitude
     */
     bool addFITSKeywordAsProperty(const String &name, const String &value);
+    const ByteArray& iccProfile() const;
+    void setIccProfile(const ByteArray &iccProfile);
 
     void* imageData();
     const void* imageData() const;
@@ -364,9 +366,14 @@
     int imagesCount() const;
     /** Return reference to Image
      *  @param n index of image
-     *  @param readPixel when false it will read pixel data from file and 
imageData()
-     *  will return nullptr */
+     *  @param readPixel when false it will not read pixel data from file and 
imageData()
+     *  will return nullptr. Other properties like width, height, format etc 
will be returned correctly */
     const Image& getImage(uint32_t n, bool readPixels = true);
+    /**
+     * @brief getThumbnail
+     * @return image thumbnail
+     */
+    const Image& getThumbnail();
 private:
     XISFReaderPrivate *p;
 };
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxisf/libxisf.pc.in new/libxisf/libxisf.pc.in
--- old/libxisf/libxisf.pc.in   1970-01-01 01:00:00.000000000 +0100
+++ new/libxisf/libxisf.pc.in   2023-05-24 16:28:11.000000000 +0200
@@ -0,0 +1,13 @@
+prefix="@CMAKE_INSTALL_PREFIX@"
+exec_prefix="${prefix}"
+libdir="${exec_prefix}/@CMAKE_INSTALL_LIBDIR@"
+includedir="${prefix}/@CMAKE_INSTALL_INCLUDEDIR@"
+
+Name: @PROJECT_NAME@
+Description: @CMAKE_PROJECT_DESCRIPTION@
+URL: @CMAKE_PROJECT_HOMEPAGE_URL@
+Version: @PROJECT_VERSION@
+Requires.private: @PC_LIBS_REQUIRE@
+Cflags: -I"${includedir}"
+Libs: -L"${libdir}" -lXISF
+Libs.private: -L"${libdir}" @PC_LIBS_REQUIRE@
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxisf/streambuffer.cpp new/libxisf/streambuffer.cpp
--- old/libxisf/streambuffer.cpp        1970-01-01 01:00:00.000000000 +0100
+++ new/libxisf/streambuffer.cpp        2023-05-24 16:28:11.000000000 +0200
@@ -0,0 +1,144 @@
+#include "streambuffer.h"
+
+namespace LibXISF
+{
+
+StreamBuffer::StreamBuffer()
+{
+    setg(nullptr, nullptr, nullptr);
+    setp(nullptr, nullptr);
+}
+
+StreamBuffer::StreamBuffer(const ByteArray &byteArray) :
+    _size(byteArray.size()),
+    _byteArray(byteArray)
+{
+    if(_byteArray.size())
+    {
+        char *ptr = _byteArray.data();
+        setg(ptr, ptr, ptr + _size);
+        setp(ptr, ptr + _size);
+    }
+    else
+    {
+        setg(nullptr, nullptr, nullptr);
+        setp(nullptr, nullptr);
+    }
+}
+
+ByteArray StreamBuffer::byteArray()
+{
+    return _byteArray;
+}
+
+StreamBuffer::pos_type StreamBuffer::seekoff(off_type off, 
std::ios_base::seekdir dir, std::ios_base::openmode mode)
+{
+    pos_type ret = pos_type(off_type(-1));
+    off_type newoffi = off;
+    off_type newoffo = off;
+    if(dir == std::ios_base::cur)
+    {
+        newoffi += gptr() - eback();
+        newoffo += pptr() - pbase();
+    }
+    else if(dir == std::ios_base::end)
+        newoffo = newoffi = _byteArray.size() - off;
+
+    char *ptr = _byteArray.data();
+    if(mode & std::ios_base::in && newoffi >= 0 && newoffi <= _size)
+    {
+        setg(ptr, ptr + newoffi, ptr + _size);
+        ret = pos_type(newoffi);
+    }
+
+    if(mode & std::ios_base::out && newoffo >= 0 && newoffo <= _size)
+    {
+        setp(ptr, ptr + _size);
+        pbump(newoffo);
+        ret = pos_type(newoffo);
+    }
+
+    return ret;
+}
+
+StreamBuffer::pos_type StreamBuffer::seekpos(pos_type pos, 
std::ios_base::openmode mode)
+{
+    pos_type ret = pos_type(off_type(-1));
+    off_type off = pos;
+
+    if(off >= 0 && off <= (off_type)_byteArray.size())
+    {
+        char *ptr = _byteArray.data();
+        if(mode & std::ios_base::in)
+            setg(ptr, ptr + pos, ptr + _size);
+
+        if(mode & std::ios_base::out)
+        {
+            setp(ptr, ptr + _size);
+            pbump(pos);
+        }
+
+        ret = pos;
+    }
+    return ret;
+}
+
+std::streamsize StreamBuffer::xsgetn(char_type *s, std::streamsize n)
+{
+    std::streamsize ret = 0;
+    std::streamsize len = egptr() - gptr();
+    if(len > 0)
+    {
+        std::streamsize c = std::min(n, len);
+        std::memcpy(s, gptr(), c);
+        gbump(c);
+        ret = c;
+    }
+    return ret;
+}
+
+StreamBuffer::int_type StreamBuffer::underflow()
+{
+    if(gptr() < egptr())
+        return traits_type::to_int_type(*gptr());
+    else
+        return traits_type::eof();
+}
+
+std::streamsize StreamBuffer::xsputn(const char_type *s, std::streamsize n)
+{
+    off_type len = epptr() - pptr();
+    if(len < n)
+    {
+        _size += n - len;
+        _byteArray.resize(_size);
+        update_ptrs();
+    }
+    std::memcpy(pptr(), s, n);
+    pbump(n);
+    return n;
+}
+
+StreamBuffer::int_type StreamBuffer::overflow(int_type c)
+{
+    if(traits_type::eq_int_type(traits_type::eof(), c))
+        return traits_type::eof();
+
+    _byteArray.append(c);
+    _size++;
+    pbump(1);
+    update_ptrs();
+    return c;
+}
+
+void StreamBuffer::update_ptrs()
+{
+    off_type ipos = gptr() - eback();
+    off_type opos = pptr() - pbase();
+    char *ptr = _byteArray.data();
+    setg(ptr, ptr + ipos, ptr + _size);
+    setp(ptr, ptr + _size);
+    pbump(opos);
+}
+
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/libxisf/streambuffer.h new/libxisf/streambuffer.h
--- old/libxisf/streambuffer.h  1970-01-01 01:00:00.000000000 +0100
+++ new/libxisf/streambuffer.h  2023-05-24 16:28:11.000000000 +0200
@@ -0,0 +1,33 @@
+#ifndef STREAMBUFFER_H
+#define STREAMBUFFER_H
+
+#include <streambuf>
+#include "libxisf.h"
+
+namespace LibXISF
+{
+
+class StreamBuffer : public std::streambuf
+{
+public:
+    StreamBuffer();
+    StreamBuffer(const ByteArray &byteArray);
+    ByteArray byteArray();
+protected:
+    pos_type seekoff(off_type off, std::ios_base::seekdir dir, 
std::ios_base::openmode mode = std::ios_base::in | std::ios_base::out) override;
+    pos_type seekpos(pos_type pos, std::ios_base::openmode mode = 
std::ios_base::in | std::ios_base::out) override;
+
+    std::streamsize xsgetn(char_type *s, std::streamsize n) override;
+    int_type underflow() override;
+
+    std::streamsize xsputn(const char_type *s, std::streamsize n) override;
+    int_type overflow(int_type c = traits_type::eof()) override;
+private:
+    void update_ptrs();
+    off_type _size = 0;
+    ByteArray _byteArray;
+};
+
+}
+
+#endif // STREAMBUFFER_H

Reply via email to