feat(imaging): default to pure-Rust codecs
This commit is contained in:
@@ -6,11 +6,11 @@ and mutable raw payload. Concrete animation, sound, script, calling-card,
|
||||
landmark, settings, mesh, texture, wearable, and notecard models enforce a 64 MiB
|
||||
input ceiling and reject malformed structured formats with typed errors. Mesh and
|
||||
settings parsing use StructuredData. Texture encode/decode uses the imaging
|
||||
crate's bounded `jpeg2000` adapter, while the opt-in `vorbis` feature streams
|
||||
PCM conversion through bounded planar Ogg Vorbis blocks; neither API exposes
|
||||
codec implementation types. With either native codec feature disabled, its
|
||||
public API remains present and returns a typed `InvalidOperation` for otherwise
|
||||
valid input instead of discovering or linking a system codec implicitly.
|
||||
crate's default bounded pure-Rust JPEG 2000 adapter, while the opt-in `vorbis`
|
||||
feature streams PCM conversion through bounded planar Ogg Vorbis blocks;
|
||||
neither API exposes codec implementation types. The optional native OpenJPEG
|
||||
path is selected only by its explicit feature and never discovered or linked
|
||||
by a default build.
|
||||
|
||||
`AssetManager` is client-owned and shares one `DownloadManager` and `AssetCache`.
|
||||
ViewerAsset, GetMesh, GetTexture, and server-bake requests check the cache before
|
||||
|
||||
@@ -49,7 +49,8 @@ All native boundaries have Linux, Windows, and macOS strategies:
|
||||
|---|---|---|---|
|
||||
| libopus 1.3+ | `pkg-config` package `opus` | vcpkg `opus` for MSVC; `pkg-config` for GNU | WebRTC voice crate |
|
||||
| OpenJPEG 2.5.4+ | `pkg-config` package `libopenjp2` | vcpkg `openjpeg` for MSVC; `pkg-config` for GNU | opt-in `jpeg2000` |
|
||||
| j2k 0.8.1 | pure Rust, no platform prerequisite | same pure-Rust graph | opt-in `rust-j2k` |
|
||||
| j2k 0.8.1 | pure Rust, no platform prerequisite | same pure-Rust graph | default `rust-j2k` |
|
||||
| skia-rs-codec 0.3.0 and image-webp 0.2.4 | pure Rust, no platform prerequisite | same pure-Rust graph | default `rust-skia` |
|
||||
| Skia 0.99.0 | target-specific official binary cache or source build | same target-specific strategy | opt-in `skia` |
|
||||
| Vorbis 0.5.6 stack | `vorbis_rs` builds its reviewed C codec stack | same crate strategy | opt-in `vorbis` |
|
||||
| Physical audio | ALSA development files on Linux; CoreAudio is system-provided on macOS | WASAPI is system-provided | opt-in `real-audio` |
|
||||
|
||||
@@ -17,18 +17,19 @@ and [`MeshFoundry` guide](../crates/libremetaverse-rendering-mesh-foundry/README
|
||||
| --- | --- | --- | --- |
|
||||
| Managed images and TGA | enabled | n/a | none |
|
||||
| JPEG 2000 | disabled | `libremetaverse-imaging/jpeg2000` | OpenJPEG 2.5.x |
|
||||
| JPEG 2000 (pure Rust) | disabled | `libremetaverse-imaging/rust-j2k` | none (`j2k` 0.8.1) |
|
||||
| BMP/GIF/ICO/JPEG/PNG/WBMP/WebP (pure Rust) | disabled | `libremetaverse-imaging-skia/rust-skia` | none (`skia-rs-codec` 0.3.0 plus `image-webp` 0.2.4) |
|
||||
| JPEG 2000 (pure Rust) | enabled | `libremetaverse-imaging/rust-j2k` | none (`j2k` 0.8.1) |
|
||||
| BMP/GIF/ICO/JPEG/PNG/WBMP/WebP (pure Rust) | enabled | `libremetaverse-imaging-skia/rust-skia` | none (`skia-rs-codec` 0.3.0 plus `image-webp` 0.2.4) |
|
||||
| BMP/GIF/ICO/JPEG/PNG/WBMP/WebP (native) | disabled | `libremetaverse-imaging-skia/skia` | Skia |
|
||||
| Prim and sculpt meshing, OBJ ingestion | enabled | n/a | none |
|
||||
|
||||
OpenJPEG is a non-default workspace member so release tooling can package the
|
||||
adapter explicitly, and imaging reaches it only through the optional
|
||||
dependency. The independent `rust-j2k` feature reaches only the audited
|
||||
pure-Rust `j2k` graph; enabling both features keeps both explicit codec types
|
||||
available for interoperability testing. Skia is likewise an optional,
|
||||
target-specific dependency. The consolidated required Gitea gate exercises the
|
||||
native feature, while a dedicated `ubuntu-latest` job tests `rust-skia`, audits
|
||||
dependency. The default `rust-j2k` feature reaches only the audited pure-Rust
|
||||
`j2k` graph; enabling both features keeps both explicit codec types available
|
||||
for interoperability testing. Native Skia is likewise an optional,
|
||||
target-specific dependency, while `rust-skia` is the raster crate default. The
|
||||
consolidated required Gitea gate exercises the native feature, while a dedicated
|
||||
`ubuntu-latest` job tests `rust-skia`, audits
|
||||
its normal/build graph without installing native codec tools, and compiles the
|
||||
same code for WASM. Minimal-feature checks still prove no codec is needed for
|
||||
the owned Rust and translated compatibility tests.
|
||||
|
||||
@@ -17,14 +17,14 @@ is evidence of remaining work, never permission to waive it.
|
||||
|
||||
## Features and prerequisites
|
||||
|
||||
The default `libremetaverse` build uses the pure-Rust `dds-bc67` image path.
|
||||
Optional boundaries are explicit:
|
||||
The default MetaCrate build uses the pure-Rust `dds-bc67`, `rust-j2k`, and
|
||||
`rust-skia` image paths. Native alternatives remain explicit opt-ins:
|
||||
|
||||
| Feature | Capability | Native/build prerequisite |
|
||||
| --- | --- | --- |
|
||||
| `jpeg2000` | J2K/JP2 through the safe OpenJPEG adapter | OpenJPEG 2.5.4 or newer |
|
||||
| `rust-j2k` | J2K/JP2 through `RustJ2kCodec` | none; exact pure-Rust `j2k` 0.8.1 |
|
||||
| `rust-skia` | BMP/GIF/ICO/JPEG/PNG/WBMP/WebP through `RustSkiaTextureCodec` | none; exact pure-Rust `skia-rs-codec` 0.3.0 and `image-webp` 0.2.4 |
|
||||
| `rust-j2k` (default) | J2K/JP2 through `RustJ2kCodec` | none; exact pure-Rust `j2k` 0.8.1 |
|
||||
| `rust-skia` (default) | BMP/GIF/ICO/JPEG/PNG/WBMP/WebP through `RustSkiaTextureCodec` | none; exact pure-Rust `skia-rs-codec` 0.3.0 and `image-webp` 0.2.4 |
|
||||
| `skia` | PNG/JPEG/WebP and other Skia formats | Skia 0.99 target cache or documented source tools |
|
||||
| `vorbis` | PCM to Ogg Vorbis | the locked `vorbis_rs` native build stack |
|
||||
| default WebRTC | native ICE/DTLS/SRTP/RTP/SCTP and Opus | system libopus 1.3 or newer |
|
||||
|
||||
@@ -15,11 +15,11 @@ they use those APIs directly.
|
||||
|
||||
| Crate | Choose it for | Features or system boundary |
|
||||
| --- | --- | --- |
|
||||
| `libremetaverse` | Grid client, login, network, agents, inventory, assets, appearance, world, and social APIs | Default pure-Rust BC6H/BC7; optional `jpeg2000`, `rust-j2k`, and `vorbis` |
|
||||
| `libremetaverse` | Grid client, login, network, agents, inventory, assets, appearance, world, and social APIs | Default pure-Rust BC6H/BC7 and J2K/JP2; optional native `jpeg2000` and `vorbis` |
|
||||
| `libremetaverse-types` | UUIDs, vectors, matrices, colors, cancellation, compatibility collections, and boundary types | Pure Rust |
|
||||
| `libremetaverse-structured-data` | LLSD/OSD XML, JSON, binary, and notation | Pure Rust |
|
||||
| `libremetaverse-imaging` | Managed images, TGA/DDS, codec traits | Optional `jpeg2000` or pure-Rust `rust-j2k` |
|
||||
| `libremetaverse-imaging-skia` | Common raster formats through native Skia or pure Rust | Optional `skia` native build/cache; optional `rust-skia` has no native prerequisites |
|
||||
| `libremetaverse-imaging` | Managed images, TGA/DDS, codec traits | Default pure-Rust `rust-j2k`; optional native `jpeg2000` |
|
||||
| `libremetaverse-imaging-skia` | Common raster formats through native Skia or pure Rust | Default pure-Rust `rust-skia`; optional `skia` native build/cache |
|
||||
| `libremetaverse-prim-mesher` | Legacy prim and sculpt geometry | Pure Rust |
|
||||
| `libremetaverse-rendering-simple` | Deterministic reference geometry | Pure Rust |
|
||||
| `libremetaverse-rendering-mesh-foundry` | Prim, terrain, sculpt, and mesh-asset rendering | Pure Rust |
|
||||
@@ -31,8 +31,8 @@ they use those APIs directly.
|
||||
| `libremetaverse-openjpeg` | Audited `OpenJPEG` adapter | System `OpenJPEG` 2.5.4 or newer |
|
||||
| `libremetaverse-opus` | Audited Opus encoder/decoder adapter | System libopus |
|
||||
|
||||
Features are additive. Keep defaults unless you need a codec, and enable one
|
||||
native adapter at a time while diagnosing installation problems. The
|
||||
Features are additive. Keep the pure-Rust defaults for normal applications,
|
||||
and enable a native adapter only when it is specifically needed. The
|
||||
[release CI matrix](release-ci-matrix.md) records every validated combination.
|
||||
|
||||
## Naming and overload migration
|
||||
@@ -190,7 +190,7 @@ The default client build needs no image-codec system library. Optional native
|
||||
features require:
|
||||
|
||||
- `OpenJPEG` 2.5.4 or newer for `jpeg2000`;
|
||||
- no native prerequisite for the pure-Rust `rust-j2k` feature;
|
||||
- no native prerequisite for the default pure-Rust `rust-j2k` and `rust-skia` features;
|
||||
- the rust-skia prerequisites/cache for `skia`;
|
||||
- system libopus for WebRTC voice and the `libremetaverse-opus` adapter;
|
||||
- ALSA development headers on Linux, `CoreAudio` on macOS, or WASAPI on Windows
|
||||
|
||||
Reference in New Issue
Block a user