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 (requires `interpolation` feature)
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    // Session-based evaluation (full API)
57    CodecResult,
58    CorpusReport,
59    EvalConfig,
60    EvalSession,
61    ImageData,
62    ImageReport,
63    // Evaluation helpers (lightweight API for zen* projects)
64    assert_perception_level,
65    assert_quality,
66    evaluate_single,
67};
68pub use import::{CsvImporter, ExternalResult};
69pub use metrics::{MetricConfig, MetricResult, PerceptionLevel};
70pub use stats::{ParetoFront, RDPoint, Summary};
71pub use viewing::{REFERENCE_PPD, ViewingCondition};
72
73// Advanced/specialized re-exports (less commonly used)
74
75/// Sparse corpus checkout types (for large test corpora).
76#[cfg(feature = "default")]
77pub use corpus::{SparseCheckout, SparseFilter, SparseStatus};
78
79/// CSV schema for importing external results.
80#[cfg(feature = "default")]
81pub use import::CsvSchema;
82
83/// ICC color profile support (requires `icc` feature).
84#[cfg(feature = "icc")]
85pub use metrics::ColorProfile;
86
87/// XYB color space roundtrip (for testing XYB-based codecs).
88pub use metrics::xyb_roundtrip;
89
90/// Statistical functions (mean, median, percentile, etc.).
91pub use stats::{iqr, mean, median, percentile, percentile_u32, std_dev, trimmed_mean};
92
93/// Viewing condition simulation parameters.
94pub use viewing::{SimulationMode, SimulationParams};
95
96// Feature-gated re-exports
97
98/// Chart generation types (requires `chart` feature).
99#[cfg(feature = "chart")]
100pub use stats::{ChartConfig, ChartPoint, ChartSeries, generate_svg};
101
102/// Polynomial interpolation for quality curves (requires `interpolation` feature).
103#[cfg(feature = "interpolation")]
104pub use interpolation::{
105    GapPolynomial, InterpolationConfig, InterpolationTable, compute_gap_polynomials,
106    fit_gap_polynomial, fit_power_law, linear_interpolate,
107};