ffcine_assembly/lib.rs
1//! Assembly (roadmap step 8, `docs/design.md#roadmap`, [`docs/assembly.md`]): renders a whole
2//! timeline into one master with a content-keyed segment cache.
3//!
4//! - [`plan`](mod@plan) flattens the picture track into segments (one per shot, dissolve overlap and gap)
5//! and the audio tracks into one `ffcine_audio` mix, each keyed by a hash of its content
6//! ([`recipe`]), never by position. The mix key has nothing of the picture in it.
7//! - [`exec`] renders only segments missing from the cache, joins them by stream copy (one shared
8//! encoder config, every segment starting on an IDR), and muxes the audio; an audio-only change
9//! is a remux of the cached picture. Every cache entry is written atomically, so an interrupted
10//! render resumes where it stopped.
11//! - [`diff`] lists which segments an edit re-renders.
12//! - [`proxy`] finds or makes the low-res copies `review` renders decode.
13//!
14//! Text (`ffcine.text`, via `ffcine-text`) is drawn in the segments it overlaps: segments are cut
15//! at text in/out points and keyed by the text they show.
16//!
17//! [`docs/assembly.md`]: https://github.com/talaagent/ffcine/blob/master/docs/assembly.md
18
19pub mod comp;
20pub mod diff;
21pub mod exec;
22mod filter_prep;
23mod lower;
24pub mod plan;
25pub mod profile;
26pub mod proxy;
27pub mod recipe;
28
29pub use diff::Diff;
30pub use exec::{Detector, Grader, Progress, Renderer, Report};
31pub use plan::{
32 AudioPlan, COMP_GENERATOR, CompMedia, Filters, Plan, PlanError, Ramp, Segment, Shot, TextLayer,
33 Unit, has_comp_clips, plan, plan_comp, plan_with,
34};
35pub use profile::Profile;
36pub use recipe::{AUDIO_REVISION, FsFingerprinter, Key, RENDER_REVISION};