mirror of
https://github.com/storytold/photocraft.git
synced 2026-10-29 04:17:11 -06:00
* feat(codecs): decode every frame of an animated GIF (#572) decode_gif_frames returns each frame composited onto the logical screen (disposal methods applied) with its delay in milliseconds. decode still keeps the first frame only. A damaged later frame keeps the frames before it and marks the first with DecodeWarning::Truncated; dimensions, the total decoded bytes and a frame cap are checked against the limits. * feat(io): import_gif_frames hands each GIF frame over as a document (#572) A frame at a time becomes a single-layer document, so a caller can flatten and drop it instead of holding every frame twice. * feat(engine): animated GIFs load every frame into video layers (#572) New Video Layer from File, Replace Footage, Reload Frame and Video Frames to Layers take all frames of a GIF instead of the first. The timeline rate comes from the GIF's delays (the most common one, delays under 20 ms shown at 100 ms as browsers do); an explicit fps still wins. * docs: animated GIF frames in video layers (#572) --------- Co-authored-by: Brandon Thomas <echelon@gmail.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
72 lines
1.2 KiB
TOML
72 lines
1.2 KiB
TOML
[package]
|
|
name = "photocraft-codecs-fuzz"
|
|
version = "0.0.0"
|
|
publish = false
|
|
edition = "2024"
|
|
license = "MIT OR Apache-2.0"
|
|
|
|
[package.metadata]
|
|
cargo-fuzz = true
|
|
|
|
# Standalone workspace so the main workspace's `crates/*` glob and lints do
|
|
# not apply (cargo-fuzz needs nightly + sanitizer flags).
|
|
[workspace]
|
|
|
|
[dependencies]
|
|
libfuzzer-sys = "0.4"
|
|
photocraft-codecs = { path = "..", features = ["heif"] }
|
|
# Called directly too: the codec turns its panics into errors (see decode_heif.rs).
|
|
heic-rs = "=0.1.1"
|
|
|
|
[profile.release]
|
|
debug = 1
|
|
|
|
[[bin]]
|
|
name = "decode_any"
|
|
path = "fuzz_targets/decode_any.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_png"
|
|
path = "fuzz_targets/decode_png.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_jpeg"
|
|
path = "fuzz_targets/decode_jpeg.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_tiff"
|
|
path = "fuzz_targets/decode_tiff.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_exr"
|
|
path = "fuzz_targets/decode_exr.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_heif"
|
|
path = "fuzz_targets/decode_heif.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|
|
|
|
[[bin]]
|
|
name = "decode_gif"
|
|
path = "fuzz_targets/decode_gif.rs"
|
|
test = false
|
|
doc = false
|
|
bench = false
|