lut_cube/
lib.rs

1type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
2
3mod cube;
4pub use cube::Cube;
5
6mod lut;
7pub use lut::Lut;
8
9#[cfg(test)]
10mod tests {
11    use std::fs::File;
12
13    use crate::{Cube, Lut};
14
15    #[test]
16    fn basics() {
17        let c1 = Cube::one_d(3);
18        assert_eq!(c1.dim(), 1);
19        assert_eq!(c1.r_len(), 3 * 3);
20
21        let c3 = Cube::three_d(75);
22        assert_eq!(c3.dim(), 3);
23        assert_eq!(c3.r_len(), 75 * 75 * 75 * 3);
24    }
25
26    #[test]
27    fn black_magic() {
28        let mut r = std::io::BufReader::new(File::open("/Library/Application Support/Blackmagic Design/DaVinci Resolve/LUT/VFX IO/Linear to Cineon Log.cube").unwrap());
29        let lut = Lut::parse(&mut r).expect("lut");
30        assert_eq!(lut.cube().dim(), 1);
31        assert_eq!(lut.cube().size(), 4096);
32
33        let mut r = std::io::BufReader::new(File::open("/Library/Application Support/Blackmagic Design/DaVinci Resolve/LUT/ACES/LMT ACES v0.1.1.cube").unwrap());
34        let lut = Lut::parse(&mut r).expect("lut");
35        assert_eq!(lut.cube().dim(), 3);
36        assert_eq!(lut.cube().size(), 65);
37        let shaper = lut.shaper().unwrap();
38        assert_eq!(shaper.dim(), 1);
39        assert_eq!(shaper.size(), 4095);
40        println!("comments:\n{}", lut.comments());
41    }
42
43    // #[test]
44    // fn apple() {
45    //     let mut r = std::io::BufReader::new(
46    //         File::open("/Users/yury/Projects/yoml/multi/Luts/AppleLogToRec709-v1.0.cube").unwrap(),
47    //     );
48    //     let lut = Lut::parse(&mut r).expect("lut");
49    //     assert_eq!(lut.cube().dim(), 3);
50    //     assert_eq!(lut.cube().size(), 65);
51    //     println!("comments:\n{}", lut.comments());
52    // }
53}