Coverage Report

Created: 2026-05-30 07:32

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/exr-1.74.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
0
pub fn decompress_bytes(
16
0
    channels: &ChannelList,
17
0
    data_le: ByteVec,
18
0
    rectangle: IntegerBounds,
19
0
    expected_byte_size: usize,
20
0
    _pedantic: bool,
21
0
) -> Result<ByteVec> {
22
0
    let options = zune_inflate::DeflateOptions::default().set_limit(expected_byte_size).set_size_hint(expected_byte_size);
23
0
    let mut decoder = zune_inflate::DeflateDecoder::new_with_options(&data_le, options);
24
0
    let mut decompressed_le = decoder.decode_zlib()
25
0
        .map_err(|_| Error::invalid("zlib-compressed data malformed"))?;
26
27
0
    differences_to_samples(&mut decompressed_le);
28
0
    interleave_byte_blocks(&mut decompressed_le);
29
30
0
    super::convert_little_endian_to_current(decompressed_le, channels, rectangle) // TODO no alloc
31
0
}
32
33
0
pub fn compress_bytes(channels: &ChannelList, uncompressed_ne: 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_le = convert_current_to_little_endian(uncompressed_ne, channels, rectangle)?;
36
37
0
    separate_bytes_fragments(&mut packed_le);
38
0
    samples_to_differences(&mut packed_le);
39
40
0
    Ok(miniz_oxide::deflate::compress_to_vec_zlib(packed_le.as_slice(), 4))
41
0
}