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
9 changes: 9 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ dependency is a registry package. 0.x source compatibility is a non-goal (see

All entries below are **breaking**, grouped by area.

#### Package boundaries

- Image formats now live in 17 independently publishable
`rawshift-image-*` leaf crates. `rawshift-image` remains a source-compatible
feature facade and owns processing, transforms, and camera data.
- `rawshift-image-core` provides the canonical image/error types and open
format capability traits; metadata, TIFF/IFD helpers, and lossless JPEG are
isolated in focused support crates.

#### Core types (`rawshift-core`)

- Generic primitives are gamut re-exports; only the sensor domain stays
Expand Down
241 changes: 241 additions & 0 deletions Cargo.lock

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

42 changes: 42 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,27 @@ members = [
"crates/rawshift-core",
"crates/rawshift-hwdec",
"crates/rawshift-image",
"crates/rawshift-image-core",
"crates/rawshift-image-metadata",
"crates/rawshift-image-ifd",
"crates/rawshift-image-ljpeg",
"crates/rawshift-image-arw",
"crates/rawshift-image-avif",
"crates/rawshift-image-cr2",
"crates/rawshift-image-cr3",
"crates/rawshift-image-crw",
"crates/rawshift-image-dng",
"crates/rawshift-image-nef",
"crates/rawshift-image-raf",
"crates/rawshift-image-heic",
"crates/rawshift-image-gif",
"crates/rawshift-image-jpeg",
"crates/rawshift-image-jxl",
"crates/rawshift-image-png",
"crates/rawshift-image-ppm",
"crates/rawshift-image-svg",
"crates/rawshift-image-tiff",
"crates/rawshift-image-webp",
"crates/rawshift-video",
]

Expand Down Expand Up @@ -50,6 +71,27 @@ serde = { version = "1.0", features = ["derive"] }
rawshift-core = { path = "crates/rawshift-core", version = "0.1.1" }
rawshift-hwdec = { path = "crates/rawshift-hwdec", version = "0.1.1" }
rawshift-image = { path = "crates/rawshift-image", version = "0.1.1" }
rawshift-image-core = { path = "crates/rawshift-image-core", version = "0.1.1" }
rawshift-image-metadata = { path = "crates/rawshift-image-metadata", version = "0.1.1" }
rawshift-image-ifd = { path = "crates/rawshift-image-ifd", version = "0.1.1" }
rawshift-image-ljpeg = { path = "crates/rawshift-image-ljpeg", version = "0.1.1" }
rawshift-image-arw = { path = "crates/rawshift-image-arw", version = "0.1.1", default-features = false }
rawshift-image-avif = { path = "crates/rawshift-image-avif", version = "0.1.1", default-features = false }
rawshift-image-cr2 = { path = "crates/rawshift-image-cr2", version = "0.1.1", default-features = false }
rawshift-image-cr3 = { path = "crates/rawshift-image-cr3", version = "0.1.1", default-features = false }
rawshift-image-crw = { path = "crates/rawshift-image-crw", version = "0.1.1", default-features = false }
rawshift-image-dng = { path = "crates/rawshift-image-dng", version = "0.1.1", default-features = false }
rawshift-image-nef = { path = "crates/rawshift-image-nef", version = "0.1.1", default-features = false }
rawshift-image-raf = { path = "crates/rawshift-image-raf", version = "0.1.1", default-features = false }
rawshift-image-heic = { path = "crates/rawshift-image-heic", version = "0.1.1", default-features = false }
rawshift-image-gif = { path = "crates/rawshift-image-gif", version = "0.1.1", default-features = false }
rawshift-image-jpeg = { path = "crates/rawshift-image-jpeg", version = "0.1.1", default-features = false }
rawshift-image-jxl = { path = "crates/rawshift-image-jxl", version = "0.1.1", default-features = false }
rawshift-image-png = { path = "crates/rawshift-image-png", version = "0.1.1", default-features = false }
rawshift-image-ppm = { path = "crates/rawshift-image-ppm", version = "0.1.1", default-features = false }
rawshift-image-svg = { path = "crates/rawshift-image-svg", version = "0.1.1", default-features = false }
rawshift-image-tiff = { path = "crates/rawshift-image-tiff", version = "0.1.1", default-features = false }
rawshift-image-webp = { path = "crates/rawshift-image-webp", version = "0.1.1", default-features = false }
rawshift-video = { path = "crates/rawshift-video", version = "0.1.1" }

# Profiles must live at the workspace root — Cargo ignores profiles declared in
Expand Down
4 changes: 2 additions & 2 deletions PRINCIPLES.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@
## Safety Boundaries

- `crates/rawshift-core`: `#![forbid(unsafe_code)]`.
- `crates/rawshift-image/src/formats`: Safe Rust is strictly required.
- `crates/rawshift-image-*`: Safe Rust is strictly required.
- `crates/rawshift-image/src/data`: Safe Rust is strictly required.
- `crates/rawshift-image/src/metadata`: Safe Rust is strictly required.
- `crates/rawshift-image/src/processing`: Unsafe Rust is acceptable as long as it is constrained to hot paths.
- `crates/rawshift-image/src/transforms`: Unsafe Rust is acceptable as long as it is constrained to hot paths.
- `crates/rawshift-hwdec`: Unsafe FFI is permitted — `#![deny(unsafe_op_in_unsafe_fn)]`, every public item is a safe wrapper, every unsafe block documents its invariants. No platform unsafe lives anywhere else.
- `crates/rawshift-hwdec`: Unsafe platform FFI is permitted — `#![deny(unsafe_op_in_unsafe_fn)]`, every public item is a safe wrapper, every unsafe block documents its invariants.
- `**/**`: TBD

## Testing Strategy
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ rawshift is a Cargo workspace:
| ---------------- | ---------------------------------------------------------------------------------------------------------------- |
| [`rawshift`](./crates/rawshift) | Facade. Re-exports `rawshift-image` behind the coarse `image` feature. Most consumers depend on this. |
| [`rawshift-image`](./crates/rawshift-image/README.md) | Still-image decoding, RAW processing, and encoding. Carries the full per-format feature system. |
| `rawshift-image-*` format crates | Independently usable format leaves (`jpeg`, `png`, `dng`, `arw`, and others) behind shared `rawshift-image-core` contracts. |
| `rawshift-image-{metadata,ifd,ljpeg}` | Focused support crates shared by format leaves; applications normally use them transitively. |
| [`rawshift-video`](./crates/rawshift-video/README.md) | Video support — parked and unpublished for v1 (see [Video](#video)). |
| [`rawshift-core`](./crates/rawshift-core/README.md) | Shared types — geometry, codec descriptors, the metadata model. Charter is documented on the crate. |

Expand Down
20 changes: 20 additions & 0 deletions crates/rawshift-image-arw/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
[package]
name = "rawshift-image-arw"
version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
repository.workspace = true
homepage.workspace = true
description = "Sony ARW decoding for rawshift"

[dependencies]
rawshift-image-core = { workspace = true }
rawshift-image-ifd = { workspace = true, optional = true }
rawshift-image-ljpeg = { workspace = true, optional = true }
gamut-ifd = { workspace = true, optional = true, features = ["bigtiff"] }
tracing = { workspace = true, optional = true }

[features]
default = ["decode"]
decode = ["dep:rawshift-image-ifd", "dep:rawshift-image-ljpeg", "dep:gamut-ifd", "dep:tracing"]
Loading
Loading