1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
//! Renderer backend boundary.
//!
//! The frame filter consumes rendered subtitle overlays through
//! [`SubtitleRenderer`], keeping the rendering engine swappable and the
//! filter renderer-agnostic: everything downstream of this trait (color
//! conversion, pixel-format layout, blend kernels, timing) never sees the
//! engine. [`crate::subtitle::render::PureRenderer`] is the production
//! implementation.
use OverlayImage;
/// One rendering session for one loaded subtitle track.
///
/// Configuration happens on the builder thread; [`Self::render_frame`] runs
/// on the pipeline pump thread after the whole value has been moved there.
/// Implementors are `Send` and never shared (`Sync` is deliberately not
/// required).
pub