pub const DEFAULT_PRE_ROLL_FRAMES: u64 = 10;
pub const DEFAULT_POST_ROLL_FRAMES: u64 = 10;
pub const DEFAULT_MATCH_THRESHOLD: f64 = 0.8;
pub const HIGH_QUALITY_THRESHOLD: f64 = 0.9;
pub const LOW_QUALITY_THRESHOLD: f64 = 0.7;
pub const DEFAULT_FUZZY_MAX_DISTANCE: usize = 3;
pub const DEFAULT_DURATION_TOLERANCE: f64 = 0.5;
pub const MAX_PARALLEL_JOBS: usize = 0;
pub const DEFAULT_CACHE_TTL_SECS: u64 = 3600;
pub const MAX_LRU_CACHE_CAPACITY: usize = 1000;
pub const PROGRESS_UPDATE_INTERVAL_MS: u64 = 100;
pub const DEFAULT_BATCH_SIZE: usize = 10;
pub const VIDEO_EXTENSIONS: &[&str] = &[
"mov", "mp4", "m4v", "avi", "mkv", "mxf", "dpx", "r3d", "arri", "braw",
];
pub const AUDIO_EXTENSIONS: &[&str] = &["wav", "aif", "aiff", "mp3", "aac", "flac"];
pub const IMAGE_EXTENSIONS: &[&str] = &["dpx", "tiff", "tif", "png", "jpg", "jpeg", "exr"];
pub const STANDARD_FRAME_RATES: &[(f64, &str)] = &[
(23.976, "23.976"),
(24.0, "24"),
(25.0, "25"),
(29.97, "29.97"),
(30.0, "30"),
(50.0, "50"),
(59.94, "59.94"),
(60.0, "60"),
];
pub const COMMON_RESOLUTIONS: &[(u32, u32, &str)] = &[
(1920, 1080, "1080p"),
(1280, 720, "720p"),
(3840, 2160, "4K UHD"),
(4096, 2160, "4K DCI"),
(7680, 4320, "8K"),
(2048, 1080, "2K"),
];
pub const EDL_COMMENT_MARKERS: &[&str] = &["*", "//", "#"];
pub const MAX_TIMECODE_HOURS: u8 = 23;
pub const MAX_TIMECODE_MINUTES: u8 = 59;
pub const MAX_TIMECODE_SECONDS: u8 = 59;
pub const MIN_MATCH_SCORE: f64 = 0.5;
pub const DEFAULT_SEGMENT_DURATION_SECS: f64 = 600.0;
pub const FILE_IO_BUFFER_SIZE: usize = 8192;
pub const MAX_FILENAME_LENGTH: usize = 255;
pub const MAX_PATH_LENGTH: usize = 4096;
pub const DEFAULT_REPORT_TITLE: &str = "Conform Report";
pub const VERSION_FORMAT: &str = "v{major}.{minor}.{patch}";
pub const DATABASE_SCHEMA_VERSION: i32 = 1;
pub const DEFAULT_SESSION_TIMEOUT_SECS: u64 = 3600;
pub const MAX_RETRY_ATTEMPTS: usize = 3;
pub const RETRY_DELAY_MS: u64 = 1000;
pub const DEFAULT_LOG_LEVEL: &str = "info";
pub const APP_NAME: &str = "OxiMedia Conform";
pub const CONFIG_FILE_NAME: &str = "conform.json";
pub const DATABASE_FILE_NAME: &str = "conform.db";
pub const CACHE_DIR_NAME: &str = ".conform_cache";
pub const TEMP_DIR_NAME: &str = ".conform_temp";
pub const REPORT_DIR_NAME: &str = "reports";
pub const MAX_AMBIGUOUS_CANDIDATES: usize = 10;
pub const HTML_CLASS_PREFIX: &str = "conform-";
pub const CSV_DELIMITER: char = ',';
pub const TSV_DELIMITER: char = '\t';
pub const NEWLINE: &str = "\n";
pub const TAB: &str = "\t";
pub const PROGRESS_BAR_SEGMENTS: usize = 40;
pub const ETA_WINDOW_SIZE: usize = 10;
pub const BYTES_PER_KB: u64 = 1024;
pub const BYTES_PER_MB: u64 = BYTES_PER_KB * 1024;
pub const BYTES_PER_GB: u64 = BYTES_PER_MB * 1024;
pub const BYTES_PER_TB: u64 = BYTES_PER_GB * 1024;
pub const SECS_PER_MINUTE: u64 = 60;
pub const SECS_PER_HOUR: u64 = SECS_PER_MINUTE * 60;
pub const SECS_PER_DAY: u64 = SECS_PER_HOUR * 24;
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_constants() {
assert_eq!(DEFAULT_PRE_ROLL_FRAMES, 10);
assert_eq!(DEFAULT_POST_ROLL_FRAMES, 10);
assert!((DEFAULT_MATCH_THRESHOLD - 0.8).abs() < f64::EPSILON);
}
#[test]
fn test_file_extensions() {
assert!(VIDEO_EXTENSIONS.contains(&"mov"));
assert!(AUDIO_EXTENSIONS.contains(&"wav"));
assert!(IMAGE_EXTENSIONS.contains(&"dpx"));
}
#[test]
fn test_byte_constants() {
assert_eq!(BYTES_PER_KB, 1024);
assert_eq!(BYTES_PER_MB, 1024 * 1024);
assert_eq!(BYTES_PER_GB, 1024 * 1024 * 1024);
}
#[test]
fn test_time_constants() {
assert_eq!(SECS_PER_MINUTE, 60);
assert_eq!(SECS_PER_HOUR, 3600);
assert_eq!(SECS_PER_DAY, 86400);
}
}