aboutsummaryrefslogtreecommitdiff
path: root/old/bv1/app/src/bin
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2025-05-05 15:09:54 +0200
committermetamuffin <metamuffin@disroot.org>2025-05-05 15:09:54 +0200
commit306f96164784a8cbf405e72fa4364d6523366e95 (patch)
tree51717fc139871baa438aad806f4923669ae0896c /old/bv1/app/src/bin
parent9cc089e2d6e841879e430b01d2f3d92c8820523e (diff)
downloadvideo-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/bin')
-rw-r--r--old/bv1/app/src/bin/bench.rs28
-rw-r--r--old/bv1/app/src/bin/main.rs71
-rw-r--r--old/bv1/app/src/bin/test.rs47
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() {}