diff options
author | metamuffin <metamuffin@disroot.org> | 2025-05-05 15:09:54 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2025-05-05 15:09:54 +0200 |
commit | 306f96164784a8cbf405e72fa4364d6523366e95 (patch) | |
tree | 51717fc139871baa438aad806f4923669ae0896c /old/bv1/app/src | |
parent | 9cc089e2d6e841879e430b01d2f3d92c8820523e (diff) | |
download | video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar.bz2 video-codec-experiments-306f96164784a8cbf405e72fa4364d6523366e95.tar.zst |
old dir
Diffstat (limited to 'old/bv1/app/src')
-rw-r--r-- | old/bv1/app/src/bin/bench.rs | 28 | ||||
-rw-r--r-- | old/bv1/app/src/bin/main.rs | 71 | ||||
-rw-r--r-- | old/bv1/app/src/bin/test.rs | 47 |
3 files changed, 146 insertions, 0 deletions
diff --git a/old/bv1/app/src/bin/bench.rs b/old/bv1/app/src/bin/bench.rs new file mode 100644 index 0000000..86edcac --- /dev/null +++ b/old/bv1/app/src/bin/bench.rs @@ -0,0 +1,28 @@ +use bv1::{encode::diff, Frame, Ref, View, P2}; +use std::time::Instant; + +fn measure(f: impl FnOnce()) { + let t1 = Instant::now(); + f(); + let t2 = Instant::now(); + eprintln!("took {:?}", (t2 - t1)); +} + +fn main() { + let size = P2 { x: 2000, y: 2000 }; + let f1 = Frame::new(size); + let f2 = Frame::new(size); + measure(|| { + diff([&f1, &f2], View::all(size), Ref::default()); + }); +} + +// #[test] +// fn bench_fast_diff() { +// let size = P2 { x: 2000, y: 2000 }; +// let f1 = Frame::new(size); +// let f2 = Frame::new(size); +// measure(|| { +// diff_fast([&f1, &f2], View::all(size), Ref::default()); +// }); +// } diff --git a/old/bv1/app/src/bin/main.rs b/old/bv1/app/src/bin/main.rs new file mode 100644 index 0000000..1898bf1 --- /dev/null +++ b/old/bv1/app/src/bin/main.rs @@ -0,0 +1,71 @@ +use bv1::{ + decode, + encode::{encode, EncodeConfig}, + P2, +}; +use clap::{Parser, Subcommand}; +use std::io::{stdin, stdout}; + +#[derive(Parser)] +#[clap(about, version)] +struct Args { + // Width of the video signal + #[arg(short = 'W', long)] + width: u16, + // Height of the video signal + #[arg(short = 'H', long)] + height: u16, + #[clap(subcommand)] + action: Action, +} + +#[derive(Clone, Subcommand)] +enum Action { + // Compress video + Encode { + #[arg(short, long, default_value_t = 800)] + max_block_size: usize, + #[arg(short, long, default_value_t = 10_000)] + attention_split: u32, + #[arg(short, long, default_value_t = 10.)] + threshold: f32, + #[arg(short, long, default_value_t = 10)] + keyframe_interval: usize, + }, + // Decompress video + Decode { + #[arg(short, long)] + debug: bool, + }, +} + +fn main() { + let args = Args::parse(); + + let size = P2 { + x: args.width as i32, + y: args.height as i32, + }; + match args.action { + Action::Encode { + max_block_size, + threshold, + attention_split, + keyframe_interval, + } => { + let config = EncodeConfig { + min_block_size: 16, + motion_split_f: 2., + threshold, + max_block_size, + attention_split, + keyframe_interval, + }; + + encode(config, size, stdin(), stdout()).unwrap(); + } + Action::Decode { debug } => { + decode(size, debug, stdin(), stdout()).unwrap(); + } + } +} diff --git a/old/bv1/app/src/bin/test.rs b/old/bv1/app/src/bin/test.rs new file mode 100644 index 0000000..4071ff1 --- /dev/null +++ b/old/bv1/app/src/bin/test.rs @@ -0,0 +1,47 @@ +#[cfg(test)] +mod test { + + use bv1::huff::{read_huff, write_huff, BitIO}; + use std::io::Cursor; + + #[test] + fn test_bitio() { + let mut buf = Vec::<u8>::new(); + + { + let mut b = BitIO::new(Cursor::new(&mut buf)); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbit(false).unwrap(); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbit(true).unwrap(); + b.wbyte(0xff).unwrap(); + b.flush().unwrap(); + } + { + let mut b = BitIO::new(Cursor::new(&mut buf)); + for _ in 0..17 { + let _v = b.rbit().unwrap(); + // eprintln!("{:?}", _v) + } + } + } + + #[test] + fn test_huff() { + let a = vec![1, 2, 3, 4, 5, 1, 3, 6, 3, 2, 4, 6, 7, 4, 3, 2, 1, 3, 4]; + let mut b = vec![]; + + let mut buf = Vec::<u8>::new(); + write_huff(&a, &mut Cursor::new(&mut buf)).unwrap(); + read_huff(&mut Cursor::new(&mut buf), &mut b).unwrap(); + + assert_eq!(a, b) + } +} + +fn main() {} |