Files
photocraft/crates/codecs/fuzz/Cargo.toml
T
lloydandClaude Opus 5.5 54e7287ba6 Animated WebP: every frame loads into video layers (#1198)
An animated WebP used to bring only its first frame into a video layer. Now
New Video Layer from File, Replace Footage, Reload Frame and Video Frames to
Layers take every frame, as they do for an animated GIF (#572):

- photocraft-codecs: `decode_webp_frames` returns each frame composited onto
  the canvas by image-webp (offsets, blending, disposal), with its duration in
  milliseconds and the file's ICC profile. A still WebP is one frame, read as
  `decode` reads it. A damaged later frame keeps the frames before it and marks
  the first `Truncated`; the frame count and total bytes are checked against
  `Limits`. `webp_is_animated` tells the two apart. New `decode_webp` fuzz
  target.
- photocraft-io: `import_webp_frames`, sharing `import_gif_frames`' loop.
- photocraft-engine: `load_frames` takes an animated WebP's frames; the
  timeline rate comes from the most common duration. A still WebP keeps the
  existing path and the 30 fps default.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 19:24:07 +02:00

79 lines
1.3 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.4"
[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
[[bin]]
name = "decode_webp"
path = "fuzz_targets/decode_webp.rs"
test = false
doc = false
bench = false