Skip to main content

oxideav_basic/
lib.rs

1//! Bundled simple formats: codecs and containers that are small and standard
2//! enough to share one crate. Anything larger gets its own crate.
3
4pub mod filter;
5pub mod pcm;
6pub mod slin;
7pub mod wav;
8pub mod y4m;
9
10use oxideav_core::CodecRegistry;
11use oxideav_core::ContainerRegistry;
12use oxideav_core::RuntimeContext;
13
14/// Register every codec provided by `oxideav-basic` in a [`CodecRegistry`].
15pub fn register_codecs(reg: &mut CodecRegistry) {
16    pcm::register(reg);
17}
18
19/// Register every container provided by `oxideav-basic` in a [`ContainerRegistry`].
20pub fn register_containers(reg: &mut ContainerRegistry) {
21    wav::register(reg);
22    slin::register(reg);
23    y4m::register(reg);
24}
25
26/// Unified entry point: install every codec and container provided by
27/// `oxideav-basic` into a [`RuntimeContext`].
28///
29/// Also wired into [`oxideav_meta::register_all`] via the
30/// [`oxideav_core::register!`] macro below.
31pub fn register(ctx: &mut RuntimeContext) {
32    register_codecs(&mut ctx.codecs);
33    register_containers(&mut ctx.containers);
34}
35
36oxideav_core::register!("basic", register);
37
38#[cfg(test)]
39mod tests {
40    use super::*;
41
42    #[test]
43    fn register_via_runtime_context_installs_factories() {
44        let mut ctx = RuntimeContext::new();
45        register(&mut ctx);
46        assert!(
47            ctx.codecs.decoder_ids().next().is_some(),
48            "register(ctx) should install codec decoder factories"
49        );
50        assert!(
51            ctx.containers.demuxer_names().next().is_some(),
52            "register(ctx) should install container demuxer factories"
53        );
54    }
55}