Index index by Group index by Distribution index by Vendor index by creation date index by Name Mirrors Help Search

openhtj2k-devel-0.27.0-1.1 RPM for x86_64

From OpenSuSE Tumbleweed for x86_64

Name: openhtj2k-devel Distribution: openSUSE Tumbleweed
Version: 0.27.0 Vendor: openSUSE
Release: 1.1 Build date: Wed Nov 11 09:10:44 2026
Group: Productivity/Graphics/Convertors Build host: reproducible
Size: 40393 Source RPM: openhtj2k-0.27.0-1.1.src.rpm
Packager: https://bugs.opensuse.org
Url: https://github.com/osamu620/OpenHTJ2K
Summary: Development files for openhtj2k
This package contains openhtj2k, an implementation of ITU-T Rec.814 | ISO 15444-15 (a.k.a. HTJ2K).

Provides

Requires

License

BSD-3-Clause

Changelog

* Wed Nov 11 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.27.0:
    Added:
    * openhtj2k_decoder::is_truncated(): after a decode, whether the codestream
      lacked data of the image, which then holds only the data there was. It is
      true when the codestream ends before its EOC marker (a truncated file or
      download), when a tile has no data, or when a packet or a code-block's data
      runs past the bytes there are. Image libraries can use it to tell a partial
      image from a whole one.
    Fixed:
    * A codestream cut short now decodes from the data it holds, wherever the cut
      falls after the marker code of its first SOT marker segment, and one
      warning reports it ("codestream ends before its EOC marker").
    * A code-block length that runs over a tile-part boundary (a malformed
      codestream) drops that code-block's data in the packet and decodes the
      rest, with the "malformed input" warning as before; its bytes used to be
      decoded in part, which failed the decode.
