Skip to main content

oximedia_conform/
lib.rs

1//! `OxiMedia` Conform - Professional Media Conforming System.
2//!
3//! This crate provides comprehensive tools for conforming media timelines from
4//! EDL, XML, and AAF formats to actual media files. It supports various matching
5//! strategies, quality control, and export to multiple formats.
6//!
7//! # Features
8//!
9//! - **EDL Import**: CMX 3600, CMX 3400 format support
10//! - **XML Import**: Final Cut Pro, Premiere, `DaVinci` Resolve
11//! - **AAF Import**: Avid Media Composer timelines
12//! - **Multiple Matching Strategies**: Filename, timecode, content hash, duration
13//! - **Media Database**: SQLite-based catalog with search
14//! - **Quality Control**: Validation and verification
15//! - **Timeline Reconstruction**: Multi-track video/audio
16//! - **Export Formats**: MP4, Matroska, EDL, XML, AAF, frame sequences
17//!
18//! # Example
19//!
20//! ```no_run
21//! use oximedia_conform::{ConformSession, ConformConfig};
22//! use std::path::PathBuf;
23//!
24//! # async fn example() -> Result<(), Box<dyn std::error::Error>> {
25//! let mut session = ConformSession::new(
26//!     "My Conform".to_string(),
27//!     PathBuf::from("timeline.edl"),
28//!     vec![PathBuf::from("/media/sources")],
29//!     PathBuf::from("/output/conformed"),
30//!     ConformConfig::default(),
31//! )?;
32//!
33//! // Run the complete conform workflow
34//! let report = session.run().await?;
35//!
36//! println!("Conformed {}/{} clips",
37//!          report.stats.matched_count,
38//!          report.stats.total_clips);
39//! # Ok(())
40//! # }
41//! ```
42
43#![warn(missing_docs)]
44#![allow(clippy::module_name_repetitions)]
45#![allow(clippy::missing_errors_doc)]
46#![allow(clippy::missing_panics_doc)]
47
48pub mod afd_wss;
49pub mod analysis;
50pub mod audio_conform;
51pub mod batch;
52pub mod broadcast_safe;
53pub mod cache;
54pub mod clip_resolver;
55pub mod config;
56pub mod conform_diff;
57pub mod conform_enhancements;
58pub mod conform_log;
59pub mod conform_manifest;
60pub mod conform_snapshot;
61pub mod constants;
62pub mod database;
63pub mod deliverable_check;
64pub mod delivery_map;
65pub mod encode_param_check;
66pub mod error;
67pub mod exporters;
68pub mod format_conform;
69pub mod frame_rate_convert;
70pub mod importers;
71pub mod loudness_conform;
72pub mod matching;
73pub mod media;
74pub mod media_relink;
75pub mod partial_conform;
76pub mod prelude;
77pub mod progress;
78pub mod proxy_conform;
79pub mod pulldown;
80pub mod qc;
81pub mod reconstruction;
82pub mod reel_management;
83pub mod reporting;
84pub mod session;
85pub mod source_verify;
86pub mod spec_profile;
87pub mod spec_validator;
88pub mod test_card;
89pub mod timecode_conform;
90pub mod timeline;
91pub mod types;
92pub mod utils;
93pub mod versioning;
94
95// Re-export commonly used types
96pub use batch::{BatchJob, BatchProcessor, BatchResult, BatchStatistics};
97pub use config::ConformConfig;
98pub use error::{ConformError, ConformResult};
99pub use exporters::report::{AmbiguousMatch, MatchReport, MatchStatistics};
100pub use importers::aaf::{AafImporter, AafMob, AafParser, AafProject, AafSlot};
101pub use importers::fcpxml::{FcpxmlClip, FcpxmlParser, FcpxmlSequence};
102pub use media::{MediaCatalog, MediaScanner, ScanProgress};
103pub use progress::{ProgressInfo, ProgressStage, ProgressTracker};
104pub use session::{ConformSession, SessionStatus};
105pub use timeline::{Timeline, TimelineClip, Track, TrackKind};
106pub use types::{
107    ClipMatch, ClipReference, ConformClip, ConformProject, ConformSequence, FrameRate, MatchMethod,
108    MediaFile, OutputFormat, Timecode, TrackType,
109};
110
111/// Library version.
112pub const VERSION: &str = env!("CARGO_PKG_VERSION");
113
114/// Get the library version.
115#[must_use]
116pub const fn version() -> &'static str {
117    VERSION
118}
119
120#[cfg(test)]
121mod tests {
122    use super::*;
123
124    #[test]
125    fn test_version() {
126        assert!(!version().is_empty());
127    }
128}