opencodecs 0.3.1__tar.gz → 0.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/VENDOR.toml +36 -11
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bcdec/bcdec.h +53 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/bitshuffle_core.c +3 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/bitshuffle_core.h +4 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/bitshuffle_internals.h +4 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/ricecomp.c +31 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/libspng/spng.c +21 -6
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_eer/oc_eer.h +9 -3
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_giflzw/oc_giflzw.c +20 -5
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_giflzw/oc_giflzw.h +4 -3
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_tifflzw/oc_tifflzw.c +132 -70
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_tifflzw/oc_tifflzw.h +3 -2
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/rgbe/rgbe.c +50 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/vendor_hashes.json +6 -6
- opencodecs-0.5.0/CHANGES.rst +2562 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/PKG-INFO +153 -109
- {opencodecs-0.3.1 → opencodecs-0.5.0}/README.md +152 -108
- {opencodecs-0.3.1 → opencodecs-0.5.0}/bench/build_libjxl.sh +10 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/pyproject.toml +15 -19
- {opencodecs-0.3.1 → opencodecs-0.5.0}/setup.py +355 -636
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/__init__.py +11 -5
- opencodecs-0.5.0/src/opencodecs/_aec_codec.py +557 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_avif_codec.py +103 -13
- opencodecs-0.5.0/src/opencodecs/_avif_heif_params.py +110 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_bcn_codec.py +9 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_bitshuffle_codec.py +26 -6
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_blosc2_codec.py +33 -14
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_bmp_codec.py +244 -46
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_brotli_codec.py +9 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_byteshuffle_codec.py +47 -5
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_cms_codec.py +4 -2
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_czi_reader.py +5 -10
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_czi_writer.py +213 -25
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_deflate_codec.py +25 -10
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dicom_codec.py +2 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dicomrle_codec.py +18 -4
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dicomweb.py +2 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_eer_reader.py +7 -2
- opencodecs-0.5.0/src/opencodecs/_filter_args.py +41 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_gif_codec.py +57 -14
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_gzip_codec.py +66 -21
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_heif_codec.py +127 -20
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_htj2k_codec.py +41 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_htj2k_pyramid.py +11 -7
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jpeg2k_codec.py +36 -25
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jpeg_codec.py +35 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jpegls_codec.py +28 -3
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_lerc_codec.py +34 -5
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_lz4_codec.py +13 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_mozjpeg_codec.py +34 -11
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_n5.py +16 -2
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ndtiff.py +6 -35
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ndtiff_writer.py +34 -156
- opencodecs-0.5.0/src/opencodecs/_numpy_codec.py +222 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_omezarr.py +5 -4
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_omezarr_writer.py +5 -3
- opencodecs-0.5.0/src/opencodecs/_packints_codec.py +432 -0
- opencodecs-0.5.0/src/opencodecs/_pcodec_codec.py +210 -0
- opencodecs-0.5.0/src/opencodecs/_png_codec.py +154 -0
- opencodecs-0.5.0/src/opencodecs/_predictor_codec.py +622 -0
- opencodecs-0.5.0/src/opencodecs/_qoi_codec.py +86 -0
- opencodecs-0.5.0/src/opencodecs/_quantize_codec.py +508 -0
- opencodecs-0.5.0/src/opencodecs/_rcomp_codec.py +263 -0
- opencodecs-0.5.0/src/opencodecs/_rgbe.py +63 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_rgbe_codec.py +15 -4
- opencodecs-0.5.0/src/opencodecs/_snappy_codec.py +134 -0
- opencodecs-0.5.0/src/opencodecs/_sperr_codec.py +200 -0
- opencodecs-0.5.0/src/opencodecs/_sz3_codec.py +185 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_tiff_codec.py +204 -22
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_tiff_http.py +3 -28
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_tiff_writer.py +168 -161
- opencodecs-0.5.0/src/opencodecs/_webp_codec.py +266 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_zstd_codec.py +5 -7
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/__init__.py +38 -19
- opencodecs-0.5.0/src/opencodecs/codecs/_aec.pyx +494 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_avif.pyx +227 -122
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_bcdec.pyx +43 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_blosc2.pyx +126 -7
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_brotli.pyx +55 -17
- opencodecs-0.5.0/src/opencodecs/codecs/_bytetools.pyx +615 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_charls.pyx +99 -37
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_deflate.pyx +231 -17
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_eer.pyx +44 -28
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_gif.pyx +313 -330
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_heif.pyx +314 -80
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_isal.pyx +6 -7
- opencodecs-0.5.0/src/opencodecs/codecs/_jpeg.pyx +842 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_jpeg2k.pyx +541 -145
- opencodecs-0.5.0/src/opencodecs/codecs/_jpeg_common.py +437 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_jxl.pyx +67 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_lerc.pyx +189 -32
- opencodecs-0.5.0/src/opencodecs/codecs/_lz4.pyx +662 -0
- opencodecs-0.5.0/src/opencodecs/codecs/_mozjpeg.pyx +589 -0
- opencodecs-0.5.0/src/opencodecs/codecs/_openjph.pyx +624 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_pcodec.pyx +122 -22
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_png.pyx +233 -101
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_qoi.pyx +11 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_rcomp.pyx +75 -39
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_registry.py +4 -2
- opencodecs-0.5.0/src/opencodecs/codecs/_rgbe.pyx +377 -0
- opencodecs-0.5.0/src/opencodecs/codecs/_snappy.pyx +429 -0
- opencodecs-0.5.0/src/opencodecs/codecs/_sperr.pyx +746 -0
- opencodecs-0.5.0/src/opencodecs/codecs/_sz3.pyx +703 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_tiff.pyx +486 -164
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_uhdr.pyx +24 -16
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_webp.pyx +94 -71
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_zstd.pyx +124 -7
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/avif.pxd +1 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/bcdec.pxd +9 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/blosc2.pxd +8 -0
- opencodecs-0.5.0/src/opencodecs/codecs/byteplanes.h +160 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/charls.pxd +5 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/heif.pxd +20 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/isal_shim.c +6 -18
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/lerc.pxd +32 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/libaec.pxd +7 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/lz4.pxd +7 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/mozjpeg.pxd +9 -0
- opencodecs-0.5.0/src/opencodecs/codecs/oc_decoder_vtable.h +28 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/openjpeg.pxd +20 -0
- opencodecs-0.5.0/src/opencodecs/codecs/openjph.pxd +73 -0
- opencodecs-0.5.0/src/opencodecs/codecs/openjph_shim.cpp +604 -0
- opencodecs-0.5.0/src/opencodecs/codecs/openjph_shim.h +169 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/sperr.pxd +4 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/spng.pxd +15 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/turbojpeg.pxd +34 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/webp.pxd +1 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/webp_shim.c +15 -6
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/webp_shim.h +4 -3
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/zstd.pxd +1 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/_sidecar_header.py +11 -9
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/_write_helpers.py +75 -0
- opencodecs-0.5.0/src/opencodecs/core/buffers.py +221 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/io.py +263 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/parallel.py +161 -18
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/pipeline.py +6 -7
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/segment_compression.py +36 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/parallel.py +15 -16
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/tiff_reader.py +8 -8
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/uhdr.py +25 -25
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs.egg-info/PKG-INFO +153 -109
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs.egg-info/SOURCES.txt +31 -2
- opencodecs-0.5.0/tests/test_avif_heif_params.py +616 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_avif_sequence.py +31 -2
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_bcdec.py +32 -2
- opencodecs-0.5.0/tests/test_bcn_rounding.py +121 -0
- opencodecs-0.5.0/tests/test_bitshuffle_format.py +49 -0
- opencodecs-0.5.0/tests/test_bmp_headers.py +521 -0
- opencodecs-0.5.0/tests/test_byteplanes.py +106 -0
- opencodecs-0.5.0/tests/test_bytestream_standards.py +1003 -0
- opencodecs-0.5.0/tests/test_charls.py +266 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_codec_decode.py +23 -25
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_native_fixtures.py +21 -2
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_png.py +38 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_coverage_push.py +0 -48
- opencodecs-0.5.0/tests/test_czi_recompress.py +240 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_delta_parity.py +65 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_direct_filter_outputs.py +3 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_eer.py +115 -6
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_encode_comprehensive.py +9 -4
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_error_handling.py +11 -5
- opencodecs-0.5.0/tests/test_fd_writes.py +94 -0
- opencodecs-0.5.0/tests/test_filter_compat.py +923 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_fits.py +6 -6
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_gif.py +2 -1
- opencodecs-0.5.0/tests/test_gif_compositing.py +563 -0
- opencodecs-0.5.0/tests/test_htj2k_compat.py +513 -0
- opencodecs-0.5.0/tests/test_jpeg.py +843 -0
- opencodecs-0.5.0/tests/test_jpeg2k_compat.py +512 -0
- opencodecs-0.5.0/tests/test_lerc.py +217 -0
- opencodecs-0.5.0/tests/test_mozjpeg.py +280 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_n5.py +120 -0
- opencodecs-0.5.0/tests/test_numpy_codec_format.py +194 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_omezarr_sharded_range.py +8 -1
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_openjph.py +12 -15
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_phase4_filters.py +42 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_phase6_codecs.py +5 -4
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_pipeline_catalog.py +1 -1
- opencodecs-0.5.0/tests/test_platform_branches.py +126 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_png_row_sessions.py +6 -4
- opencodecs-0.5.0/tests/test_png_standard.py +443 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_public_output_buffers.py +19 -3
- opencodecs-0.5.0/tests/test_qoi_standard.py +93 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_rcomp_truncated_input.py +2 -1
- opencodecs-0.5.0/tests/test_read_file_into.py +211 -0
- opencodecs-0.5.0/tests/test_rgbe_toplevel.py +304 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_sidecar_header.py +29 -9
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_snappy.py +7 -1
- opencodecs-0.5.0/tests/test_threading_policy.py +283 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tier1_scientific.py +35 -10
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_codec_encode.py +34 -0
- opencodecs-0.5.0/tests/test_tiff_fused_decode.py +126 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_native.py +41 -14
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_parallel_decode.py +12 -0
- opencodecs-0.5.0/tests/test_tiff_predictor2_interop.py +608 -0
- opencodecs-0.5.0/tests/test_tiff_predictor_loops.py +62 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_webp_animation.py +8 -3
- opencodecs-0.5.0/tests/test_webp_decode_options.py +207 -0
- opencodecs-0.5.0/tests/test_webp_encode_standard.py +239 -0
- opencodecs-0.5.0/tests/test_wrapper_streams.py +2012 -0
- opencodecs-0.3.1/CHANGES.rst +0 -1418
- opencodecs-0.3.1/src/opencodecs/_aec_codec.py +0 -136
- opencodecs-0.3.1/src/opencodecs/_numpy_codec.py +0 -124
- opencodecs-0.3.1/src/opencodecs/_packints_codec.py +0 -222
- opencodecs-0.3.1/src/opencodecs/_pcodec_codec.py +0 -76
- opencodecs-0.3.1/src/opencodecs/_png_codec.py +0 -96
- opencodecs-0.3.1/src/opencodecs/_predictor_codec.py +0 -519
- opencodecs-0.3.1/src/opencodecs/_qoi_codec.py +0 -57
- opencodecs-0.3.1/src/opencodecs/_quantize_codec.py +0 -174
- opencodecs-0.3.1/src/opencodecs/_rcomp_codec.py +0 -121
- opencodecs-0.3.1/src/opencodecs/_rgbe.py +0 -299
- opencodecs-0.3.1/src/opencodecs/_snappy_codec.py +0 -63
- opencodecs-0.3.1/src/opencodecs/_sperr_codec.py +0 -94
- opencodecs-0.3.1/src/opencodecs/_sz3_codec.py +0 -91
- opencodecs-0.3.1/src/opencodecs/_webp_codec.py +0 -184
- opencodecs-0.3.1/src/opencodecs/codecs/_aec.pyx +0 -365
- opencodecs-0.3.1/src/opencodecs/codecs/_bytetools.pyx +0 -366
- opencodecs-0.3.1/src/opencodecs/codecs/_jpeg.pyx +0 -474
- opencodecs-0.3.1/src/opencodecs/codecs/_lz4.pyx +0 -352
- opencodecs-0.3.1/src/opencodecs/codecs/_mozjpeg.pyx +0 -387
- opencodecs-0.3.1/src/opencodecs/codecs/_openjph.pyx +0 -359
- opencodecs-0.3.1/src/opencodecs/codecs/_rgbe.pyx +0 -241
- opencodecs-0.3.1/src/opencodecs/codecs/_snappy.pyx +0 -191
- opencodecs-0.3.1/src/opencodecs/codecs/_sperr.pyx +0 -279
- opencodecs-0.3.1/src/opencodecs/codecs/_sz3.pyx +0 -264
- opencodecs-0.3.1/src/opencodecs/codecs/byteplanes.h +0 -49
- opencodecs-0.3.1/src/opencodecs/codecs/openjph.pxd +0 -46
- opencodecs-0.3.1/src/opencodecs/codecs/openjph_shim.cpp +0 -451
- opencodecs-0.3.1/src/opencodecs/codecs/openjph_shim.h +0 -121
- opencodecs-0.3.1/src/opencodecs/core/buffers.py +0 -97
- opencodecs-0.3.1/src/opencodecs/tifffile_patch.py +0 -258
- opencodecs-0.3.1/tests/test_charls.py +0 -92
- opencodecs-0.3.1/tests/test_mozjpeg.py +0 -114
- opencodecs-0.3.1/tests/test_tifffile_patch.py +0 -237
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bcdec/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bcdec/README.md +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/README.rst +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/bitshuffle.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/bitshuffle.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/bitshuffle/iochain.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/License.txt +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/fits_hcompress.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/fits_hdecompress_api.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/fitsio2.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/cfitsio/ricecomp.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/libspng/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/libspng/spng.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_eer/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_eer/oc_eer.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_giflzw/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/oc_tifflzw/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/qoi/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/qoi/qoi.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/rgbe/rgbe.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/3rdparty/rgbe/rgbe.txt +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/LICENSE +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/MANIFEST.in +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/THIRD-PARTY.md +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/patches/libjxl/README.md +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/setup.cfg +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dicom.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dicom_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dm.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_dm_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_emd.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_emd_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_h5_common.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_imaris.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jpeg2k_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jpeg_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_mozjpeg_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_mrc.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_mrc_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_mrc_writer.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nifti.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nifti_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nifti_writer.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nrrd.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_nrrd_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_numpy_reader.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_scaled_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_vsi_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_b2nd.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_bitshuffle.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_bmp.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_brunsli.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_hcomp.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_jpegxr.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_ndtiff.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_plio.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/_zfp.pyx +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/b2nd.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/b2nd_helpers.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/b2nd_helpers.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/bitshuffle.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/brotli.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/brunsli.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/eer.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/giflib.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/heif_shim.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/jpegxr_shim.c +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/jpegxr_shim.h +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/libjxl.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/libuhdr.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/pcodec.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/qoi.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/rgbe.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/snappy.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/sz3c.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/zfp.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/codecs/zlib_h.pxd +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/_range_index.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/checksums.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/native_source.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/rows.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/scratch.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/streaming.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/tile_cache.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/core/verification.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_b2nd_file_reader.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_bcn_bands.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_blosc2_partial.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_blosc2_threads.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_bounded_pipeline.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_brunsli.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_capability_manifest.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_chunked_means_cheap.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_codec_registry.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_container_pipeline.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_container_streaming.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_manifest.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_coverage_final.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_bounded_iteration.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_direct_decode.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_mixed_subblocks.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_parallel_write.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_read_dispatch.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_read_out.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_region_index.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_region_windows.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_segment_parts.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_slide_geometry.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_verification.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_write_pipeline.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_czi_writer_shuffle.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_data_source.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_decode_releases_gil.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_deflate.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicom.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicom_encodings.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicom_parallel.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicom_slide_selection.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicom_wsi_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dm.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dm_offsets.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_dm_synthetic.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_eer_parallel.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_eer_worker_budget.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_emd.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_filter_scratch.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_fits_parallel.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_gzip_presized.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_hdf5_parallel.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_hdf5_remote.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_heif_multi_image.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_htj2k_conformance.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_http_unified.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_imaris.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_incremental_byte_codecs.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_isal.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_jpeg2k_region.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_jpegxr.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_jxl.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_lif_indexing.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_lif_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_live_archives.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_mrc.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_mrc_mrcz_http.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_mrc_nifti_writers.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_native_output_sinks.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_native_parity.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_native_source_callbacks.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_nifti.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_nrrd.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_nrrd_iteration.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_nrrd_slices.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_offset_readers.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_oib_indexing.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_oib_native.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_omezarr.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_owned_color_context.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_owned_image_decoders.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_pipeline_budget.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_pipeline_executor.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_pyramid_batched_regions.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_range_pipeline_completion.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_reader_contract.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_reader_source_kinds.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_reader_streaming.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_reference_parity.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_rgbe.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_scaled_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_segment_encoder_binding.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_shared_io_regressions.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_source_pool_lifetime.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_streaming_means_streaming.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_pipeline.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_read_path.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_spool.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_writer_float_predictor.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tiff_writer_verification.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_tile_cache.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_uhdr.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_unified_api.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_url_sources.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_vendor_provenance.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_verified_encoding.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_version_consistency.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_vsi_pyramid.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_writer_contract.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_writer_pipeline_completion.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_writer_verification.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_zarr_adapters.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_zarr_region_fast_path.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_zfp_blocks.py +0 -0
- {opencodecs-0.3.1 → opencodecs-0.5.0}/tests/test_zstd_owned_output.py +0 -0
|
@@ -59,9 +59,16 @@ multi-byte casts with byte-wise readers."""
|
|
|
59
59
|
upstream = "bcdec.h"
|
|
60
60
|
modified = true
|
|
61
61
|
note = """Upstream at the pinned commit, plus one six-line comment on \
|
|
62
|
-
the BC4/BC5 signed path
|
|
63
|
-
|
|
64
|
-
whitespace normalized
|
|
62
|
+
the BC4/BC5 signed path, trailing whitespace stripped, and one block in \
|
|
63
|
+
bcdec_bc7. Before that block, reconstruction verified the rest: our file \
|
|
64
|
+
with that comment removed and trailing whitespace normalized was \
|
|
65
|
+
byte-identical to upstream. The block, marked "opencodecs:", sits ahead of pass 2: \
|
|
66
|
+
modes without secondary indices (all but 4 and 5) skip the general \
|
|
67
|
+
per-texel loop, and with two or three subsets mix all four channels in \
|
|
68
|
+
16-bit lanes of one 64-bit integer. Output is bit-identical (each lane \
|
|
69
|
+
holds bcdec__interpolate's exact result); BC7 decode measured 1.1 to \
|
|
70
|
+
1.4x faster with MSVC, clang-cl, GCC and Apple Clang. Worth sending \
|
|
71
|
+
upstream."""
|
|
65
72
|
|
|
66
73
|
[[component]]
|
|
67
74
|
name = "bitshuffle"
|
|
@@ -84,7 +91,10 @@ uint64 branch of bshuf_write_uint64_BE. They silence MSVC C4244; the \
|
|
|
84
91
|
truncation is intended in all three, the value is masked to a byte \
|
|
85
92
|
already. Re-derived from upstream in 2026-09 so this delta is three \
|
|
86
93
|
lines that can be read, rather than a file nobody could account for. \
|
|
87
|
-
|
|
94
|
+
And the USESSE2 guard also accepts _M_X64: MSVC never defines \
|
|
95
|
+
__SSE2__, though SSE2 is part of x86-64, so MSVC builds ran the scalar \
|
|
96
|
+
fallback, measured at half the speed of the SSE2 path. Both are worth \
|
|
97
|
+
sending upstream."""
|
|
88
98
|
[[component.file]]
|
|
89
99
|
local = "3rdparty/bitshuffle/bitshuffle_core.h"
|
|
90
100
|
upstream = "src/bitshuffle_core.h"
|
|
@@ -92,7 +102,8 @@ Worth sending upstream."""
|
|
|
92
102
|
modified = true
|
|
93
103
|
note = """Upstream master, except the BSHUF_VERSION macros, which \
|
|
94
104
|
upstream left at 0.4.0 on master; ours say 0.5.2 to match the released \
|
|
95
|
-
version the rest of this directory tracks.
|
|
105
|
+
version the rest of this directory tracks. And stdint.h is included for \
|
|
106
|
+
MSVC too, as in bitshuffle_internals.h."""
|
|
96
107
|
[[component.file]]
|
|
97
108
|
local = "3rdparty/bitshuffle/iochain.c"
|
|
98
109
|
upstream = "src/iochain.c"
|
|
@@ -108,6 +119,11 @@ version the rest of this directory tracks."""
|
|
|
108
119
|
[[component.file]]
|
|
109
120
|
local = "3rdparty/bitshuffle/bitshuffle_internals.h"
|
|
110
121
|
upstream = "src/bitshuffle_internals.h"
|
|
122
|
+
modified = true
|
|
123
|
+
note = """Pristine 0.5.2 except that stdint.h is included for MSVC, \
|
|
124
|
+
which has shipped it since 2010 but sets no __STDC_VERSION__ in its \
|
|
125
|
+
default C mode. The hand-written fallback typedefs have no int16_t, so \
|
|
126
|
+
the SSE2 path, once enabled for MSVC, did not compile."""
|
|
111
127
|
|
|
112
128
|
[[component]]
|
|
113
129
|
name = "cfitsio"
|
|
@@ -146,8 +162,12 @@ OC_THREAD_LOCAL, defined next to the min/max compatibility defines."""
|
|
|
146
162
|
modified = true
|
|
147
163
|
note = """Keeps the error-code return convention an earlier vendoring \
|
|
148
164
|
introduced, because our binding depends on it, with upstream's \
|
|
149
|
-
buffer-size guard applied on top.
|
|
150
|
-
|
|
165
|
+
buffer-size guard applied on top. The three decoders also check every \
|
|
166
|
+
input byte against the end of the stream (RICE_NEED_BYTE): upstream \
|
|
167
|
+
checks once per block, and a run of zero bits within a block has no \
|
|
168
|
+
length limit, so a damaged stream read past its buffer. See \
|
|
169
|
+
docs/rice_bounds.md. A blind update would break the binding and drop \
|
|
170
|
+
the checks; port the fix, do not overwrite."""
|
|
151
171
|
# These three live in this directory but are opencodecs code, not
|
|
152
172
|
# cfitsio's. ours = true means the drift check tracks them for
|
|
153
173
|
# accidental edits but never compares them to upstream.
|
|
@@ -179,12 +199,17 @@ license = "BSD-2-Clause"
|
|
|
179
199
|
local = "3rdparty/libspng/spng.c"
|
|
180
200
|
upstream = "spng/spng.c"
|
|
181
201
|
modified = true
|
|
182
|
-
note = """Carries
|
|
202
|
+
note = """Carries four opencodecs changes: the grayscale-defilter \
|
|
183
203
|
patch, the filter_sum_* family (one function per filter instead of a \
|
|
184
|
-
switch inside the per-byte loop),
|
|
185
|
-
family
|
|
204
|
+
switch inside the per-byte loop), the matching filter_scanline_* \
|
|
205
|
+
family, and a libdeflate bypass for an explicit compression strategy. \
|
|
206
|
+
The second and third are the same transformation applied to the two \
|
|
186
207
|
halves of the encode filter path; both are branch hoisting, and both \
|
|
187
|
-
produce byte-identical output to the code they replaced.
|
|
208
|
+
produce byte-identical output to the code they replaced. The fourth: \
|
|
209
|
+
under SPNG_USE_LIBDEFLATE the IDAT stream is compressed in one \
|
|
210
|
+
libdeflate call; setting SPNG_IMG_COMPRESSION_STRATEGY switches that \
|
|
211
|
+
context back to zlib's deflate, since libdeflate has no strategy \
|
|
212
|
+
setting and the option would otherwise be ignored."""
|
|
188
213
|
[[component.file]]
|
|
189
214
|
local = "3rdparty/libspng/spng.h"
|
|
190
215
|
upstream = "spng/spng.h"
|
|
@@ -1404,6 +1404,59 @@ BCDECDEF void bcdec_bc7(const void* compressedBlock, void* decompressedBlock, in
|
|
|
1404
1404
|
}
|
|
1405
1405
|
}
|
|
1406
1406
|
|
|
1407
|
+
/* opencodecs: modes without secondary indices (all but 4 and 5) have
|
|
1408
|
+
no rotation either, so they skip the general loop below. With two or
|
|
1409
|
+
three subsets all four channels mix at once: an endpoint's channels
|
|
1410
|
+
sit in the 16-bit lanes of one 64-bit integer, and as 255 * 64 + 32
|
|
1411
|
+
fits in a lane, one multiply per endpoint weights every channel with
|
|
1412
|
+
no carry between lanes, leaving bcdec__interpolate's exact result in
|
|
1413
|
+
each. One subset keeps the per-channel form, which Clang turns into
|
|
1414
|
+
NEON vector multiplies; the lanes measured 20% slower there. MSVC
|
|
1415
|
+
tested the subset count, secondary indices and rotation for every
|
|
1416
|
+
texel and multiplied each channel separately. Decoding 2048 x 2048
|
|
1417
|
+
random blocks, or all mode 6, measured 1.1 to 1.4x faster with MSVC
|
|
1418
|
+
14.41 to 14.51, clang-cl, GCC and Apple Clang. */
|
|
1419
|
+
if (!indexBits2) {
|
|
1420
|
+
if (numPartitions == 1) {
|
|
1421
|
+
for (i = 0; i < 4; ++i) {
|
|
1422
|
+
for (j = 0; j < 4; ++j) {
|
|
1423
|
+
index = indices[i][j];
|
|
1424
|
+
r = bcdec__interpolate(endpoints[0][0], endpoints[1][0], weights, index);
|
|
1425
|
+
g = bcdec__interpolate(endpoints[0][1], endpoints[1][1], weights, index);
|
|
1426
|
+
b = bcdec__interpolate(endpoints[0][2], endpoints[1][2], weights, index);
|
|
1427
|
+
a = bcdec__interpolate(endpoints[0][3], endpoints[1][3], weights, index);
|
|
1428
|
+
decompressed[j * 4 + 0] = r;
|
|
1429
|
+
decompressed[j * 4 + 1] = g;
|
|
1430
|
+
decompressed[j * 4 + 2] = b;
|
|
1431
|
+
decompressed[j * 4 + 3] = a;
|
|
1432
|
+
}
|
|
1433
|
+
decompressed += destinationPitch;
|
|
1434
|
+
}
|
|
1435
|
+
} else {
|
|
1436
|
+
unsigned long long lo[3], hi[3], v;
|
|
1437
|
+
int w;
|
|
1438
|
+
for (k = 0; k < numPartitions; ++k) {
|
|
1439
|
+
lo[k] = (unsigned long long)endpoints[k * 2][0] | ((unsigned long long)endpoints[k * 2][1] << 16) |
|
|
1440
|
+
((unsigned long long)endpoints[k * 2][2] << 32) | ((unsigned long long)endpoints[k * 2][3] << 48);
|
|
1441
|
+
hi[k] = (unsigned long long)endpoints[k * 2 + 1][0] | ((unsigned long long)endpoints[k * 2 + 1][1] << 16) |
|
|
1442
|
+
((unsigned long long)endpoints[k * 2 + 1][2] << 32) | ((unsigned long long)endpoints[k * 2 + 1][3] << 48);
|
|
1443
|
+
}
|
|
1444
|
+
for (i = 0; i < 4; ++i) {
|
|
1445
|
+
for (j = 0; j < 4; ++j) {
|
|
1446
|
+
partitionSet = partition_sets[numPartitions - 2][partition][i][j] & 0x03;
|
|
1447
|
+
w = weights[(int)indices[i][j]];
|
|
1448
|
+
v = (lo[partitionSet] * (unsigned)(64 - w) + hi[partitionSet] * (unsigned)w + 0x0020002000200020ULL) >> 6;
|
|
1449
|
+
decompressed[j * 4 + 0] = (unsigned char)v;
|
|
1450
|
+
decompressed[j * 4 + 1] = (unsigned char)(v >> 16);
|
|
1451
|
+
decompressed[j * 4 + 2] = (unsigned char)(v >> 32);
|
|
1452
|
+
decompressed[j * 4 + 3] = (unsigned char)(v >> 48);
|
|
1453
|
+
}
|
|
1454
|
+
decompressed += destinationPitch;
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
return;
|
|
1458
|
+
}
|
|
1459
|
+
|
|
1407
1460
|
/* Pass #2: reading alpha indices (if any) and interpolating & rotating */
|
|
1408
1461
|
for (i = 0; i < 4; ++i) {
|
|
1409
1462
|
for (j = 0; j < 4; ++j) {
|
|
@@ -24,7 +24,9 @@
|
|
|
24
24
|
#define USEAVX2
|
|
25
25
|
#endif
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
/* opencodecs: or _M_X64. MSVC never defines __SSE2__, though every x86-64
|
|
28
|
+
CPU has SSE2, so MSVC builds ran the scalar fallback at half the speed. */
|
|
29
|
+
#if defined(__SSE2__) || defined(_M_X64) || defined(NO_WARN_X86_INTRINSICS)
|
|
28
30
|
#define USESSE2
|
|
29
31
|
#endif
|
|
30
32
|
|
|
@@ -31,7 +31,10 @@
|
|
|
31
31
|
#define BITSHUFFLE_CORE_H
|
|
32
32
|
|
|
33
33
|
// We assume GNU g++ defining `__cplusplus` has stdint.h
|
|
34
|
-
|
|
34
|
+
/* opencodecs: and MSVC, which has shipped stdint.h since 2010 but sets no
|
|
35
|
+
__STDC_VERSION__ in its default C mode. The fallback below has no
|
|
36
|
+
int16_t, which the SSE2 byte transpose needs. */
|
|
37
|
+
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199900L) || defined(__cplusplus) || defined(_MSC_VER)
|
|
35
38
|
#include <stdint.h>
|
|
36
39
|
#else
|
|
37
40
|
typedef unsigned char uint8_t;
|
|
@@ -14,7 +14,10 @@
|
|
|
14
14
|
#define BITSHUFFLE_INTERNALS_H
|
|
15
15
|
|
|
16
16
|
// We assume GNU g++ defining `__cplusplus` has stdint.h
|
|
17
|
-
|
|
17
|
+
/* opencodecs: and MSVC, which has shipped stdint.h since 2010 but sets no
|
|
18
|
+
__STDC_VERSION__ in its default C mode. The fallback below has no
|
|
19
|
+
int16_t, which the SSE2 byte transpose needs. */
|
|
20
|
+
#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199900L) || defined(__cplusplus) || defined(_MSC_VER)
|
|
18
21
|
#include <stdint.h>
|
|
19
22
|
#else
|
|
20
23
|
typedef unsigned char uint8_t;
|
|
@@ -892,6 +892,19 @@ done_outputing_bits(Buffer *buffer)
|
|
|
892
892
|
*/
|
|
893
893
|
|
|
894
894
|
/*---------------------------------------------------------------------------*/
|
|
895
|
+
/* Every input byte the decoders below read goes through this check
|
|
896
|
+
first (an opencodecs change). cfitsio checks for the end of the
|
|
897
|
+
input only once per block, which lets a corrupt or truncated stream
|
|
898
|
+
read past the buffer within a block: the run of leading zeros in a
|
|
899
|
+
Rice code has no length limit, so the overrun is unbounded. A valid
|
|
900
|
+
stream never reads past its last byte, so the check does not change
|
|
901
|
+
what one decodes to. */
|
|
902
|
+
#define RICE_NEED_BYTE() \
|
|
903
|
+
do { \
|
|
904
|
+
if (c >= cend) \
|
|
905
|
+
return RCOMP_ERROR_EOS; \
|
|
906
|
+
} while (0)
|
|
907
|
+
|
|
895
908
|
/* this routine used to be called 'rdecomp' (WDP) */
|
|
896
909
|
|
|
897
910
|
int
|
|
@@ -979,12 +992,14 @@ rdecomp_int(
|
|
|
979
992
|
c += 4;
|
|
980
993
|
cend = c + clen - 4;
|
|
981
994
|
|
|
995
|
+
RICE_NEED_BYTE();
|
|
982
996
|
b = *c++; /* bit buffer */
|
|
983
997
|
nbits = 8; /* number of bits remaining in b */
|
|
984
998
|
for (i = 0; i < nx;) {
|
|
985
999
|
/* get the FS value from first fsbits */
|
|
986
1000
|
nbits -= fsbits;
|
|
987
1001
|
while (nbits < 0) {
|
|
1002
|
+
RICE_NEED_BYTE();
|
|
988
1003
|
b = (b << 8) | (*c++);
|
|
989
1004
|
nbits += 8;
|
|
990
1005
|
}
|
|
@@ -1004,10 +1019,12 @@ rdecomp_int(
|
|
|
1004
1019
|
k = bbits - nbits;
|
|
1005
1020
|
diff = b << k;
|
|
1006
1021
|
for (k -= 8; k >= 0; k -= 8) {
|
|
1022
|
+
RICE_NEED_BYTE();
|
|
1007
1023
|
b = *c++;
|
|
1008
1024
|
diff |= b << k;
|
|
1009
1025
|
}
|
|
1010
1026
|
if (nbits > 0) {
|
|
1027
|
+
RICE_NEED_BYTE();
|
|
1011
1028
|
b = *c++;
|
|
1012
1029
|
diff |= b >> (-k);
|
|
1013
1030
|
b &= (1 << nbits) - 1;
|
|
@@ -1034,6 +1051,7 @@ rdecomp_int(
|
|
|
1034
1051
|
/* count number of leading zeros */
|
|
1035
1052
|
while (b == 0) {
|
|
1036
1053
|
nbits += 8;
|
|
1054
|
+
RICE_NEED_BYTE();
|
|
1037
1055
|
b = *c++;
|
|
1038
1056
|
}
|
|
1039
1057
|
nzero = nbits - nonzero_count[b];
|
|
@@ -1043,6 +1061,7 @@ rdecomp_int(
|
|
|
1043
1061
|
/* get the FS trailing bits */
|
|
1044
1062
|
nbits -= fs;
|
|
1045
1063
|
while (nbits < 0) {
|
|
1064
|
+
RICE_NEED_BYTE();
|
|
1046
1065
|
b = (b << 8) | (*c++);
|
|
1047
1066
|
nbits += 8;
|
|
1048
1067
|
}
|
|
@@ -1154,12 +1173,14 @@ rdecomp_short(
|
|
|
1154
1173
|
c += 2;
|
|
1155
1174
|
cend = c + clen - 2;
|
|
1156
1175
|
|
|
1176
|
+
RICE_NEED_BYTE();
|
|
1157
1177
|
b = *c++; /* bit buffer */
|
|
1158
1178
|
nbits = 8; /* number of bits remaining in b */
|
|
1159
1179
|
for (i = 0; i < nx;) {
|
|
1160
1180
|
/* get the FS value from first fsbits */
|
|
1161
1181
|
nbits -= fsbits;
|
|
1162
1182
|
while (nbits < 0) {
|
|
1183
|
+
RICE_NEED_BYTE();
|
|
1163
1184
|
b = (b << 8) | (*c++);
|
|
1164
1185
|
nbits += 8;
|
|
1165
1186
|
}
|
|
@@ -1179,10 +1200,12 @@ rdecomp_short(
|
|
|
1179
1200
|
k = bbits - nbits;
|
|
1180
1201
|
diff = b << k;
|
|
1181
1202
|
for (k -= 8; k >= 0; k -= 8) {
|
|
1203
|
+
RICE_NEED_BYTE();
|
|
1182
1204
|
b = *c++;
|
|
1183
1205
|
diff |= b << k;
|
|
1184
1206
|
}
|
|
1185
1207
|
if (nbits > 0) {
|
|
1208
|
+
RICE_NEED_BYTE();
|
|
1186
1209
|
b = *c++;
|
|
1187
1210
|
diff |= b >> (-k);
|
|
1188
1211
|
b &= (1 << nbits) - 1;
|
|
@@ -1210,6 +1233,7 @@ rdecomp_short(
|
|
|
1210
1233
|
/* count number of leading zeros */
|
|
1211
1234
|
while (b == 0) {
|
|
1212
1235
|
nbits += 8;
|
|
1236
|
+
RICE_NEED_BYTE();
|
|
1213
1237
|
b = *c++;
|
|
1214
1238
|
}
|
|
1215
1239
|
nzero = nbits - nonzero_count[b];
|
|
@@ -1219,6 +1243,7 @@ rdecomp_short(
|
|
|
1219
1243
|
/* get the FS trailing bits */
|
|
1220
1244
|
nbits -= fs;
|
|
1221
1245
|
while (nbits < 0) {
|
|
1246
|
+
RICE_NEED_BYTE();
|
|
1222
1247
|
b = (b << 8) | (*c++);
|
|
1223
1248
|
nbits += 8;
|
|
1224
1249
|
}
|
|
@@ -1325,12 +1350,14 @@ rdecomp_byte(
|
|
|
1325
1350
|
c += 1;
|
|
1326
1351
|
cend = c + clen - 1;
|
|
1327
1352
|
|
|
1353
|
+
RICE_NEED_BYTE();
|
|
1328
1354
|
b = *c++; /* bit buffer */
|
|
1329
1355
|
nbits = 8; /* number of bits remaining in b */
|
|
1330
1356
|
for (i = 0; i < nx;) {
|
|
1331
1357
|
/* get the FS value from first fsbits */
|
|
1332
1358
|
nbits -= fsbits;
|
|
1333
1359
|
while (nbits < 0) {
|
|
1360
|
+
RICE_NEED_BYTE();
|
|
1334
1361
|
b = (b << 8) | (*c++);
|
|
1335
1362
|
nbits += 8;
|
|
1336
1363
|
}
|
|
@@ -1350,10 +1377,12 @@ rdecomp_byte(
|
|
|
1350
1377
|
k = bbits - nbits;
|
|
1351
1378
|
diff = b << k;
|
|
1352
1379
|
for (k -= 8; k >= 0; k -= 8) {
|
|
1380
|
+
RICE_NEED_BYTE();
|
|
1353
1381
|
b = *c++;
|
|
1354
1382
|
diff |= b << k;
|
|
1355
1383
|
}
|
|
1356
1384
|
if (nbits > 0) {
|
|
1385
|
+
RICE_NEED_BYTE();
|
|
1357
1386
|
b = *c++;
|
|
1358
1387
|
diff |= b >> (-k);
|
|
1359
1388
|
b &= (1 << nbits) - 1;
|
|
@@ -1381,6 +1410,7 @@ rdecomp_byte(
|
|
|
1381
1410
|
/* count number of leading zeros */
|
|
1382
1411
|
while (b == 0) {
|
|
1383
1412
|
nbits += 8;
|
|
1413
|
+
RICE_NEED_BYTE();
|
|
1384
1414
|
b = *c++;
|
|
1385
1415
|
}
|
|
1386
1416
|
nzero = nbits - nonzero_count[b];
|
|
@@ -1390,6 +1420,7 @@ rdecomp_byte(
|
|
|
1390
1420
|
/* get the FS trailing bits */
|
|
1391
1421
|
nbits -= fs;
|
|
1392
1422
|
while (nbits < 0) {
|
|
1423
|
+
RICE_NEED_BYTE();
|
|
1393
1424
|
b = (b << 8) | (*c++);
|
|
1394
1425
|
nbits += 8;
|
|
1395
1426
|
}
|
|
@@ -358,6 +358,7 @@ struct spng_ctx
|
|
|
358
358
|
size_t libdef_inbuf_size;
|
|
359
359
|
size_t libdef_inbuf_cap;
|
|
360
360
|
int libdef_level; /* requested compression level */
|
|
361
|
+
int libdef_bypass; /* image strategy set: use zlib */
|
|
361
362
|
#endif
|
|
362
363
|
unsigned char *scanline_buf, *prev_scanline_buf, *row_buf, *filtered_scanline_buf;
|
|
363
364
|
unsigned char *scanline, *prev_scanline, *row, *filtered_scanline;
|
|
@@ -1264,9 +1265,16 @@ static int spng__deflate_init(spng_ctx *ctx, struct spng__zlib_options *options)
|
|
|
1264
1265
|
{
|
|
1265
1266
|
libdeflate_free_compressor(
|
|
1266
1267
|
(struct libdeflate_compressor *)ctx->libdef_compressor);
|
|
1268
|
+
ctx->libdef_compressor = NULL;
|
|
1269
|
+
}
|
|
1270
|
+
/* libdeflate has no strategy setting. When the caller set the image
|
|
1271
|
+
strategy explicitly, IDAT goes through zlib's deflate (initialized
|
|
1272
|
+
above with that strategy) so the setting is honored. */
|
|
1273
|
+
if(!ctx->libdef_bypass)
|
|
1274
|
+
{
|
|
1275
|
+
ctx->libdef_compressor = libdeflate_alloc_compressor(ctx->libdef_level);
|
|
1276
|
+
if(ctx->libdef_compressor == NULL) return SPNG_EZLIB_INIT;
|
|
1267
1277
|
}
|
|
1268
|
-
ctx->libdef_compressor = libdeflate_alloc_compressor(ctx->libdef_level);
|
|
1269
|
-
if(ctx->libdef_compressor == NULL) return SPNG_EZLIB_INIT;
|
|
1270
1278
|
if(ctx->libdef_inbuf)
|
|
1271
1279
|
{
|
|
1272
1280
|
spng__free(ctx, ctx->libdef_inbuf);
|
|
@@ -4685,6 +4693,8 @@ static int write_idat_bytes(spng_ctx *ctx, const void *scanline, size_t len, int
|
|
|
4685
4693
|
int ret = 0;
|
|
4686
4694
|
|
|
4687
4695
|
#ifdef SPNG_USE_LIBDEFLATE
|
|
4696
|
+
if(!ctx->libdef_bypass)
|
|
4697
|
+
{
|
|
4688
4698
|
(void)flush;
|
|
4689
4699
|
/* Append the scanline bytes to our libdeflate input accumulator.
|
|
4690
4700
|
The actual compression happens in finish_idat() once we have
|
|
@@ -4707,7 +4717,8 @@ static int write_idat_bytes(spng_ctx *ctx, const void *scanline, size_t len, int
|
|
|
4707
4717
|
memcpy(ctx->libdef_inbuf + ctx->libdef_inbuf_size, scanline, len);
|
|
4708
4718
|
ctx->libdef_inbuf_size = need;
|
|
4709
4719
|
return 0;
|
|
4710
|
-
|
|
4720
|
+
}
|
|
4721
|
+
#endif
|
|
4711
4722
|
unsigned char *data = NULL;
|
|
4712
4723
|
z_stream *zstream = &ctx->zstream;
|
|
4713
4724
|
uint32_t idat_length = SPNG_WRITE_SIZE;
|
|
@@ -4736,7 +4747,6 @@ static int write_idat_bytes(spng_ctx *ctx, const void *scanline, size_t len, int
|
|
|
4736
4747
|
if(ret != Z_OK) return SPNG_EZLIB;
|
|
4737
4748
|
|
|
4738
4749
|
return 0;
|
|
4739
|
-
#endif
|
|
4740
4750
|
}
|
|
4741
4751
|
|
|
4742
4752
|
static int finish_idat(spng_ctx *ctx)
|
|
@@ -4746,6 +4756,8 @@ static int finish_idat(spng_ctx *ctx)
|
|
|
4746
4756
|
uint32_t idat_length = SPNG_WRITE_SIZE;
|
|
4747
4757
|
|
|
4748
4758
|
#ifdef SPNG_USE_LIBDEFLATE
|
|
4759
|
+
if(!ctx->libdef_bypass)
|
|
4760
|
+
{
|
|
4749
4761
|
/* One-shot compress the accumulated filtered-row stream and
|
|
4750
4762
|
splay the output across SPNG_WRITE_SIZE-sized IDAT chunks.
|
|
4751
4763
|
Reader compatibility is identical — PNG concatenates IDATs
|
|
@@ -4817,7 +4829,8 @@ static int finish_idat(spng_ctx *ctx)
|
|
|
4817
4829
|
ctx->libdef_inbuf_cap = 0;
|
|
4818
4830
|
|
|
4819
4831
|
return finish_chunk(ctx);
|
|
4820
|
-
|
|
4832
|
+
}
|
|
4833
|
+
#endif
|
|
4821
4834
|
z_stream *zstream = &ctx->zstream;
|
|
4822
4835
|
|
|
4823
4836
|
while(ret != Z_STREAM_END)
|
|
@@ -4850,7 +4863,6 @@ static int finish_idat(spng_ctx *ctx)
|
|
|
4850
4863
|
if(ret) return ret;
|
|
4851
4864
|
|
|
4852
4865
|
return finish_chunk(ctx);
|
|
4853
|
-
#endif
|
|
4854
4866
|
}
|
|
4855
4867
|
|
|
4856
4868
|
static int encode_scanline(spng_ctx *ctx, const void *scanline, size_t len)
|
|
@@ -5533,6 +5545,9 @@ int spng_set_option(spng_ctx *ctx, enum spng_option option, int value)
|
|
|
5533
5545
|
case SPNG_IMG_COMPRESSION_STRATEGY:
|
|
5534
5546
|
{
|
|
5535
5547
|
ctx->image_options.strategy = value;
|
|
5548
|
+
#ifdef SPNG_USE_LIBDEFLATE
|
|
5549
|
+
ctx->libdef_bypass = 1;
|
|
5550
|
+
#endif
|
|
5536
5551
|
break;
|
|
5537
5552
|
}
|
|
5538
5553
|
case SPNG_TEXT_COMPRESSION_LEVEL:
|
|
@@ -25,9 +25,15 @@
|
|
|
25
25
|
* 2-bit symbol (1 horz + 1 vert): s ^= 0x03 -> 0b11
|
|
26
26
|
*
|
|
27
27
|
* Both constants flip exactly the MSB of each field and leave the low
|
|
28
|
-
* bits alone
|
|
29
|
-
*
|
|
30
|
-
*
|
|
28
|
+
* bits alone. RELION's comment on that XOR (citing Thermo Fisher) says
|
|
29
|
+
* the field is a SIGNED 2-bit value, -2..1 (signed 1-bit for 1-bit
|
|
30
|
+
* fields). Turning a signed n-bit field into an unsigned index means
|
|
31
|
+
* adding 2^(n-1), which is flipping its top bit, at every width; so we
|
|
32
|
+
* apply that rule for all widths. Thermo Fisher's public EER format
|
|
33
|
+
* document (v3.0) defines only the tags and leaves the bitstream out of
|
|
34
|
+
* scope, so this is the only stated convention. NOTE: imagecodecs XORs
|
|
35
|
+
* each field with its WIDTH (^3, ^4), which equals the top-bit flip only
|
|
36
|
+
* at widths 1 and 2; real Falcon hardware only ever emits 1 or 2, so
|
|
31
37
|
* that divergence does not affect real data. See
|
|
32
38
|
* tests/test_eer.py::test_eer_subpixel_inversion_is_width_independent.
|
|
33
39
|
*
|
|
@@ -107,7 +107,11 @@ static int decode_inner(
|
|
|
107
107
|
accum_bits -= code_size;
|
|
108
108
|
|
|
109
109
|
if (OC_UNLIKELY(code == eoi_code)) {
|
|
110
|
-
|
|
110
|
+
/* An end code before the frame is full is an error in
|
|
111
|
+
* libgif too (D_GIF_ERR_EOF_TOO_SOON, "Image EOF detected
|
|
112
|
+
* before image complete"). Returning success here left the
|
|
113
|
+
* rest of the caller's raster unwritten. */
|
|
114
|
+
return (out_p == out_end) ? 0 : -2;
|
|
111
115
|
}
|
|
112
116
|
if (OC_UNLIKELY(code == clear_code)) {
|
|
113
117
|
code_size = min_code_size + 1;
|
|
@@ -125,8 +129,12 @@ static int decode_inner(
|
|
|
125
129
|
if (OC_UNLIKELY(c >= next_code)) {
|
|
126
130
|
/* "KwKwK" special case: the code refers to an entry we're
|
|
127
131
|
* about to add. Emit the previous string + first byte of
|
|
128
|
-
* previous string.
|
|
129
|
-
|
|
132
|
+
* previous string. Only next_code itself can be that entry;
|
|
133
|
+
* a larger code was never defined, and accepting it made
|
|
134
|
+
* it prev_code, so the next table entry pointed at an
|
|
135
|
+
* uninitialized slot and a later prefix walk read outside
|
|
136
|
+
* the table. libgif rejects it too (D_GIF_ERR_IMAGE_DEFECT). */
|
|
137
|
+
if (OC_UNLIKELY(prev_code < 0 || c > next_code)) {
|
|
130
138
|
return -4;
|
|
131
139
|
}
|
|
132
140
|
stack[sp++] = (uint8_t) first_byte[prev_code];
|
|
@@ -145,9 +153,16 @@ static int decode_inner(
|
|
|
145
153
|
stack[sp++] = (uint8_t) c;
|
|
146
154
|
uint8_t first = (uint8_t) c;
|
|
147
155
|
|
|
148
|
-
/* Bounds check + drain stack into output (reversed → forward).
|
|
156
|
+
/* Bounds check + drain stack into output (reversed → forward).
|
|
157
|
+
* A stream that codes more pixels than the frame holds fills
|
|
158
|
+
* the frame and stops: libgif (DGifGetLine) decodes exactly
|
|
159
|
+
* width * height pixels and skips the rest of the data, so the
|
|
160
|
+
* surplus is ignored rather than failing the decode. */
|
|
149
161
|
if (OC_UNLIKELY(out_p + sp > out_end)) {
|
|
150
|
-
|
|
162
|
+
while (out_p < out_end) {
|
|
163
|
+
*out_p++ = stack[--sp];
|
|
164
|
+
}
|
|
165
|
+
return 0;
|
|
151
166
|
}
|
|
152
167
|
/* Reverse copy: stack[sp-1..0] → out_p[0..sp-1]. */
|
|
153
168
|
for (int i = sp - 1; i >= 0; i--) {
|
|
@@ -42,10 +42,11 @@ typedef struct {
|
|
|
42
42
|
* output: pre-allocated buffer of `output_len` bytes (= width*height).
|
|
43
43
|
*
|
|
44
44
|
* Return value:
|
|
45
|
-
* 0 on success.
|
|
45
|
+
* 0 on success: exactly output_len pixels were written. Codes past
|
|
46
|
+
* the last pixel are ignored, as libgif ignores them.
|
|
46
47
|
* -1 invalid min_code_size.
|
|
47
|
-
* -2
|
|
48
|
-
*
|
|
48
|
+
* -2 the image data ended (end of input, or the EOI code) before
|
|
49
|
+
* output_len pixels were decoded.
|
|
49
50
|
* -4 invalid code referenced before it was defined.
|
|
50
51
|
*/
|
|
51
52
|
int oc_giflzw_decode_blocks(
|