Files
Dylan M. TaylorandJustin A. Wilson 45177e282e craft-webp: animated WebP writer, lossy through craft-video's VP8 encoder (depends on #969) (#1021)
* craft-video: VP8 key-frame encoder (`vp8-encode` feature)

Moves effectcraft's effectcraft-vp8enc here: the lossy picture of a WebP image
or animation frame, written from RFC 6386. Rate-distortion choice between the
16x16 and B_PRED intra modes, per-frame token probability updates, loop filter
level from the quantizer.

`vp8` now turns on `vp8-decode` and `vp8-encode`, as `vp9` does; the decoder's
tests and examples require `vp8-decode`. The tests decode the encoder's frames
with this crate's decoder: with the loop filter off it reproduces the encoder's
reconstruction exactly.

* craft-webp: animated WebP writer, lossy through craft-video (feature vp8)

The VP8X/ANIM/ANMF container around frames another encoder made (lossy with
an alpha plane, or lossless VP8L), and with feature vp8 whole lossy
animations from RGBA frames through craft-video's VP8 key-frame encoder.

---------

Co-authored-by: Justin A. Wilson <waj334@gmail.com>
2026-11-11 20:37:10 -05:00

24 lines
834 B
TOML

[package]
name = "craft-webp"
description = "WebP container (RIFF) reader and writer: canvas, alpha and animation frames from the chunk headers, and the container around an encoded VP8 frame with alpha and metadata chunks."
version.workspace = true
edition.workspace = true
license.workspace = true
rust-version.workspace = true
repository.workspace = true
[lints]
workspace = true
[features]
# Decoding every frame through the `image` crate's WebP decoder, with bounded memory.
frames = ["dep:image"]
[dependencies]
thiserror = { workspace = true }
image = { version = "0.25", default-features = false, features = ["webp"], optional = true }
[dev-dependencies]
# Decodes the files the writer makes and writes still test files; not a product dependency.
image = { version = "0.25", default-features = false, features = ["webp"] }