adder_codec_core/codec/compressed/
mod.rs

1pub mod fenwick;
2mod source_model;
3/// Compressed codec
4pub mod stream;
5
6pub const BLOCK_SIZE_BIG: usize = 64;
7
8pub const BLOCK_SIZE_BIG_AREA: usize = BLOCK_SIZE_BIG * BLOCK_SIZE_BIG;
9
10pub type DResidual = i16;
11pub const DRESIDUAL_NO_EVENT: DResidual = 256;
12pub const DRESIDUAL_SKIP_CUBE: DResidual = 257;
13pub type TResidual = i16;
14
15#[cfg(test)]
16mod tests {
17    use crate::codec::encoder::Encoder;
18    use crate::codec::{CodecMetadata, EncoderOptions};
19    use crate::{Coord, Event, PlaneSize};
20
21    #[test]
22    fn test_create_compressed_stream() {
23        // Example of creating a compressed stream and ingesting some events
24        let meta = CodecMetadata {
25            delta_t_max: 100,
26            ref_interval: 100,
27            ..Default::default()
28        };
29
30        let output = crate::codec::compressed::stream::CompressedOutput::new(meta, Vec::new());
31        let mut encoder = Encoder::new_compressed(
32            output,
33            EncoderOptions::default(PlaneSize {
34                width: 100,
35                height: 100,
36                channels: 1,
37            }),
38        );
39        let meta = *encoder.meta();
40        let mut test_event = Event {
41            coord: Coord {
42                x: 0,
43                y: 0,
44                c: None,
45            },
46            d: 5,
47            t: 100,
48        };
49        encoder.ingest_event(test_event).unwrap();
50        encoder.flush_writer().unwrap();
51        let writer = encoder.close_writer().unwrap().unwrap();
52
53        let tmp_len = writer.len();
54
55        // We should have compressed the partial ADU, and thus have more than the header size
56        assert!(writer.len() > meta.header_size);
57
58        let output = crate::codec::compressed::stream::CompressedOutput::new(meta, Vec::new());
59        let mut encoder = Encoder::new_compressed(
60            output,
61            EncoderOptions::default(PlaneSize {
62                width: 100,
63                height: 100,
64                channels: 1,
65            }),
66        );
67        let meta = *encoder.meta();
68        dbg!(meta);
69        encoder.ingest_event(test_event).unwrap();
70        test_event.t += 100;
71        encoder.ingest_event(test_event).unwrap();
72        test_event.t += 100;
73        encoder.ingest_event(test_event).unwrap();
74        encoder.flush_writer().unwrap();
75        let writer = encoder.close_writer().unwrap().unwrap();
76
77        // Now we've exceeded the DeltaT_max, so we should have written out a frame
78        assert!(writer.len() > tmp_len);
79    }
80}