Skip to main content

codec_eval/
lib.rs

1//! # codec-eval
2//!
3//! Image codec comparison and evaluation library.
4//!
5//! This library provides an **API-first design** where external crates provide
6//! encode/decode callbacks, and this library handles quality metrics, viewing
7//! conditions, and report generation.
8//!
9//! ## Quick Start
10//!
11//! ```rust,ignore
12//! use codec_eval::{EvalSession, EvalConfig, ViewingCondition, ImageData};
13//!
14//! let config = EvalConfig::builder()
15//!     .report_dir("./reports")
16//!     .viewing(ViewingCondition::desktop())
17//!     .build();
18//!
19//! let mut session = EvalSession::new(config);
20//!
21//! session.add_codec("my-codec", "1.0.0", Box::new(|image, request| {
22//!     // Your encoding logic here
23//!     Ok(encoded_bytes)
24//! }));
25//!
26//! let report = session.evaluate_image("test.png", image_data)?;
27//! ```
28//!
29//! ## Modules
30//!
31//! - [`error`]: Error types for the library
32//! - [`viewing`]: Viewing condition modeling for perceptual metrics
33//! - [`metrics`]: Quality metrics (DSSIM, SSIMULACRA2, Butteraugli, PSNR)
34//! - [`eval`]: Evaluation session and report generation
35//! - [`corpus`]: Test corpus management
36//! - [`import`]: CSV import for third-party results
37//! - [`stats`]: Statistical analysis and Pareto front
38//! - [`interpolation`]: Quality interpolation and polynomial fitting
39
40pub mod corpus;
41#[cfg(feature = "jpeg-decode")]
42pub mod decode;
43pub mod error;
44pub mod eval;
45pub mod import;
46#[cfg(feature = "interpolation")]
47pub mod interpolation;
48pub mod metrics;
49pub mod stats;
50pub mod viewing;
51
52// Re-export commonly used types for codec evaluation
53pub use corpus::{Corpus, CorpusImage, ImageCategory};
54pub use error::{Error, Result};
55pub use eval::{
56    // Evaluation helpers (lightweight API for zen* projects)
57    assert_perception_level, assert_quality, evaluate_single,
58    // Session-based evaluation (full API)
59    CodecResult, CorpusReport, EvalConfig, EvalSession, ImageReport, ImageData,
60};
61pub use import::{CsvImporter, ExternalResult};
62pub use metrics::{MetricConfig, MetricResult, PerceptionLevel};
63pub use stats::{ParetoFront, RDPoint, Summary};
64pub use viewing::{ViewingCondition, REFERENCE_PPD};
65
66// Advanced/specialized re-exports (less commonly used)
67
68/// Sparse corpus checkout types (for large test corpora).
69#[cfg(feature = "default")]
70pub use corpus::{SparseCheckout, SparseFilter, SparseStatus};
71
72/// CSV schema for importing external results.
73#[cfg(feature = "default")]
74pub use import::CsvSchema;
75
76/// ICC color profile support (requires `icc` feature).
77#[cfg(feature = "icc")]
78pub use metrics::ColorProfile;
79
80/// XYB color space roundtrip (for testing XYB-based codecs).
81pub use metrics::xyb_roundtrip;
82
83/// Statistical functions (mean, median, percentile, etc.).
84pub use stats::{iqr, mean, median, percentile, percentile_u32, std_dev, trimmed_mean};
85
86/// Viewing condition simulation parameters.
87pub use viewing::{SimulationMode, SimulationParams};
88
89// Feature-gated re-exports
90
91/// Chart generation types (requires `chart` feature).
92#[cfg(feature = "chart")]
93pub use stats::{generate_svg, ChartConfig, ChartPoint, ChartSeries};
94
95/// Polynomial interpolation for quality curves (requires `interpolation` feature).
96#[cfg(feature = "interpolation")]
97pub use interpolation::{
98    compute_gap_polynomials, fit_gap_polynomial, fit_power_law, linear_interpolate,
99    GapPolynomial, InterpolationConfig, InterpolationTable,
100};