1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
//! GIF codec for `otf-pixels`, implemented from scratch.
//!
//! Decode covers the whole format: all frames, both interlace layouts,
//! transparency, and every disposal method. Encode is single-frame with
//! palette quantization, which is SPEC §Formats' stated v1 scope — animation
//! *pipelines* are v2.
//!
//! # Frames and the engine
//!
//! [`Decoder`] yields one image, so [`GifDecoder`] presents the first frame
//! composited onto the canvas. Every existing pipeline therefore works on a
//! GIF unchanged, and the engine stays frame-unaware.
//!
//! Callers who want the animation use [`GifDecoder::next_frame`], which walks
//! the remaining frames and applies disposal between them. That keeps
//! "animation pipelines are v2" honest: the decode is complete, and only the
//! graph integration is deferred.
//!
//! [`Decoder`]: otf_pixels_core::Decoder
pub use ;
pub use GifEncoder;
pub use ;
pub use ;
/// Translate a compression failure into this crate's error type.
///
/// `otf-pixels-compress` deliberately does not depend on `otf-pixels-core`
/// (ADR-0012), so the mapping lives here, where the format context is known.
pub