diff options
Diffstat (limited to 'dhwt-codec')
-rw-r--r-- | dhwt-codec/.gitignore | 2 | ||||
-rw-r--r-- | dhwt-codec/Cargo.lock | 356 | ||||
-rw-r--r-- | dhwt-codec/Cargo.toml | 9 | ||||
-rwxr-xr-x | dhwt-codec/run | 16 | ||||
-rw-r--r-- | dhwt-codec/src/bin/decode.rs | 57 | ||||
-rw-r--r-- | dhwt-codec/src/bin/encode.rs | 57 | ||||
-rw-r--r-- | dhwt-codec/src/bin/export.rs | 42 | ||||
-rw-r--r-- | dhwt-codec/src/bin/import.rs | 51 | ||||
-rw-r--r-- | dhwt-codec/src/io.rs | 71 | ||||
-rw-r--r-- | dhwt-codec/src/lib.rs | 23 | ||||
-rw-r--r-- | dhwt-codec/src/transform.rs | 42 | ||||
-rw-r--r-- | dhwt-codec/src/trim.rs | 36 | ||||
-rw-r--r-- | dhwt-codec/src/view.rs | 42 |
13 files changed, 0 insertions, 804 deletions
diff --git a/dhwt-codec/.gitignore b/dhwt-codec/.gitignore deleted file mode 100644 index 495c6ed..0000000 --- a/dhwt-codec/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/target -/a diff --git a/dhwt-codec/Cargo.lock b/dhwt-codec/Cargo.lock deleted file mode 100644 index 7e5de36..0000000 --- a/dhwt-codec/Cargo.lock +++ /dev/null @@ -1,356 +0,0 @@ -# This file is automatically @generated by Cargo. -# It is not intended for manual editing. -version = 3 - -[[package]] -name = "anstream" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ab91ebe16eb252986481c5b62f6098f3b698a45e34b5b98200cf20dd2484a44" -dependencies = [ - "anstyle", - "anstyle-parse", - "anstyle-query", - "anstyle-wincon", - "colorchoice", - "utf8parse", -] - -[[package]] -name = "anstyle" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7079075b41f533b8c61d2a4d073c4676e1f8b249ff94a393b0595db304e0dd87" - -[[package]] -name = "anstyle-parse" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "317b9a89c1868f5ea6ff1d9539a69f45dffc21ce321ac1fd1160dfa48c8e2140" -dependencies = [ - "utf8parse", -] - -[[package]] -name = "anstyle-query" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ca11d4be1bab0c8bc8734a9aa7bf4ee8316d462a08c6ac5052f888fef5b494b" -dependencies = [ - "windows-sys", -] - -[[package]] -name = "anstyle-wincon" -version = "3.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0699d10d2f4d628a98ee7b57b289abbc98ff3bad977cb3152709d4bf2330628" -dependencies = [ - "anstyle", - "windows-sys", -] - -[[package]] -name = "autocfg" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" - -[[package]] -name = "bincode" -version = "2.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11ea1a0346b94ef188834a65c068a03aec181c94896d481d7a0a40d85b0ce95" -dependencies = [ - "bincode_derive", - "serde", -] - -[[package]] -name = "bincode_derive" -version = "2.0.0-rc.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e30759b3b99a1b802a7a3aa21c85c3ded5c28e1c83170d82d70f08bbf7f3e4c" -dependencies = [ - "virtue", -] - -[[package]] -name = "cfg-if" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" - -[[package]] -name = "clap" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac495e00dcec98c83465d5ad66c5c4fabd652fd6686e7c6269b117e729a6f17b" -dependencies = [ - "clap_builder", - "clap_derive", -] - -[[package]] -name = "clap_builder" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c77ed9a32a62e6ca27175d00d29d05ca32e396ea1eb5fb01d8256b669cec7663" -dependencies = [ - "anstream", - "anstyle", - "clap_lex", - "strsim", -] - -[[package]] -name = "clap_derive" -version = "4.4.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf9804afaaf59a91e75b022a30fb7229a7901f60c755489cc61c9b423b836442" -dependencies = [ - "heck", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "clap_lex" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "702fc72eb24e5a1e48ce58027a675bc24edd52096d5397d4aea7c6dd9eca0bd1" - -[[package]] -name = "colorchoice" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" - -[[package]] -name = "crossbeam-deque" -version = "0.8.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef" -dependencies = [ - "cfg-if", - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7" -dependencies = [ - "autocfg", - "cfg-if", - "crossbeam-utils", - "memoffset", - "scopeguard", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.16" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294" -dependencies = [ - "cfg-if", -] - -[[package]] -name = "dhwt-codec" -version = "0.1.0" -dependencies = [ - "bincode", - "clap", - "rayon", -] - -[[package]] -name = "either" -version = "1.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - -[[package]] -name = "heck" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] - -[[package]] -name = "proc-macro2" -version = "1.0.69" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "134c189feb4956b20f6f547d2cf727d4c0fe06722b20a0eec87ed445a97f92da" -dependencies = [ - "unicode-ident", -] - -[[package]] -name = "quote" -version = "1.0.33" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" -dependencies = [ - "proc-macro2", -] - -[[package]] -name = "rayon" -version = "1.8.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" -dependencies = [ - "either", - "rayon-core", -] - -[[package]] -name = "rayon-core" -version = "1.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" -dependencies = [ - "crossbeam-deque", - "crossbeam-utils", -] - -[[package]] -name = "scopeguard" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" - -[[package]] -name = "serde" -version = "1.0.190" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91d3c334ca1ee894a2c6f6ad698fe8c435b76d504b13d436f0685d648d6d96f7" -dependencies = [ - "serde_derive", -] - -[[package]] -name = "serde_derive" -version = "1.0.190" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "67c5609f394e5c2bd7fc51efda478004ea80ef42fee983d5c67a65e34f32c0e3" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "strsim" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" - -[[package]] -name = "syn" -version = "2.0.39" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23e78b90f2fcf45d3e842032ce32e3f2d1545ba6636271dcbf24fa306d87be7a" -dependencies = [ - "proc-macro2", - "quote", - "unicode-ident", -] - -[[package]] -name = "unicode-ident" -version = "1.0.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3354b9ac3fae1ff6755cb6db53683adb661634f67557942dea4facebec0fee4b" - -[[package]] -name = "utf8parse" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a" - -[[package]] -name = "virtue" -version = "0.0.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9dcc60c0624df774c82a0ef104151231d37da4962957d691c011c852b2473314" - -[[package]] -name = "windows-sys" -version = "0.48.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" -dependencies = [ - "windows-targets", -] - -[[package]] -name = "windows-targets" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" -dependencies = [ - "windows_aarch64_gnullvm", - "windows_aarch64_msvc", - "windows_i686_gnu", - "windows_i686_msvc", - "windows_x86_64_gnu", - "windows_x86_64_gnullvm", - "windows_x86_64_msvc", -] - -[[package]] -name = "windows_aarch64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" - -[[package]] -name = "windows_aarch64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" - -[[package]] -name = "windows_i686_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" - -[[package]] -name = "windows_i686_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" - -[[package]] -name = "windows_x86_64_gnu" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" - -[[package]] -name = "windows_x86_64_gnullvm" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" - -[[package]] -name = "windows_x86_64_msvc" -version = "0.48.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" diff --git a/dhwt-codec/Cargo.toml b/dhwt-codec/Cargo.toml deleted file mode 100644 index 5a3fe24..0000000 --- a/dhwt-codec/Cargo.toml +++ /dev/null @@ -1,9 +0,0 @@ -[package] -name = "dhwt-codec" -version = "0.1.0" -edition = "2021" - -[dependencies] -bincode = "2.0.0-rc.3" -clap = { version = "4.5.4", features = ["derive"] } -rayon = "1.10.0" diff --git a/dhwt-codec/run b/dhwt-codec/run deleted file mode 100755 index 9f7013e..0000000 --- a/dhwt-codec/run +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/fish - -set f $argv[1] -set x $argv[2] -set y $argv[3] -set z $argv[4] - -# cat /dev/urandom | cargo run --release --bin import -- -x $x -y $y -z $z a/inp -ffmpeg -i $f -frames:v $z -filter_complex [0]scale={$x}x{$y},format=rgb24 -f rawvideo pipe:1 | cargo run --release --bin import -- -x $x -y $y -z $z a/inp - -time cargo run --release --bin encode -- -x $x -y $y -z $z a/inp a/enc -time cargo run --release --bin decode -- -x $x -y $y -z $z a/enc a/out - -cargo run --release --bin export -- -x (math $x / 2) -y (math $y / 2) -z (math $z / 2) a/enc | ffmpeg -y -pixel_format rgb24 -f rawvideo -video_size (math $x / 2)x(math $y / 2) -i pipe:0 a/enc.webm -cargo run --release --bin export -- -x $x -y $y -z $z a/out | ffmpeg -y -pixel_format rgb24 -f rawvideo -video_size {$x}x{$y} -i pipe:0 a/out.webm -# cargo run --release --bin export -- -x $x -y $y -z $z a/raw_out | ffplay -pixel_format rgb24 -f rawvideo -video_size {$x}x{$y} pipe:0 diff --git a/dhwt-codec/src/bin/decode.rs b/dhwt-codec/src/bin/decode.rs deleted file mode 100644 index 1930dfb..0000000 --- a/dhwt-codec/src/bin/decode.rs +++ /dev/null @@ -1,57 +0,0 @@ -use clap::Parser; -use dhwt_codec::{ - io::{empty_videobuf, infile, outfile, read_videobuf_small, write_videobuf, VideoBuf}, - transform, trim, - view::{BufferView, IndexMode}, - CommonArgs, -}; -use rayon::prelude::{IntoParallelIterator, ParallelIterator}; - -fn main() { - let args = CommonArgs::parse(); - - let mut inf = infile(&args.infile); - let mut of = outfile(&args.outfile); - - for c in 0..args.channels { - eprintln!("encoding channel #{c}"); - let a = empty_videobuf(args.x, args.y, args.z); - let b = read_videobuf_small(&mut inf); - - eprintln!("\tdecoding Z"); - (0..args.x).into_par_iter().for_each(|x| { - for y in 0..args.y { - run_mode(make_mut(&b), make_mut(&a), IndexMode::XY(x, y), args.z) - } - }); - eprintln!("\tdecoding Y"); - (0..args.x).into_par_iter().for_each(|x| { - for z in 0..args.z { - run_mode(make_mut(&a), make_mut(&b), IndexMode::XZ(x, z), args.y) - } - }); - eprintln!("\tdecoding X"); - (0..args.y).into_par_iter().for_each(|y| { - for z in 0..args.z { - run_mode(make_mut(&b), make_mut(&a), IndexMode::YZ(y, z), args.x) - } - }); - write_videobuf(&mut of, a); - } -} - -fn run_mode(a: &mut VideoBuf, b: &mut VideoBuf, mode: IndexMode, size: usize) { - trim::untrim(size, &mut BufferView::new(b, mode)); - transform::decode( - size, - &mut BufferView::new(a, mode), - &mut BufferView::new(b, mode), - ); -} - -fn make_mut<T>(r: &T) -> &mut T { - #[allow(mutable_transmutes)] - unsafe { - std::mem::transmute::<&T, &mut T>(r) - } -} diff --git a/dhwt-codec/src/bin/encode.rs b/dhwt-codec/src/bin/encode.rs deleted file mode 100644 index db4c70e..0000000 --- a/dhwt-codec/src/bin/encode.rs +++ /dev/null @@ -1,57 +0,0 @@ -use clap::Parser; -use dhwt_codec::{ - io::{empty_videobuf, infile, outfile, read_videobuf, write_videobuf_small, VideoBuf}, - transform, trim, - view::{BufferView, IndexMode}, - CommonArgs, -}; -use rayon::prelude::{IntoParallelIterator, ParallelIterator}; - -fn main() { - let args = CommonArgs::parse(); - - let mut inf = infile(&args.infile); - let mut of = outfile(&args.outfile); - - for c in 0..args.channels { - eprintln!("encoding channel #{c}"); - let o = empty_videobuf(args.x, args.y, args.z); - let i = read_videobuf(&mut inf); - - eprintln!("\tencoding X"); - (0..args.y).into_par_iter().for_each(|y| { - for z in 0..args.z { - run_mode(make_mut(&i), make_mut(&o), IndexMode::YZ(y, z), args.x) - } - }); - eprintln!("\tencoding Y"); - (0..args.x).into_par_iter().for_each(|x| { - for z in 0..args.z { - run_mode(make_mut(&o), make_mut(&i), IndexMode::XZ(x, z), args.y) - } - }); - eprintln!("\tencoding Z"); - (0..args.x).into_par_iter().for_each(|x| { - for y in 0..args.y { - run_mode(make_mut(&i), make_mut(&o), IndexMode::XY(x, y), args.z) - } - }); - write_videobuf_small(&mut of, o); - } -} - -fn run_mode(a: &mut VideoBuf, b: &mut VideoBuf, mode: IndexMode, size: usize) { - transform::encode( - size, - &mut BufferView::new(a, mode), - &mut BufferView::new(b, mode), - ); - trim::trim(size, &mut BufferView::new(b, mode)); -} - -fn make_mut<T>(r: &T) -> &mut T { - #[allow(mutable_transmutes)] - unsafe { - std::mem::transmute::<&T, &mut T>(r) - } -} diff --git a/dhwt-codec/src/bin/export.rs b/dhwt-codec/src/bin/export.rs deleted file mode 100644 index 73f3067..0000000 --- a/dhwt-codec/src/bin/export.rs +++ /dev/null @@ -1,42 +0,0 @@ -use clap::Parser; -use dhwt_codec::io::{infile, read_videobuf}; -use std::io::{stdout, BufWriter, Write}; - -#[derive(Parser)] -#[clap(about)] -struct ExportArgs { - #[arg(short)] - x: usize, - #[arg(short)] - y: usize, - #[arg(short)] - z: usize, - - #[arg(short, long, default_value = "3")] - channels: usize, - - infile: String, -} - -fn main() { - let args = ExportArgs::parse(); - - let mut i = infile(&args.infile); - let mut writer = BufWriter::new(stdout()); - - let mut channels = vec![]; - for _ in 0..args.channels { - channels.push(read_videobuf(&mut i)) - } - - for z in 0..args.z { - for y in 0..args.y { - for x in 0..args.x { - for c in 0..args.channels { - writer.write_all(&[channels[c][x][y][z] as u8]).unwrap(); - } - } - } - } - writer.flush().unwrap(); -} diff --git a/dhwt-codec/src/bin/import.rs b/dhwt-codec/src/bin/import.rs deleted file mode 100644 index cd2a35e..0000000 --- a/dhwt-codec/src/bin/import.rs +++ /dev/null @@ -1,51 +0,0 @@ -use clap::Parser; -use dhwt_codec::io::{outfile, write_videobuf, Value}; -use std::io::{stdin, Read}; - -#[derive(Parser)] -#[clap(about)] -struct ImportArgs { - #[arg(short)] - x: usize, - #[arg(short)] - y: usize, - #[arg(short)] - z: usize, - - #[arg(short, long, default_value = "3")] - channels: usize, - - outfile: String, -} - -fn main() { - let args = ImportArgs::parse(); - - let mut rawbuf = (0..(args.x * args.y * args.z * args.channels)) - .map(|_| 0u8) - .collect::<Vec<_>>(); - stdin().read_exact(&mut rawbuf).unwrap(); - - let mut o = outfile(&args.outfile); - - for c in 0..args.channels { - let mut cols = vec![]; - for x in 0..args.x { - let mut col = vec![]; - for y in 0..args.y { - let mut span = vec![]; - for z in 0..args.z { - span.push( - rawbuf[c - + (x * args.channels) - + (y * args.channels * args.x) - + (z * args.channels * args.x * args.y)] as Value, - ); - } - col.push(span); - } - cols.push(col) - } - write_videobuf(&mut o, cols) - } -} diff --git a/dhwt-codec/src/io.rs b/dhwt-codec/src/io.rs deleted file mode 100644 index c60bc79..0000000 --- a/dhwt-codec/src/io.rs +++ /dev/null @@ -1,71 +0,0 @@ -use bincode::config; -use std::{ - fs::File, - io::{BufReader, BufWriter, Read, Write}, -}; - -pub type Value = f32; -pub type VideoBuf = Vec<Vec<Vec<Value>>>; -pub const ZERO: Value = 0 as Value; -pub const TWO: Value = 2 as Value; - -pub fn empty_videobuf(x: usize, y: usize, z: usize) -> VideoBuf { - (0..x) - .map(|_| (0..y).map(|_| (0..z).map(|_| ZERO).collect()).collect()) - .collect() -} - -pub fn outfile(p: &str) -> impl Write { - BufWriter::new(File::create(p).unwrap()) -} -pub fn infile(p: &str) -> impl Read { - BufReader::new(File::open(p).unwrap()) -} - -pub fn read_videobuf(f: &mut impl Read) -> VideoBuf { - bincode::decode_from_std_read(f, config::standard()).unwrap() -} -pub fn write_videobuf(f: &mut impl Write, i: VideoBuf) { - bincode::encode_into_std_write(i, f, config::standard()).unwrap(); -} - -pub fn write_videobuf_small(f: &mut impl Write, mut i: VideoBuf) { - for _ in 0..(i.len() / 2) { - i.pop(); - } - for i in &mut i { - for _ in 0..(i.len() / 2) { - i.pop(); - } - for i in i { - for _ in 0..(i.len() / 2) { - i.pop(); - } - } - } - write_videobuf(f, i); -} -pub fn read_videobuf_small(f: &mut impl Read) -> VideoBuf { - let mut i = read_videobuf(f); - - for i in &mut i { - for i in i { - for _ in 0..i.len() { - i.push(ZERO); - } - } - } - for i in &mut i { - for _ in 0..i.len() { - i.push((0..i[0].len()).map(|_| ZERO).collect()); - } - } - for _ in 0..i.len() { - i.push( - (0..i[0].len()) - .map(|_| ((0..i[0][0].len()).map(|_| ZERO)).collect()) - .collect(), - ); - } - i -} diff --git a/dhwt-codec/src/lib.rs b/dhwt-codec/src/lib.rs deleted file mode 100644 index 69d6b4c..0000000 --- a/dhwt-codec/src/lib.rs +++ /dev/null @@ -1,23 +0,0 @@ -use clap::Parser; - -pub mod io; -pub mod transform; -pub mod trim; -pub mod view; - -#[derive(Parser)] -#[clap(about)] -pub struct CommonArgs { - #[arg(short)] - pub x: usize, - #[arg(short)] - pub y: usize, - #[arg(short)] - pub z: usize, - - #[arg(short, long, default_value = "3")] - pub channels: usize, - - pub infile: String, - pub outfile: String, -} diff --git a/dhwt-codec/src/transform.rs b/dhwt-codec/src/transform.rs deleted file mode 100644 index 82bccd1..0000000 --- a/dhwt-codec/src/transform.rs +++ /dev/null @@ -1,42 +0,0 @@ -use crate::io::{Value, TWO}; -use std::ops::{Index, IndexMut}; - -pub fn encode<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( - size: usize, - a: &mut X, - b: &mut X, -) { - let mut k = size; - while k != 1 { - k /= 2; - for i in 0..k { - let x = a[i * 2]; - let y = a[i * 2 + 1]; - b[i] = x + y; - b[k + i] = x - y; - } - for i in 0..k { - a[i] = b[i] - } - } -} - -pub fn decode<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( - size: usize, - a: &mut X, - b: &mut X, -) { - let mut k = 1; - while k != size { - for i in 0..k { - let avr = a[i] / TWO; - let spread = a[i + k] / TWO; - b[i * 2] = avr + spread; - b[i * 2 + 1] = avr - spread; - } - k *= 2; - for i in 0..k { - a[i] = b[i] - } - } -} diff --git a/dhwt-codec/src/trim.rs b/dhwt-codec/src/trim.rs deleted file mode 100644 index 85a920a..0000000 --- a/dhwt-codec/src/trim.rs +++ /dev/null @@ -1,36 +0,0 @@ -use crate::io::{Value, TWO, ZERO}; -use std::ops::{Index, IndexMut}; - -pub fn trim<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( - size: usize, - a: &mut X, -) { - let half = size / 2; - let quarter = size / 4; - for i in 0..(size / 2 / 4) { - let hi = half + i * 4; - let qi = quarter + i * 2; - a[qi] = (a[qi + 0] + a[qi + 1]) / TWO; - a[qi + 1] = (a[hi + 0] + a[hi + 1] + a[hi + 2] + a[hi + 3]) / (TWO * TWO); - } - for i in half..size { - a[i] = ZERO; - } -} - -pub fn untrim<X: Index<usize, Output = Value> + IndexMut<usize, Output = Value>>( - size: usize, - a: &mut X, -) { - let half = size / 2; - let quarter = size / 4; - for i in 0..(size / 2 / 4) { - let hi = half + i * 4; - let qi = quarter + i * 2; - a[hi + 0] = a[qi + 1]; - a[hi + 1] = a[qi + 1]; - a[hi + 2] = a[qi + 1]; - a[hi + 3] = a[qi + 1]; - a[qi + 1] = a[qi]; - } -} diff --git a/dhwt-codec/src/view.rs b/dhwt-codec/src/view.rs deleted file mode 100644 index 0f2ecf7..0000000 --- a/dhwt-codec/src/view.rs +++ /dev/null @@ -1,42 +0,0 @@ -use std::ops::{Index, IndexMut}; - -use crate::io::{VideoBuf, Value}; - -#[derive(Copy, Clone, Debug)] -pub enum IndexMode { - XY(usize, usize), - XZ(usize, usize), - YZ(usize, usize), -} - -pub struct BufferView<'a> { - mode: IndexMode, - buf: &'a mut VideoBuf, -} - -impl<'a> BufferView<'a> { - pub fn new(buf: &'a mut VideoBuf, mode: IndexMode) -> Self { - BufferView { mode, buf } - } -} - -impl Index<usize> for BufferView<'_> { - type Output = Value; - - fn index(&self, a: usize) -> &Self::Output { - match self.mode { - IndexMode::XY(x, y) => &self.buf[x][y][a], - IndexMode::XZ(x, z) => &self.buf[x][a][z], - IndexMode::YZ(y, z) => &self.buf[a][y][z], - } - } -} -impl IndexMut<usize> for BufferView<'_> { - fn index_mut(&mut self, a: usize) -> &mut Self::Output { - match self.mode { - IndexMode::XY(x, y) => &mut self.buf[x][y][a], - IndexMode::XZ(x, z) => &mut self.buf[x][a][z], - IndexMode::YZ(y, z) => &mut self.buf[a][y][z], - } - } -} |