mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-06 13:14:59 -06:00
make compression of zstd archive type more similar to Zstandard CLI (store dictID and checksum by default in zstd type, no effect for 7z type)
This commit is contained in:
@@ -286,6 +286,9 @@ static HRESULT UpdateArchive(
|
||||
CMyComPtr<ICompressProgressInfo> localProgress = localProgressSpec;
|
||||
localProgressSpec->Init(updateCallback, true);
|
||||
NCompress::NZSTD::CEncoder *encoderSpec = new NCompress::NZSTD::CEncoder;
|
||||
// by zstd archive type store dictID and checksum (similar to zstd client)
|
||||
encoderSpec->dictIDFlag = 1;
|
||||
encoderSpec->checksumFlag = 1;
|
||||
encoderSpec->unpackSize = unpackSize;
|
||||
CMyComPtr<ICompressCoder> encoder = encoderSpec;
|
||||
RINOK(props.SetCoderProps(encoderSpec, NULL));
|
||||
|
||||
@@ -31,6 +31,8 @@ CEncoder::CEncoder():
|
||||
_LdmMinMatch(-1),
|
||||
_LdmBucketSizeLog(-1),
|
||||
_LdmHashRateLog(-1),
|
||||
dictIDFlag(-1),
|
||||
checksumFlag(-1),
|
||||
unpackSize(0)
|
||||
{
|
||||
_props.clear();
|
||||
@@ -252,6 +254,15 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
|
||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_contentSizeFlag, 1);
|
||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
|
||||
if (dictIDFlag != -1) {
|
||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_dictIDFlag, dictIDFlag);
|
||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
}
|
||||
if (checksumFlag != -1) {
|
||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_checksumFlag, checksumFlag);
|
||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
}
|
||||
|
||||
if (unpackSize) {
|
||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_srcSizeHint, (int)(unpackSize <= INT_MAX ? unpackSize : INT_MAX));
|
||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
@@ -326,6 +337,12 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
|
||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_ldmHashRateLog, _LdmHashRateLog);
|
||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
}
|
||||
|
||||
//err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_literalCompressionMode, (int)ZSTD_ps_auto);
|
||||
//if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
|
||||
//err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_enableDedicatedDictSearch, 1);
|
||||
//if (ZSTD_isError(err)) return E_INVALIDARG;
|
||||
}
|
||||
|
||||
for (;;) {
|
||||
|
||||
@@ -68,6 +68,8 @@ class CEncoder:
|
||||
|
||||
public:
|
||||
|
||||
int dictIDFlag;
|
||||
int checksumFlag;
|
||||
UInt64 unpackSize;
|
||||
|
||||
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
|
||||
|
||||
Reference in New Issue
Block a user