Skip to content

compressionLevel is not respected in this case #2300

@ghost

Description

This test code read all files in a folder to memory, and train a dictionary with these files:
(usage: modify PATH to zstd/lib/compress folder, should ends with \ or / depend on the system)

Then compare these two cases:

1, One shot compress, all files concatenated in a single flat buffer.

    // load dictionary to context
    cdict = ZSTD_createCDict(dict_buffer, DICT_SIZE, compression_level);
    ZSTD_CCtx_refCDict(cctx, cdict);
    
    // one shot compress
    ZSTD_compressStream2(cctx, &out, &in, ZSTD_e_end);

2, Stream compress, file by file.

    // load dictionary to context
    cdict = ZSTD_createCDict(dict_buffer, DICT_SIZE, compression_level);
    ZSTD_CCtx_refCDict(cctx, cdict);
    
    // stream compress, file by file
    in.src = &input_buffer;
    for (int i = 0; i < content_count; i++) {
        in.size = content_sizes[i];
        in.pos = 0;
        
        ZSTD_compressStream2(cctx, &out, &in, ZSTD_e_continue);
        
        in.src += content_sizes[i];
    }
    // end the frame
    in.size = 0;
    in.pos = 0;
    ZSTD_compressStream2(cctx, &out, &in, ZSTD_e_end);

It seems one shot compress doesn't respect compressionLevel, its output size is always 121086 bytes.

The output of test code:

Read 25 files, total read size: 687379

compressionLevel 0:
One shot compress, output size: 121086
Stream compress, output size: 120456

compressionLevel 1:
One shot compress, output size: 121086
Stream compress, output size: 150086

compressionLevel 2:
One shot compress, output size: 121086
Stream compress, output size: 136046

compressionLevel 3:
One shot compress, output size: 121086
Stream compress, output size: 120456

compressionLevel 4:
One shot compress, output size: 121086
Stream compress, output size: 119666

compressionLevel 5:
One shot compress, output size: 121086
Stream compress, output size: 109670

compressionLevel 6:
One shot compress, output size: 121086
Stream compress, output size: 102324

compressionLevel 7:
One shot compress, output size: 121086
Stream compress, output size: 100145

compressionLevel 8:
One shot compress, output size: 121086
Stream compress, output size: 97499

compressionLevel 9:
One shot compress, output size: 121086
Stream compress, output size: 95822

compressionLevel 10:
One shot compress, output size: 121086
Stream compress, output size: 94824

compressionLevel 11:
One shot compress, output size: 121086
Stream compress, output size: 94244

compressionLevel 12:
One shot compress, output size: 121086
Stream compress, output size: 92322

compressionLevel 13:
One shot compress, output size: 121086
Stream compress, output size: 96481

compressionLevel 14:
One shot compress, output size: 121086
Stream compress, output size: 88812

compressionLevel 15:
One shot compress, output size: 121086
Stream compress, output size: 86981

compressionLevel 16:
One shot compress, output size: 121086
Stream compress, output size: 86292

compressionLevel 17:
One shot compress, output size: 121086
Stream compress, output size: 86224

compressionLevel 18:
One shot compress, output size: 121086
Stream compress, output size: 86218

compressionLevel 19:
One shot compress, output size: 121086
Stream compress, output size: 86271

compressionLevel 20:
One shot compress, output size: 121086
Stream compress, output size: 86218

compressionLevel 21:
One shot compress, output size: 121086
Stream compress, output size: 86218

compressionLevel 22:
One shot compress, output size: 121086
Stream compress, output size: 86219

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions