Vendor codec 2.65.0 (from vaptvupt-codec tag v2.65.0), re-applying the two
in-tree audit patches on top: the ANS decode safe-zone 2*SAFEZONE_MAX_RUN
reserve (heap-overflow guard, not yet upstream) and the AVX2 offset-read
bound in vv_decoder.c.
Two settings in the integration layer were leaving most of the codec's ratio
on the table:
* vaptvupt_api.c forced opts.format_v2=1 for balanced+extreme. Since codec
v2.61.0 that routes text through the binary/greedy path and HALVES the
extreme-mode text ratio (codec-level 7.6x -> 3.7x). The codec auto-enables
format_v2 for binary-detected input on its own, so stop forcing it: text
keeps the optimal parser, binary still gets v2.
* auto_block_size() capped the extreme block at 512 KiB. The block IS the
codec's LZ window, so the 'large-window extreme' parser could never match
past 512 KiB. Scale block size with level (128 KiB fast -> 8 MiB extreme).
Because block size also sets --dedup granularity (a large block rarely
finds a byte-exact duplicate), --dedup now overrides to a small 256 KiB
block so block-level dedup still works.
Measured, level 9 extreme: text 3.77x->5.98x (+58%), logs 7.21x->9.07x (+26%),
json 8.25x->9.38x, source 4.93x->5.63x. Wire format unchanged (v1.6); 5.0.0
and 5.1.0 archives interoperate both directions (verified, all modes). Bump
ZUPT_CODEC_RELEASE to 2.65.0 and ZUPT_VERSION_STRING to 5.1.0.
43 lines
1.4 KiB
C
43 lines
1.4 KiB
C
/*
|
|
* VaptVupt — VaptVupt Integration API
|
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
|
* Copyright 2026 Cristian.
|
|
*
|
|
* EMBED-COMPAT: This is the API that a host application calls. It wraps the internal
|
|
* VaptVupt API with sensible defaults for backup workloads:
|
|
* - Checksum always enabled (data integrity is critical for backups)
|
|
* - Adaptive window selection (auto-detect optimal wlog per file)
|
|
* - Level maps to mode: 1=fast, 5=balanced, 9=extreme
|
|
*
|
|
* Usage:
|
|
* size_t bound = vvz_compress_bound(src_len);
|
|
* uint8_t *dst = malloc(bound);
|
|
* int64_t csz = vvz_compress(src, src_len, dst, bound, 5);
|
|
* int64_t dsz = vvz_decompress(dst, csz, out, out_cap);
|
|
*/
|
|
#ifndef VAPTVUPT_API_H
|
|
#define VAPTVUPT_API_H
|
|
|
|
#include <stdint.h>
|
|
#include <stddef.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* Compress src into dst. Returns compressed size or negative error code.
|
|
* level: 1 = fast (max speed), 5 = balanced (default), 9 = extreme (max ratio) */
|
|
int64_t vvz_compress(const uint8_t *src, size_t src_len,
|
|
uint8_t *dst, size_t dst_cap, int level);
|
|
|
|
/* Decompress src into dst. Returns decompressed size or negative error code. */
|
|
int64_t vvz_decompress(const uint8_t *src, size_t src_len,
|
|
uint8_t *dst, size_t dst_cap);
|
|
|
|
/* Upper bound on compressed size for a given input length. */
|
|
size_t vvz_compress_bound(size_t src_len);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
#endif /* VAPTVUPT_API_H */
|