Coverage Report

Created: 2025-11-09 06:56

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/exr-1.73.0/src/compression/zip.rs
Line
Count
Source
1
2
// see https://github.com/openexr/openexr/blob/master/OpenEXR/IlmImf/ImfCompressor.cpp
3
4
5
use super::*;
6
use super::optimize_bytes::*;
7
use crate::error::Result;
8
9
// scanline decompression routine, see https://github.com/openexr/openexr/blob/master/OpenEXR/IlmImf/ImfScanLineInputFile.cpp
10
// 1. Uncompress the data, if necessary (If the line is uncompressed, it's in XDR format, regardless of the compressor's output format.)
11
// 3. Convert one scan line's worth of pixel data back from the machine-independent representation
12
// 4. Fill the frame buffer with pixel data, respective to sampling and whatnot
13
14
15
9
pub fn decompress_bytes(
16
9
    channels: &ChannelList,
17
9
    data: ByteVec,
18
9
    rectangle: IntegerBounds,
19
9
    expected_byte_size: usize,
20
9
    _pedantic: bool,
21
9
) -> Result<ByteVec> {
22
9
    let options = zune_inflate::DeflateOptions::default().set_limit(expected_byte_size).set_size_hint(expected_byte_size);
23
9
    let mut decoder = zune_inflate::DeflateDecoder::new_with_options(&data, options);
24
9
    let mut decompressed = decoder.decode_zlib()
25
9
        .map_err(|_| Error::invalid("zlib-compressed data malformed"))?;
26
27
0
    differences_to_samples(&mut decompressed);
28
0
    interleave_byte_blocks(&mut decompressed);
29
30
0
    Ok(super::convert_little_endian_to_current(decompressed, channels, rectangle))// TODO no alloc
31
9
}
32
33
0
pub fn compress_bytes(channels: &ChannelList, uncompressed: ByteVec, rectangle: IntegerBounds) -> Result<ByteVec> {
34
    // see https://github.com/AcademySoftwareFoundation/openexr/blob/3bd93f85bcb74c77255f28cdbb913fdbfbb39dfe/OpenEXR/IlmImf/ImfTiledOutputFile.cpp#L750-L842
35
0
    let mut packed = convert_current_to_little_endian(uncompressed, channels, rectangle);
36
37
0
    separate_bytes_fragments(&mut packed);
38
0
    samples_to_differences(&mut packed);
39
40
0
    Ok(miniz_oxide::deflate::compress_to_vec_zlib(packed.as_slice(), 4))
41
0
}