Skip to main content

ff_preview/
lib.rs

1//! # ff-preview
2//!
3//! Real-time video/audio preview and proxy workflow for the `avio` crate family.
4//!
5//! This crate provides single-file playback (`PreviewPlayer`) with frame-accurate
6//! seek, A/V sync, and an optional proxy generation workflow.
7//!
8//! ## Feature Flags
9//!
10//! | Feature | Description | Default |
11//! |---------|-------------|---------|
12//! | `tokio` | Async `AsyncPreviewPlayer` backed by `spawn_blocking` | no |
13//! | `proxy` | `ProxyGenerator` for lower-resolution proxy files | no |
14//!
15//! ## Usage
16//!
17//! ```ignore
18//! use ff_preview::{PreviewPlayer, RgbaSink};
19//!
20//! let mut player = PreviewPlayer::open("clip.mp4")?;
21//! player.set_sink(Box::new(RgbaSink::new()));
22//! player.play();
23//! player.run()?;
24//! ```
25
26#![warn(clippy::all)]
27#![warn(clippy::pedantic)]
28
29pub mod error;
30pub mod playback;
31
32#[cfg(feature = "proxy")]
33pub mod proxy;
34
35pub use error::PreviewError;
36pub use playback::{
37    DecodeBuffer, DecodeBufferBuilder, FrameResult, FrameSink, PlaybackClock, PreviewPlayer,
38    RgbaFrame, RgbaSink, SeekEvent,
39};
40
41#[cfg(feature = "tokio")]
42pub use playback::AsyncPreviewPlayer;
43
44#[cfg(feature = "proxy")]
45pub use proxy::{ProxyGenerator, ProxyJob, ProxyResolution};