opencodecs 0.1.7__tar.gz → 0.1.9__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.1.7 → opencodecs-0.1.9}/CHANGES.rst +75 -0
- {opencodecs-0.1.7/src/opencodecs.egg-info → opencodecs-0.1.9}/PKG-INFO +1 -1
- {opencodecs-0.1.7 → opencodecs-0.1.9}/pyproject.toml +1 -1
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/__init__.py +1 -1
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_bcdec.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_bmp.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_eer.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_hcomp.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_plio.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_png.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_qoi.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_rcomp.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_rgbe.c +152 -152
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/uhdr.py +83 -10
- {opencodecs-0.1.7 → opencodecs-0.1.9/src/opencodecs.egg-info}/PKG-INFO +1 -1
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_uhdr.py +91 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/bcdec/bcdec.h +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/bitshuffle/bitshuffle_core.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/bitshuffle/iochain.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/cfitsio/fits_hdecompress.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/cfitsio/pliocomp.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/cfitsio/ricecomp.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/imcd_eer/eer.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/imcd_eer/eer.h +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/imcd_lzw/lzw.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/imcd_lzw/lzw.h +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/libspng/spng.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/oc_tifflzw/oc_tifflzw.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/oc_tifflzw/oc_tifflzw.h +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/3rdparty/rgbe/rgbe.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/MANIFEST.in +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/README.md +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/bench/build_libjxl.sh +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/patches/libjxl/README.md +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/setup.cfg +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/setup.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_aec_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_avif_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_b2nd_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_bcn_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_bitshuffle_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_blosc2_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_bmp_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_brotli_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_brunsli_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_byteshuffle_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_bz2_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_cms_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_czi_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_czi_reader.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_czi_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_deflate_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_dicomrle_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_dicomweb.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_eer_reader.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ets.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_fits.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_fits_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_fits_compressed.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_gif_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_gzip_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_hdf5_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_hdf5_http.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_heif_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_htj2k_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_jpeg2k_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_jpeg_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_jpegls_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_jxl_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_lerc_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_lif_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_lif_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_lz4_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_lzma_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_mozjpeg_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_nd2_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_nd2_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ndtiff.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ndtiff_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ndtiff_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_none_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_numpy_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_oib_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_oib_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_oir_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ole2.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ome_xml.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_omezarr.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_omezarr_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_packints_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_pcodec_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_png_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_predictor_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_pyramid_build.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_qoi_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_quantize_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_rcomp_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_rgbe.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_rgbe_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_snappy_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_sperr_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_sz3_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_tiff_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_tiff_http.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_tiff_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_tiff_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_ultrahdr_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_vsi_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_webp_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_zarr_codecs.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_zfp_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/_zstd_codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/__init__.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_bitshuffle.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_bytetools.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_deflate.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_lz4.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_ndtiff.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_registry.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_tiff.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/codecs/_zstd.c +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/__init__.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/_io_helpers.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/_optional_backend.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/codec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/color.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/errors.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/io.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/core/segment_compression.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/jxl.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/parallel.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/tiff_reader.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/tifffile_patch.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs/zarr.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs.egg-info/SOURCES.txt +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs.egg-info/dependency_links.txt +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs.egg-info/requires.txt +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/src/opencodecs.egg-info/top_level.txt +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_auto_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_bcdec.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_brunsli.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_charls.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_core_codec_api.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus_codec_decode.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus_other.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus_png.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus_tiff.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_corpus_vendors.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_coverage_final.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_coverage_finishing.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_coverage_last.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_coverage_more.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_coverage_push.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_czi_fixture.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_czi_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_czi_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_data_source.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_deflate.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_dicomweb.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_edge_cases.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_eer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_encode_comprehensive.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_error_handling.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_fits.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_gif.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_hdf5_http.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_hdf5_local.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_heif_avif_features.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_http_byte_savings.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_http_prefetch.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_http_unified.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_io_chunked.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_isal.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_jxl.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_lif_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_live_archives.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_mozjpeg.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_native_parity.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_nd2_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_ndtiff.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_oib_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_ome_xml.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_omezarr.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_omezarr_sharded_range.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_open_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_openjph.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_optional_backend.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_parallel_jxl.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_phase4_filters.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_phase5_icc.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_phase6_codecs.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_phase7_cms.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_rgbe.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_snappy.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tier1_scientific.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_codec_encode.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_http.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_native.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_pyramid.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_reader.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tiff_writer.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_tifffile_patch.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_unified_api.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_vsi_oir.py +0 -0
- {opencodecs-0.1.7 → opencodecs-0.1.9}/tests/test_zarr_adapters.py +0 -0
|
@@ -10,6 +10,81 @@ Versions follow the same ``YYYY.M.D`` cadence as upstream when we
|
|
|
10
10
|
publish; the entries below cluster work by date rather than by
|
|
11
11
|
release because most of it has shipped continuously to ``main``.
|
|
12
12
|
|
|
13
|
+
0.1.9 (2026-06-02)
|
|
14
|
+
------------------
|
|
15
|
+
|
|
16
|
+
**Lossless SDR base layer on encode (opt-in)**
|
|
17
|
+
|
|
18
|
+
``opencodecs.codecs._jpeg.encode`` gained a ``lossless=False`` kwarg
|
|
19
|
+
that switches libjpeg-turbo into predictive lossless mode
|
|
20
|
+
(``TJPARAM_LOSSLESS=1``, PSV=1, forced 4:4:4 chroma). Output is
|
|
21
|
+
bit-exact through the libjpeg-turbo decoder, at the cost of ~3-5×
|
|
22
|
+
larger files vs ``level=95`` baseline DCT on natural-image content.
|
|
23
|
+
|
|
24
|
+
``opencodecs.uhdr.encode_native(lossless=True)`` routes the SDR base
|
|
25
|
+
layer through that lossless path while keeping the gain map lossy
|
|
26
|
+
(there's no perceptual benefit to making a band-limited gain map
|
|
27
|
+
lossless, and it would balloon the file).
|
|
28
|
+
|
|
29
|
+
Empirical caveats — verified on macOS 15 with an HDR-capable
|
|
30
|
+
display:
|
|
31
|
+
|
|
32
|
+
* macOS Preview, Chrome 116+, and any viewer that parses the MPF /
|
|
33
|
+
XMP gain-map block directly **HDR-render the output normally**.
|
|
34
|
+
* libuhdr's reference ``uhdr_decode`` (and therefore
|
|
35
|
+
``opencodecs.uhdr.decode``) **rejects** the file. It enforces a
|
|
36
|
+
strict ``JCS_YCbCr`` / ``JCS_GRAYSCALE`` colorspace check that
|
|
37
|
+
lossless-mode JPEG (which writes ``JCS_RGB``) fails.
|
|
38
|
+
* Apple's ``CGImageSource`` ``Headroom`` property and
|
|
39
|
+
``kCGImageAuxiliaryDataTypeISOGainMap`` aux-data accessors miss
|
|
40
|
+
the HDR signal (same root cause), even though Preview's actual
|
|
41
|
+
render path composites the gain map correctly.
|
|
42
|
+
* ``opencodecs.uhdr.decode_native`` reads it cleanly — it uses our
|
|
43
|
+
own gain-application kernel without libuhdr's colorspace gate.
|
|
44
|
+
|
|
45
|
+
Use only when exact SDR-base-pixel preservation is a hard
|
|
46
|
+
requirement (archival, scientific imaging) and every consumer in
|
|
47
|
+
your pipeline is either Preview / Chrome / ``decode_native``. The
|
|
48
|
+
``v0.1.8`` note that called lossless "not a conforming Ultra-HDR
|
|
49
|
+
file" was too strong — it's non-conforming to libuhdr's reference
|
|
50
|
+
decoder and Apple's narrow ImageIO API, but visual HDR consumers
|
|
51
|
+
accept it just fine.
|
|
52
|
+
|
|
53
|
+
0.1.8 (2026-06-02)
|
|
54
|
+
------------------
|
|
55
|
+
|
|
56
|
+
**DCT-domain decode-time scale on JPEG + decode_native**
|
|
57
|
+
|
|
58
|
+
``opencodecs.codecs._jpeg.decode`` now exposes libjpeg-turbo's
|
|
59
|
+
``tj3SetScalingFactor`` knob via a new ``scale=`` kwarg (plus
|
|
60
|
+
explicit ``scale_num`` / ``scale_denom`` for advanced callers). The
|
|
61
|
+
decoder skips the inverse-DCT work for high-frequency coefficients
|
|
62
|
+
when the caller requests a downsampled output, so a 1/8 decode runs
|
|
63
|
+
~2× faster than a full decode and produces a 64× smaller raster.
|
|
64
|
+
|
|
65
|
+
Supported factors are libjpeg-turbo's full set of 16 ratios N/8 for
|
|
66
|
+
N ∈ {1, 2, …, 16} — i.e. anywhere between 1/8 and 2/1. The new
|
|
67
|
+
``opencodecs.codecs._jpeg.supported_scaling_factors()`` returns them
|
|
68
|
+
as ``(num, denom)`` pairs. ``scale=`` accepts:
|
|
69
|
+
|
|
70
|
+
* an integer N (interpreted as ``1/N``)
|
|
71
|
+
* a float (snapped to the closest supported ratio)
|
|
72
|
+
* a tuple ``(num, denom)`` verbatim
|
|
73
|
+
|
|
74
|
+
``opencodecs.uhdr.decode_native(..., scale=...)`` threads the same
|
|
75
|
+
knob through both the SDR base and the gain-map JPEG decodes. The
|
|
76
|
+
gain-application kernel runs on the smaller rasters, so the whole
|
|
77
|
+
pipeline scales — a 2k² Ultra-HDR decode at ``scale=8`` returns a
|
|
78
|
+
``(250, 250, 3)`` fp16 raster in ~25 ms vs ~53 ms for the full
|
|
79
|
+
decode. Useful for thumbnail / preview pipelines that want real
|
|
80
|
+
HDR pixels off cloud-stored Ultra-HDR without paying the megapixel
|
|
81
|
+
JPEG decode cost. Lossless source not required — the JPEG file is
|
|
82
|
+
unchanged on disk; the savings come from skipping IDCT work.
|
|
83
|
+
|
|
84
|
+
(libuhdr lossless support is unchanged: ISO 21496-1's SDR base layer
|
|
85
|
+
is required to be baseline DCT JPEG, so lossless-mode JPEG would
|
|
86
|
+
not be a conforming Ultra-HDR file.)
|
|
87
|
+
|
|
13
88
|
0.1.7 (2026-06-02)
|
|
14
89
|
------------------
|
|
15
90
|
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "opencodecs"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.9"
|
|
8
8
|
description = "Streaming, network-aware image codecs for scientific imaging (prototype: JPEG XL)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10"
|