Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ pixel-to-codestream encoding is not implemented.
cargo add jxr
```

Requires **Rust 1.99.0 or newer**. The current release is **0.3.0**; see the
[release notes](docs/releasing.md#030-release-line) for migration details.
Requires **Rust 1.99.0 or newer**. The current release is **0.3.1**; see the
[release notes](docs/releasing.md#031-patch-release) for migration details.

## What it does

Expand Down Expand Up @@ -247,7 +247,7 @@ transforms. It preserves explicit alpha and output-format semantics, and rejects
unsupported combinations instead of approximating another format.

**API status.** JXR is under active development on the `0.x` release line.
Version 0.3.0 uses exact J2K 0.12.0 dependencies; applications using the shared
The 0.3 line uses exact J2K 0.12.0 dependencies; applications using the shared
J2K types must update those dependencies together. Check the release notes
before upgrading.

Expand Down
4 changes: 2 additions & 2 deletions crates/jxr-image/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "jxr-image"
description = "Lossless ownership adapter from JPEG XR decode results to image::DynamicImage"
version = "0.3.0"
version = "0.3.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand All @@ -13,7 +13,7 @@ readme = "README.md"

[dependencies]
image.workspace = true
jxr = { path = "../jxr", version = "=0.3.0" }
jxr = { path = "../jxr", version = "=0.3.1" }
thiserror.workspace = true

[lints]
Expand Down
2 changes: 1 addition & 1 deletion crates/jxr-metal/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "jxr-metal"
description = "Metal execution boundary for the JXR decoder"
version = "0.3.0"
version = "0.3.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
6 changes: 3 additions & 3 deletions crates/jxr-mpsgraph/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "jxr-mpsgraph"
description = "Direct MPSGraph tensor adapter for Metal-resident JPEG XR batches"
version = "0.3.0"
version = "0.4.0"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand All @@ -13,9 +13,9 @@ readme = "README.md"

[dependencies]
j2k-metal-support.workspace = true
jxr = { path = "../jxr", version = "=0.3.0", features = ["metal"] }
jxr = { path = "../jxr", version = "=0.3.1", features = ["metal"] }
jxr-core = { path = "../jxr-core", version = "=0.3.0" }
jxr-metal = { path = "../jxr-metal", version = "=0.3.0" }
jxr-metal = { path = "../jxr-metal", version = "=0.3.1" }
thiserror.workspace = true

[target.'cfg(all(target_arch = "aarch64", target_os = "macos"))'.dependencies]
Expand Down
2 changes: 1 addition & 1 deletion crates/jxr-native/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "jxr-native"
description = "Safe Rust JPEG XR parser, CPU decoder, and Annex-A writer"
version = "0.3.0"
version = "0.3.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand Down
4 changes: 2 additions & 2 deletions crates/jxr-test-support/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ metal = ["jxr/metal"]
cuda = ["jxr/cuda"]

[dependencies]
jxr = { path = "../jxr", version = "=0.3.0" }
jxr-native = { path = "../jxr-native", version = "=0.3.0" }
jxr = { path = "../jxr", version = "=0.3.1" }
jxr-native = { path = "../jxr-native", version = "=0.3.1" }
rayon.workspace = true
thiserror.workspace = true

Expand Down
6 changes: 3 additions & 3 deletions crates/jxr/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]
name = "jxr"
description = "JPEG XR decoder and Annex-A writer with optional Metal and CUDA reconstruction"
version = "0.3.0"
version = "0.3.1"
edition.workspace = true
rust-version.workspace = true
license.workspace = true
Expand All @@ -19,8 +19,8 @@ cuda = ["dep:jxr-cuda"]

[dependencies]
jxr-core = { path = "../jxr-core", version = "=0.3.0" }
jxr-native = { path = "../jxr-native", version = "=0.3.0" }
jxr-metal = { path = "../jxr-metal", version = "=0.3.0", optional = true }
jxr-native = { path = "../jxr-native", version = "=0.3.1" }
jxr-metal = { path = "../jxr-metal", version = "=0.3.1", optional = true }
jxr-cuda = { path = "../jxr-cuda", version = "=0.3.0", optional = true }
rayon.workspace = true
thiserror.workspace = true
Expand Down
4 changes: 2 additions & 2 deletions crates/jxr/fuzz/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

38 changes: 38 additions & 0 deletions docs/releasing.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,3 +130,41 @@ passed for the tagged source. CPU, Annex-A writer, Metal, and CUDA reference
comparisons each passed 517 in-scope cases, with 179 declared scope exclusions
and no failures. The reports and hardware benchmark results are attached to
the [0.3.0 release](https://github.com/frames-sg/jxr/releases/tag/v0.3.0).

## 0.3.1 patch release

This patch release makes decoding faster without changing decoded output or
the existing decode contracts. CPU entropy decoding caches packet bits, decodes
run prefixes and per-symbol codes inline, and places coefficients directly in
their adaptive scan. Spatial tiles decode straight into the coefficient arena
or caller-owned Metal staging instead of being copied after the tile decode.
CPU inverse transforms, overlap filters, and common integer output packing use
four-lane and row-parallel paths with checked scalar fallbacks.

Metal specializes output stores, batches overlap dispatches, reuses
coefficient staging across submissions, and overlaps `MetalBatchDecoder`
preparation with GPU reconstruction. Automatic Metal routing now promotes at
2^21 reconstructed coefficients instead of 16,384, so `Auto` decodes smaller
images on the CPU; explicit Metal requests are unchanged. MPSGraph batch
preparation runs on the decoder's worker pool and decodes entropy directly into
Metal staging, so prepared groups run without a coefficient upload. A staging
allocation failure now fails `prepare` rather than a later run.

Additions are `MetalDecoderSession::stage_diagnostics` with
`MetalStageDiagnostics`, the `staging` field of the non-exhaustive
`MetalBufferPoolsDiagnostics`, and `CpuBatchDecoder::install`. Per-change
measurements are in pull requests #12 through #19.

Publish the changed packages and their exact-version dependents in this order:

1. `jxr-native` 0.3.1
2. `jxr-metal` 0.3.1
3. `jxr` 0.3.1
4. `jxr-image` 0.3.1
5. `jxr-mpsgraph` 0.4.0

`jxr-math` 0.1.1, `jxr-core` 0.3.0, and `jxr-cuda` 0.3.0 are unchanged and stay
at their published versions. `jxr-image` changes only its exact `jxr` pin.
`jxr-mpsgraph` moves to 0.4.0 because `MpsGraphPreparedGroup` and
`MpsGraphPreparedBatch` now hold staged Metal plans and are no longer
`UnwindSafe` or `RefUnwindSafe`; its other public API is unchanged.
Loading