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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//! Thin facade over [`oxideav_core`].
//!
//! `oxideav` is **no longer an aggregator** — it does NOT depend on any
//! sibling codec / container / filter / source crate. Instead, each
//! sibling crate self-registers into [`oxideav_core::REGISTRARS`] (a
//! linkme distributed slice) at link time. Consumers pull whichever
//! siblings they want into their own `[dependencies]`, then call
//! [`with_all_features`] to materialise everything that ended up
//! linked.
//!
//! For convenience there is a sibling [`oxideav-format-all`](https://crates.io/crates/oxideav-format-all)
//! virtual crate that depends on every codec / container / filter /
//! source crate the framework knows about — `oxideav-cli`, `oxideplay`,
//! and similar "want everything" consumers depend on it.
//!
//! # Quick start (everything)
//!
//! ```toml
//! [dependencies]
//! oxideav = "*"
//! oxideav-format-all = "*"
//! ```
//!
//! ```ignore
//! let ctx = oxideav::with_all_features();
//! ```
//!
//! # Quick start (selective)
//!
//! ```toml
//! [dependencies]
//! oxideav = "*"
//! oxideav-h264 = "*"
//! oxideav-aac = "*"
//! oxideav-mp4 = "*"
//! ```
//!
//! ```ignore
//! // Only h264 + aac + mp4 self-register; the slice walker sees them.
//! let ctx = oxideav::with_all_features();
//! ```
pub use oxideav_core as core;
pub use RuntimeContext;
pub use oxideav_pipeline as pipeline;
pub use oxideav_source as source;
/// Build a [`RuntimeContext`] populated with every sibling crate that's
/// linked into the binary.
///
/// Delegates to [`RuntimeContext::with_all_features`], which walks the
/// linkme distributed slice [`oxideav_core::REGISTRARS`] populated by
/// each sibling's [`oxideav_core::register!`] macro call.
/// Build a [`RuntimeContext`] populated with every sibling crate, while
/// invoking `trace(name)` immediately before each registrar fires.
/// Useful for diagnosing register-time hangs.
/// Build a [`RuntimeContext`] populated with every sibling crate whose
/// name `filter` returns `true` for. Used by CLIs to implement opt-outs
/// like `--no-hwaccel` (skip `videotoolbox` / `audiotoolbox`).
/// Back-compat alias — historically the aggregator exposed `Registries`
/// (codecs + containers). The unified context now lives in
/// `oxideav-core` and bundles all four registries (codec / container /
/// source / filter), so consumers should prefer [`RuntimeContext`]
/// directly. The alias keeps existing call sites (`reg.codecs`,
/// `reg.containers`) compiling unchanged.
pub type Registries = RuntimeContext;
/// Convenience trait so call sites can write
/// `RuntimeContext::with_all_features()` (matching the historical
/// `Registries::with_all_features()` shape) without depending on the
/// free function's path.