mirror of
https://github.com/storytold/craft-libs.git
synced 2026-11-14 06:22:24 +00:00
* craft-video: HEVC decoder from FilmCraft (`hevc-decode` feature) FilmCraft's crates/hevc at 4c0d2ad7 becomes craft_video::hevc::decode. The encoder moves to hevc/encode and is still exported from craft_video::hevc. Feature hevc now turns on hevc-decode and hevc-encode, so either half can be built without the other. craft_video::budget (the picture memory budget from DeckCraft's bitstream crate) is added for the next commit. craft-video is built at opt-level 3 in the dev profile, as FilmCraft built its codecs. * craft-video: HEVC decoder hardening from DeckCraft's copy - The picture store (DPB, current picture, pictures in flight) is checked against a memory budget before a picture is allocated; Decoder::set_memory_budget. - configure_hvcc checks every array before handling any NAL: only VPS, SPS, PPS and SEI arrays, each NAL header agreeing with its array type. A picture slice in the record starts no picture. - init_qp_minus26, slice_qp_delta and delta_chroma_log2_weight_denom are range checked before the additions that overflowed on Exp-Golomb values near the i32 limits. - A picture job sets up its picture state inside the panic guard.
craft-video
Clean-room pure-Rust video codecs for the Craft apps, one feature per codec: DNxHD/DNxHR, VP8, ProRes and H.264.
- Input and output are byte slices and planar sample buffers; the crate opens no files itself and performs no filesystem I/O.
- Implemented from published standards and RFCs (SMPTE ST 2019-1, RFC 6386, SMPTE RDD 36 and ITU-T H.264).
- Tested against ffmpeg as an external oracle with roundtrips, hostile fuzzing, and conformance vectors.
No
unsafe, no panics on corrupt streams. Builds forwasm32-unknown-unknown. - Containers (MP4/MOV, Matroska/WebM), bit-level I/O (
craft_media::bitstream) and shared identifiers (CodecId,CodecParams) come fromcraft-media.
Cargo features
No codec feature is on by default.
| Feature | Module | Codec |
|---|---|---|
dnx |
dnx |
Avid DNxHD / DNxHR (SMPTE ST 2019-1 VC-3): decoder and encoder |
vp8 |
vp8 |
VP8 (RFC 6386): decoder |
prores |
prores |
Apple ProRes (SMPTE RDD 36): decoder and encoder |
h264 |
h264 |
ITU-T H.264 / AVC: encoder |
hevc |
hevc |
ITU-T H.265 / HEVC: decoder (hevc-decode alone) and encoder (hevc-encode alone) |
vp9 |
vp9 |
VP9: decoder (vp9-decode alone) and encoder (vp9-encode alone) |
av1 |
av1 |
AV1 (AOMedia Video 1): encoder |
threads |
— | Multi-threaded slice/row parallelism via rayon |