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
39pub mod corpus;
40pub mod error;
41pub mod eval;
42pub mod import;
43pub mod metrics;
44pub mod stats;
45pub mod viewing;
46
47// Re-export commonly used types
48pub use corpus::{Corpus, CorpusImage, ImageCategory, SparseCheckout, SparseFilter, SparseStatus};
49pub use error::{Error, Result};
50pub use eval::{
51    report::{CodecResult, CorpusReport, ImageReport},
52    session::{EvalConfig, EvalSession, ImageData},
53};
54pub use import::{CsvImporter, CsvSchema, ExternalResult};
55pub use metrics::{MetricConfig, MetricResult, PerceptionLevel};
56pub use stats::{
57    ChartConfig, ChartPoint, ChartSeries, ParetoFront, RDPoint, Summary, generate_svg,
58};
59pub use viewing::ViewingCondition;