aboutsummaryrefslogtreecommitdiff
path: root/old/dhwt-codec/src/bin/import.rs
blob: cd2a35ebd03ae4f739a769db483085900475984e (plain)
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
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)
    }
}