* Tue Nov 10 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.26.0:
    Added:
    * Qweights=flat (openhtj2k_encoder::set_qfactor_weights(1)) turns off the
      visual weights of the Qfactor path, for scientific or other non-visual
      data. Every subband weight is 1 at every Qfactor, so the steps are
      MSE-optimal, as the guideline's are from Qfactor=97 up; without the MCT
      every component is independent data with unit colour gain. The Qfactor
      still sets the reference step, so a Qfactor gives larger files and smaller
      errors: on an 8-bit RGB image, 28-54% more bits and 2.6-3.8 dB more PSNR at
      Qfactor=30 to 90. The default, Qweights=visual, is unchanged.
      estimate_qfactor --weights flat recovers the Qfactor of such files.
    Changed:
    * Qfactor on sub-sampled (4:2:0 or 4:2:2) colour input follows version 2.0 of
      the JPEG Qfactor guideline, "Controlling JPEG 2000 image quality using a
      single parameter (Qfactor)" (ISO/IEC JTC 1/SC 29/WG 1 N101553). Its chroma
      weights include the gain of upsampling the component for display, 2 for
      4:2:0 and 1.4142 for 4:2:2, on every subband including LL; the encoder used
      the version 1.0 weights, which leave it out. Below Qfactor=97 the chroma
      steps of such files are finer by up to 2 (4:2:0) or 1.4142 (4:2:2) times,
      so the files are larger: a 1024x1024 4:2:0 test image grows by 41% at
      Qfactor=30, 23% at 75 and 9% at 90. Output for gray, gray + alpha and 4:4:4
      colour input, and all output without Qfactor, is byte-identical. The
      experimental analytic weighting (Qcsf=mannos|daly) applies the same gain to
      sub-sampled components. estimate_qfactor follows the new weights, so on a
      sub-sampled file written by 0.25.0 or earlier it finds the Qfactor from the
      luminance component only and reports a mismatch on the chroma components.
    Fixed:
    * On the single-tile reuse path (invoke_line_based_stream_reuse() and
      invoke_line_based_direct() after enable_single_tile_reuse(true)), a frame
      whose headers differed from the previous frame's could decode with the
      previous frame's step sizes, packet order or line-decoder sizes. The
      decoder rebuilt its reused structure only when a few header values changed
      (SIZ, part of COD, the first QCD step size, and the numbers of COC, QCC and
      RGN segments); it ignored the rest of the main header, the tile-part
      headers and the resolution reduction. It now compares a hash of every
      marker segment that shapes the tile, in the main header and the tile-part
      headers, together with the reduction. A frame whose tile-part header gives
      a component another number of decomposition levels, which 0.25.0 refused,
      now decodes as well. Frames with unchanged headers reuse the structure as
      fast as before (29.5 ms per 4K frame). (#545)
    * Every source file includes the standard headers it uses, so the library and
      tools build with standard libraries that no longer bring one header in
      through another, such as the libc++ of current Emscripten releases
      (std::strtoull in jpip_response.cpp).
* Thu Nov 05 2026 Bernhard M. Wiedemann <bwiedemann@suse.de>
  - Update to 0.25.0:
    * Library prints nothing; errors are exceptions, warnings go to a
      message handler; internals are in namespace open_htj2k
    * Hardened decoding of malformed and truncated input (bounded memory
      and set-up work, out-of-bounds reads/writes, hangs)
    * Encoder writes JP2 files; many encoder crash and overflow fixes
    * Installs a CMake package: find_package(openhtj2k CONFIG)
    * New OPENHTJ2K_TARGET_CPU option for portable x86-64 builds
    * See https://github.com/osamu620/OpenHTJ2K/blob/v0.25.0/CHANGELOG
  - Build with -DOPENHTJ2K_TARGET_CPU=generic instead of -march=native
    to make the build reproducible and portable
  - Drop openhtj2k-0.3.0-tiff.patch, merged upstream
* Mon Jun 01 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.19.0:
    * New WebTransport browser viewer for live RFC 9828 streams
    * Substantial encoder and decoder performance gains
    * Broad WASM and JPIP-viewer improvements
    * See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.19.0
* Tue Apr 28 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.18.5:
    * Fix heap out-of-bounds access in tile-part dispatch
    * See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.18.5
* Tue Apr 28 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.18.4:
    * Fix heap buffer overflow vulnerability in PPM packet header parsing
    * See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.18.4
* Fri Apr 24 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.18.3:
    * https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.18.3
* Wed Apr 22 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.18.2:
    * https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.18.2
* Mon Apr 20 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.15.1:
    * HT block decoding stack buffer overflow
    * https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.15.1
* Mon Apr 20 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.15.0:
    * https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.15.0
* Tue Apr 14 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.14.0:
    * See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.14.0
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.13.2:
    * Closes the 3.9 ms live-vs-offline decode gap on M3 Max, bringing the live
      RTP receiver from ~50 fps to ~60 fps on 4K 4:2:2 HT at 1.7 bpp with
    - -threads 2
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.13.1:
    * RTP receiver: Fix -DOPENHTJ2K_RTP=ON build on macOS
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.13.0:
    See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.13.0
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.12.0:
    See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.12.0
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.11.1:
    * Update the RTP receiver capability claim from "sustains 4K @ 30 fps" to
      "sustains 4K @ 60 fps on modern x86-64 with --threads 2", to reflect the
      v4-perf work that shipped in 0.11.0
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.11.0:
    See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.11.0
* Mon Apr 13 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.10.0:
    See https://github.com/osamu620/OpenHTJ2K/releases/tag/v0.10.0
* Fri Apr 10 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.9.1:
    * Fix Psot=0 backward EOC scan in j2k_tile_part::read()
      (source/core/coding/coding_units.cpp) stepping by 2 bytes per iteration
      instead of 1. The scan only inspected byte pairs starting at even offsets
      within the tile-part body; codestreams whose 0xFF 0xD9 EOC marker happened
      to land at an odd offset were silently mis-decoded, falling back to the
      last two bytes, then over-advancing the input cursor by one byte and
      producing SOT marker segment expected but D900 is found. Surfaced against
      real-world 4K 4:2:2 1.7-bpp broadcast HTJ2K captures where roughly half of
      all frames had an odd-offset EOC.
* Fri Apr 10 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.9.0:
    Performance:
    * HT block decoder: nibble-packed sigma representation for SPP/MRP passes,
      replacing byte-per-sample storage; halves memory traffic in significance
      propagation and magnitude refinement
    * HT block decoder: branchless VLC unstuff eliminates short-circuit branches;
      CTZ-based SPP/MRP with branchless bit importers halve branch misses
    * HT block decoder: fused dequantize pass with vectorized kappa computation
      and specialized 9/7 cascade; removes a separate dequant loop
    * HT block decoder: vectorize Emax computation in cleanup decode
    * AVX2: add 4-quad 16-bit decode path for HT block decoder
    * AVX-512: expand coverage to FDWT vertical lifting and all color transform
      functions (forward/inverse ICT and RCT)
    * AVX-512: masked stores for vertical DWT tail columns, eliminating scalar
      fallback for non-multiple-of-16 widths
    * NEON: port nibble-packed sigma SPP/MRP, add irrev 5/3 (ATK) IDWT kernels
      (horizontal and vertical), add 16-bit HT cleanup decode path (pLSB > 16)
    * WASM: port nibble-packed sigma SPP/MRP to WASM SIMD decoder
    * Vectorize PPM interleave output (SSE4.1 / NEON) and PGM/PGX byte-packing
      in decoder CLI
    * ThreadPool: lock-free get() via atomic index; skip pool overhead entirely
      in single-threaded mode
    * ThreadPool: replace std::queue<std::function<void()>> with a fixed-size
      32 K-slot InlineTask ring buffer with cache-line aligned head/tail; eliminates
      per-task heap allocation from std::deque chunk management and std::function
      type-erased storage. 32-byte inline storage with memcpy fast path for
      trivially-copyable lambdas (all hot-path captures); relocate-trampoline slow
      path for non-trivial captures
    * DWT batch path: eliminate per-tile per-level Xext / Yext copy buffer.
    * In-place horizontal DWT now handles all rows (including the first and last
      row of each tile) by prepending DWT_LEFT_SLACK = 8 floats and appending
      DWT_RIGHT_SLACK = SIMD_PADDING = 32 floats of border slack to every
      j2k_subband / j2k_resolution::i_samples allocation; the user-visible
      pointer is offset by DWT_LEFT_SLACK. Removes a per-row memcpy round-trip
      for the boundary rows
    * DWT: replace scalar PSE-fill loops with constant-pattern SIMD reflection
      (vpermps on AVX2 / AVX-512, vrev64q + vextq on NEON, i32x4_shuffle
      on WASM SIMD); covers idwt_1d_row_inplace, idwt_1d_sr_inplace, and
      fdwt_1d_sr_inplace. Drops the PSEo() modulo + branch on the hot path
    * coding_units: flatten unique_ptr<unique_ptr<T>[]> double-indirection in
      pband, subbands, precincts, and resolution to single-allocation
    * flat arrays via operator new[] + placement-new (matching the existing
      j2k_codeblock pattern). Reduces N+1 heap allocations to 1 per container
      and improves cache locality
    * coding_units: embed tagtree by value in j2k_precinct_subband,
      eliminating two heap allocations per precinct-subband
    * decoder: hoist per-tile scratch vectors (band_h, tile_x_off, tile_w,
      row_ptrs, accum) out of the multi-tile scatter loop in
      decode_line_based_stream; reduces O(numTiles.x × numTiles.y) heap
      allocations to a constant 5
    Bug Fixes:
    * Fix AVX2 pack_i32_to_u8: signed values were incorrectly clamped to zero
      by packus; now clamps via max(0) before packing
    * Fix fused dequant SIMD overshoot race condition with branchless VLC/MEL
    * Fix WASM wasm_u16x8_shl → wasm_i16x8_shl in 16-bit decode path
    * Fix WASM 16-bit HT decode regression and DC level shift
    * Fix intermittent DFS/ATK test failures: zero full stride×height in LL
      resolution buffer
    * Fix segfault when /dev/null used as decoder output
    * Suppress all compiler warnings in native and WASM builds
    * Fix four memory leaks on exception paths: ~j2k_tile_component now finalizes
      line_dec / line_enc so aligned_mem_alloc'd sub-resources are released
      even if finalize_*() was never called explicitly; init_line_decode
      validates DWT direction before allocating state arrays (fail-fast);
      create_compressed_buffer NULL-checks the realloc result instead of
      losing the original pointer; the four decoder.cpp invoke variants
      validate tile count before allocating raw new int32_t[] output buffers
      (was leaking on the validation throw)
    * coding_units: add RAII placement_new_array_guard<T> and apply it at all
      five placement-new array construction sites (codeblocks, pband, subbands,
      precincts, resolution); partial construction failures now unwind cleanly
      instead of leaving the destructor calling ~T on uninitialized memory
    * ThreadPool: replace silent ring overflow under NDEBUG (assert-only) with
      a std::runtime_error throw in both push_task and push_batch; raise
      RING_CAP from 8192 to 32768 to comfortably hold the worst-case 4K-tile
      encode burst (a single precinct can enqueue ~5-8 K codeblock tasks
      back-to-back via push_batch before workers begin draining)
    WASM:
    * Node.js v24 compatibility: rewrite module loader to evaluate Emscripten JS
      as CJS via new Function(), pass .wasm binary directly via wasmBinary
      option, bypassing Emscripten's fetch()-based loader
    * Add ~137 WASM conformance tests (HT Profile 0, Profile 1, HiFi) using
      node open_htj2k_dec.mjs decode + native imgcmp comparison
    * Align index.html ESM exports with updated wrapper API
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.8.0:
    New Features:
    * Add JPH file format decoding with automatic colorspace detection. The decoder
      now accepts .jph input files, parses the JP2 box structure (signature →
      ftyp → jp2h → jp2c), extracts the embedded J2K codestream, and reads the
      colr box EnumCS field. When EnumCS is 18 (YCbCr) and the output is PPM,
      YCbCr→RGB conversion (BT.601) is applied automatically — no -ycbcr flag
      needed. The explicit -ycbcr bt601|bt709 flag still overrides the
      auto-detected standard.
    * Move JPH box parsing (parse_jph_boxes, get_color_space) into the library
      (jph.hpp / jph.cpp) and expose it via decoder.hpp; the app-layer
      now calls the library API instead of duplicating box-parsing logic.
    Performance:
    * AVX-512 IDWT: add 9 new functions (idwt_avx512.cpp) covering horizontal
      lifting (irrev 9/7 and rev 5/3) and vertical deinterleave / lifting steps;
      dispatched when OPENHTJ2K_TRY_AVX2 && __AVX512F__ — falls back to AVX2
      on non-AVX-512 x86-64 CPUs with no code change required
    * NEON: vextq+carry optimization for horizontal IDWT eliminates per-row
      boundary-extension copies; irrev 9/7 lossy: batch −8 %, streaming −34 %;
      rev 5/3 lossless: −10 %
    * AVX2: widen HT cleanup decode MagSgn path to full 256-bit in
      ht_cleanup_decode, processing 8 coefficients per iteration instead of 4
    * FDWT: optimize streaming cascade and adv_step_f to reduce per-row
      overhead; add SIMD dispatch (AVX2/NEON) for the reversible 5/3 adv_step_f
      vertical lifting step
    Bug Fixes:
    * Fix segfault on truncated JPH/J2K codestreams: guard box and marker
      parsers against premature end-of-stream
    * Fix streaming decoder vertical upsampling for subsampled components
      (e.g. 4:2:0 / 4:2:2): chroma rows are now correctly replicated when the
      output stride does not match the subsampled component height
    * Fix scalar color transform fallback guard: condition now matches the
      dispatch table order, preventing wrong-path selection on non-AVX2 / non-NEON
      builds
    WASM:
    * Vectorize fused YCbCr→RGB color transforms and interleave step in
      color_wasm.cpp using WASM SIMD 128-bit intrinsics; add
      OPENHTJ2K_ENABLE_WASM_SIMD build flags for the new translation unit
    * Add YCbCr→RGB conversion (BT.601 / BT.709) to the Node.js decoder CLI
      (open_htj2k_dec.mjs)
    * Auto-detect YCbCr colorspace from JPH inputs in index.html; update
      dropzone UI with JPH support note and local-decode privacy text; promote
      privacy notice to a standalone banner
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.7.1:
    * Fix undefined behaviour in ht_magref_decode (scalar and NEON paths):
      left-shifting a negative int32_t value is UB in C++; combined into a single
      unsigned-arithmetic shift (static_cast<int32_t>((0xFFFFFFFEU | ...) <<
      pLSB))
    * Work around clang-18 code-generation bug: clang 18 miscompiles certain
      inline functions in coding_units.cpp when building for AArch64 NEON,
      producing wrong decoder output. Add -fno-inline to coding_units.cpp when
      CMAKE_CXX_COMPILER_VERSION < 19 and the compiler is Clang.  Clang 19+, GCC,
      and MSVC are unaffected. All 445 conformance tests pass on both clang-18 and clang-20.
    * Fix streaming encoder (-i file.pgx,...) rejecting subsampled (4:2:2, 4:2:0,
      etc.) PGX inputs. PgxStreamReader now accepts component files whose
      dimensions are integer sub-multiples of the luma component, computes the
      correct XRsiz/YRsiz factors for the SIZ marker, seeks each chroma file to
      the correct row (y / YRsiz), and skips redundant push_line_enc calls for
      chroma on luma rows that carry no new chroma data.
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.7.0:
    JPEG 2000 Part 2: DFS and ATK kernel support:
    * Add encoder and decoder support for Part 2 Downsampling Factor Structures
      (DFS) markers
    * Add decoder support for arbitrary ATK (Arbitrary Transform Kernel) DWT
      kernels: irreversible 9/7-based and reversible 5/3-based ATK
    * Add scalar FDWT and AVX2 IDWT implementations for ATK kernels
    * Add 5 conformance test cases for Part 2 DFS+ATK bitstreams (all pass)
    * Fix AVX2 dequantize: use transformation == 1 (not truthy) to distinguish
      lossless from ATK kernels (transformation >= 2 is lossy but truthy)
    * Fix ATK finalize downshift: (transformation==1)?0:FRACBITS-bitdepth
    * Fix bounds-safe color transform dispatch for ATK (transformation >= 2)
    * Fix LL0 subband dimensions for DFS codestreams in streaming decode
    * Fix ATK encode OOB color dispatch; add line-based DFS/ATK tests
    Decoder:
    * -reduce now respects DFS markers: the maximum reduce level is clamped to
      the number of consecutive bidirectional DWT levels, preventing nonsensical
      HONLY/VONLY reduced-resolution outputs
    * Fix PPM output for subsampled (4:2:2) codestreams: the streaming path
      correctly upsamples chroma with nearest-neighbour interpolation; the batch
      write_ppm path uses a scalar fallback for mismatched component dimensions
    * Add experimental -ycbcr bt601|bt709 flag: converts YCbCr to RGB during
      PPM output using full-range ITU-R BT.601 or BT.709 coefficients
      (fixed-point 2^14); handles 4:2:2 nearest-neighbour chroma upsampling;
      applies to PPM output only
    Encoder:
    * Fix streaming (line-based) path for PGX input: a new PgxStreamReader
      opens one file per component and reads rows on demand; previously PGX input
      always triggered "Failed to open input file for streaming"
    WASM:
    * Fix 4:2:2 chroma subsampling in invoke_decoder_to_rgba() WASM wrapper
    * Add YCbCr→RGB conversion buttons (BT.601 / BT.709) to the web demo at
      https://htj2k-demo.pages.dev/
    * Modernize button styling in the web demo
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.6.0:
    WASM:
    * Add invoke_decoder_stream() C export: streaming line-based decode via
      callback, eliminating the 96 MB W×H×C int32 output buffer entirely
    * Add invoke_decoder_to_rgba() C export: converts decoded samples to a
      packed uint8/uint16 big-endian buffer inside WASM, eliminating the JS
      per-sample pixel loop
    * Add open_htj2k_dec.mjs: Node.js CLI decoder built on the WASM library;
      supports J2C / J2K / JPH input, PGM / PPM / PGX output, --reduce,
    - -num_threads, and --iter options
    * Fix WASM SIMD build: add -O3 -flto to SIMD object compilation
    * Fix open_htj2k_dec.mjs: compute correct output dimensions when --reduce > 0
    * Update index.html to use the new streaming and RGBA export APIs
    Performance (native):
    * Fused MCT + finalize: color inverse transform and int32 output writeback
      combined into a single pass, eliminating an intermediate float buffer
    * In-place horizontal IDWT: eliminates ext_buf memcpy per row
    * NEON: port lossy dequantize fast path; fix color_neon build failure
    * NEON: 2× unroll idwt_level_src_fn interleave loop
    * IDWT cascade: eliminate redundant get_dl / is_lp calls in hot loop
    * AlignedLargePool: extend macOS support; route file I/O buffers through pool
      Stack-allocate Eline / rholine scratch arrays; route large buffers through
    * AlignedLargePool to reduce heap fragmentation
    * Use aligned AVX2 loads (_mm256_load_ps) where 32-byte alignment is
      guaranteed, replacing unaligned variants in hot DWT paths
    Portability:
    * Lower minimum compiler requirement from C++17 to C++11
    * Replace all [[nodiscard]] / [[maybe_unused]] raw attributes with
      OPENHTJ2K_NODISCARD / OPENHTJ2K_MAYBE_UNUSED macros that expand
      to the real attributes under C++17 and to nothing under C++14/11
    * Replace if constexpr with plain if in HT block decoding (all four
      variants: generic, AVX2, NEON, WASM)
    * ThreadPool: split pre-C++17 enqueue() into separate C++14 and C++11
      branches using std::decay_t and typename std::decay<T>::type
      respectively
    * Remove pre-existing malformed #define[[maybe_unsed]] line in utils.hpp
    * All three standard levels (C++11, C++14, C++17) verified
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.5.1:
    WASM SIMD:
    * Add color transform vectorization: new color_wasm.cpp with all 8
      color transform functions (forward/inverse RCT and ICT, integer and
      float-domain variants) implemented using WASM SIMD 128-bit intrinsics,
      processing 4 elements per iteration
* Tue Apr 07 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.5.0:
    WASM SIMD:
    * Complete separation of WASM-SIMD from NEON: dedicated source files
      (fdwt_wasm.cpp, idwt_wasm.cpp, ht_block_encoding_wasm.cpp,
      ht_block_decoding_wasm.cpp) guarded solely by
      OPENHTJ2K_ENABLE_WASM_SIMD; no NEON flag is used in WASM builds
    * Translate HT block encoding and decoding to native WASM-SIMD intrinsics
      (v128_t); encoder state classes in ht_block_encoding_wasm.hpp
    * Add dedicated WASM fwd_buf implementation in ht_block_decoding.hpp
      subprojects/CMakeLists.txt: compile library twice — scalar build
      linked to libopen_htj2k.js, SIMD build linked to libopen_htj2k_simd.js
    Performance:
    * IDWT: eliminate redundant memcpy in idwt_level_src_fn; remove hp_tmp
      scratch buffer; reduce streaming ring buffer depth from 12 to 8
    * IDWT: vectorize LP/HP interleave with AVX2 (unpacklo/hi + permute2f128)
      and NEON; vectorize 5/3 reversible vertical lifting steps with AVX2
    * FDWT/IDWT: AVX2 and NEON odd-width interleave/deinterleave fixes
    * Decoder finalization: AVX2 and NEON paths for float→int32 conversion
      in decode_line_based_stream; NEON ds==0 fast path; 16-element/iter loop
    * NEON: 2× unroll reversible vertical lifting steps and FDWT deinterleave
    * DWT cascade: specialize 5/3 path; fix O(n²) scan-window growth
    * HT block decoding: skip sigma stores for single-pass codeblocks;
      skip redundant memset for single-pass codeblocks
    * Allocation: eliminate per-codeblock allocation storm in
      j2k_precinct_subband; replace per-strip and per-resolution allocation;
      hoist tree_path vector out of per-codeblock loop; replace per-block
      all_segments std::vector with stack array in htj2k_decode()
    * ThreadPool: batch-push tasks, reserve marker list, combine ring buffer
      and predecoded pool; pre-fault ring/prefetch buffers; reduce
      task-queue thundering herd
    * LB encoder: overlap DWT computation with HT block encoding
    * Eliminate bulk ring_buf/prefetch_buf zeroing; zero only empty regions
    * Replace scratch array memset with per-row 8-byte guard zeros
    Fixes:
    * Fix O(n²) scan window growth in DWT cascade 5/3 specialization
    * Add include for std::swap in fdwt.cpp and idwt.cpp
* Tue Mar 31 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.4.1:
    * Introduce a temporary workaround for the line-based validation test in
      Windows ARM64.
* Tue Mar 31 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.4.0:
    New APIs:
    * Add invoke_line_based() decoder API: row-by-row output via callback
      using per-subband ring buffers; avoids full-image intermediate allocation
    * Add invoke_line_based_stream() decoder API: multi-tile scatter path
      assembling full-width output rows from per-tile strip buffers
    * Add encode_line_based_stream() encoder API: push-row streaming encoder
      driven by a user-supplied source callback
    * Add lb_compare utility to validate line-based output against invoke()
    Architecture:
    * Change sprec_t from int32_t to float: DWT pipeline now operates
      natively in float32, eliminating integer↔float round-trip conversions
    * fdwt_2d_state / idwt_2d_state: new stateful streaming DWT classes
      that process one row at a time for the line-based encode/decode paths
    * Line-based mode is now the default for encoder and decoder apps;
      the previous full-image (batch) path is selected with the -batch flag
    Performance:
    * AVX2 horizontal DWT: 2× loop unrolling on all lifting step loops
    * NEON: full float32 horizontal and vertical DWT kernels
    * ICT/RCT color transforms: AVX2 and NEON variants with runtime dispatch
    * LB decoder: pipeline MCT+clamp of row Y with pool pull of row Y+1,
      achieving 18–23 % throughput improvement at T≥4 threads
    * Encoder: per-thread cblk_data_pool bump allocator replaces per-block
      malloc/free in the HTCOT hot path; PSE scratch buffer hoisted out
      of per-tile DWT calls
    Build / Tests:
    * Decoder and encoder apps reject unknown command-line flag names
    * Introduce OPENHTJ2K_EXPORT macro, removing duplicated __declspec
      guards from encoder.hpp
    * Add lb_stream_validation.cmake: conformance tests for
      invoke_line_based_stream() across all HT profile-0/1 and HF bitstreams
    * Remove redundant lb_* cmake test files (duplicate of non-lb equivalents);
    * CTest count reduced from 480 to 277
    * WASM: dark UI redesign, SIMD badge, decode-time display, GitHub link
* Mon Jan 19 2026 Michael Vetter <mvetter@suse.com>
  - Update to 0.3.1:
    * Add Windows ARM + MSVC support to CI workflow
* Mon Jul 28 2025 Michael Vetter <mvetter@suse.com>
  - Add openhtj2k-0.3.0-tiff.patch:
    make pkg-config based requires for the devel package actually
    match our libtiff package
* Mon Jul 28 2025 Michael Vetter <mvetter@suse.com>
  - Update to 0.3.0:
    * SOVERSION is introduced for versioning of shared library
  - Drop openhtj2k-0.2.9-soversion.patch
* Thu Jul 24 2025 Michael Vetter <mvetter@suse.com>
  - Add openhtj2k-0.2.9-soversion.patch:
    Add so versioning
* Mon Jul 07 2025 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.9:
    * Fix bug for the wrong stride of dwt coefficients.
    * Add HEAP32 into EXPORTED_RUNTIME_METHODS for was-build.
* Wed Nov 27 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.8:
    * Fix incorrect packet parsing for RPCL, PCRL, CPRL
    * Introduce stride access into DWT
    * Change cmake configuration for MinGW environments
* Fri Jun 14 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.7:
    * Refactor non-SIMD HT cleanup decoding
    * Fix CMakeLists.txt for windows-latest runner (GitHub actions)
    * Fix PGX parsing
* Thu Jun 13 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.6:
    * Fix unnecessary assignment of pass_length in packet header parsing
    * Remove CR (=0xd) from the delimiter in imgcmp
* Fri Jan 19 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.5:
    * Fix memory leak in decoder with '-reduce' parameter greater
      than actual DWT levels
    * Fix buffer overrun with image width which is not multiple
      of vector length in IDWT and block-decoding for ARM NEON
    * Improve UI for WASM demo
    * Enable WASM SIMD (using NEON)
    * Fix wrong line break in encoder usage (#162)
* Fri Jan 19 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.4:
    * small fix for wasm wrapper
* Fri Jan 19 2024 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.3:
    * Experimental support of emscripten
    * Fix compilation error on aarch64 with gcc
    * Small editorial changes
* Mon Nov 27 2023 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.2:
    * Fix compilation errors in aarch64 and gcc 9 or earlier
* Mon Nov 13 2023 Michael Vetter <mvetter@suse.com>
  - Update to 0.2.1:
    * Add installation part to CMakeLists.txt (#154)
    * Allow space between comma separated input file names
* Thu Nov 02 2023 Michael Vetter <mvetter@suse.com>
  - Initial package of OpenHTJ2K 0.2 for openSUSE

Files

/usr/include/open_htj2k
/usr/include/open_htj2k/interface
/usr/include/open_htj2k/interface/decoder.hpp
/usr/include/open_htj2k/interface/encoder.hpp
/usr/include/open_htj2k/interface/openhtj2k_message.hpp
/usr/include/open_htj2k/interface/planar_output_desc.hpp
/usr/lib64/cmake/openhtj2k
/usr/lib64/cmake/openhtj2k/openhtj2k-config-version.cmake
/usr/lib64/cmake/openhtj2k/openhtj2k-config.cmake
/usr/lib64/cmake/openhtj2k/openhtj2k-targets-release.cmake
/usr/lib64/cmake/openhtj2k/openhtj2k-targets.cmake
/usr/lib64/libopenhtj2k.so
/usr/lib64/pkgconfig/open_htj2k.pc


Generated by rpm2html 1.8.1

Fabrice Bellet, Thu Nov 12 22:37:20 2026