ff_preview/playback/mod.rs
1//! Real-time playback types for ff-preview.
2//!
3//! This module exposes the primary public API for single-file video/audio
4//! playback. All `unsafe` `FFmpeg` calls are isolated in `playback_inner`.
5//!
6//! | Sub-module | Contents |
7//! |--------------------|---------|
8//! | `clock` | [`PlaybackClock`] |
9//! | `master_clock` | Internal `MasterClock` |
10//! | `sink` | [`FrameSink`] trait, [`RgbaFrame`], [`RgbaSink`] |
11//! | `decode_buffer` | [`DecodeBuffer`], [`FrameResult`], [`SeekEvent`] |
12//! | `player` | [`PreviewPlayer`], [`PlayerCommand`] |
13//! | `player_handle` | [`PlayerHandle`] |
14//! | `player_runner` | [`PlayerRunner`] |
15//! | `async_player` | [`AsyncPreviewPlayer`] (tokio feature) |
16//! | `playback_inner` | Unsafe `FFmpeg` calls (`SwsRgbaConverter`, PCM extraction) |
17
18mod playback_inner;
19
20#[cfg(feature = "timeline")]
21pub(crate) use playback_inner::SwsRgbaConverter;
22
23pub(crate) mod clock;
24pub(crate) mod decode_buffer;
25pub(crate) mod master_clock;
26pub(crate) mod player;
27pub(crate) mod player_handle;
28pub(crate) mod player_runner;
29pub(crate) mod sink;
30
31#[cfg(feature = "tokio")]
32pub(crate) mod async_player;
33
34pub use clock::PlaybackClock;
35pub use decode_buffer::{DecodeBuffer, DecodeBufferBuilder, FrameResult, SeekEvent};
36pub use player::{PlayerCommand, PreviewPlayer};
37pub use player_handle::PlayerHandle;
38pub use player_runner::PlayerRunner;
39pub use sink::{FrameSink, RgbaFrame, RgbaSink};
40
41#[cfg(feature = "tokio")]
42pub use async_player::AsyncPreviewPlayer;