mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-13 08:11:33 -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;
|
CMyComPtr<ICompressProgressInfo> localProgress = localProgressSpec;
|
||||||
localProgressSpec->Init(updateCallback, true);
|
localProgressSpec->Init(updateCallback, true);
|
||||||
NCompress::NZSTD::CEncoder *encoderSpec = new NCompress::NZSTD::CEncoder;
|
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;
|
encoderSpec->unpackSize = unpackSize;
|
||||||
CMyComPtr<ICompressCoder> encoder = encoderSpec;
|
CMyComPtr<ICompressCoder> encoder = encoderSpec;
|
||||||
RINOK(props.SetCoderProps(encoderSpec, NULL));
|
RINOK(props.SetCoderProps(encoderSpec, NULL));
|
||||||
|
|||||||
@@ -31,6 +31,8 @@ CEncoder::CEncoder():
|
|||||||
_LdmMinMatch(-1),
|
_LdmMinMatch(-1),
|
||||||
_LdmBucketSizeLog(-1),
|
_LdmBucketSizeLog(-1),
|
||||||
_LdmHashRateLog(-1),
|
_LdmHashRateLog(-1),
|
||||||
|
dictIDFlag(-1),
|
||||||
|
checksumFlag(-1),
|
||||||
unpackSize(0)
|
unpackSize(0)
|
||||||
{
|
{
|
||||||
_props.clear();
|
_props.clear();
|
||||||
@@ -252,6 +254,15 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
|
|||||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_contentSizeFlag, 1);
|
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_contentSizeFlag, 1);
|
||||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
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) {
|
if (unpackSize) {
|
||||||
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_srcSizeHint, (int)(unpackSize <= INT_MAX ? unpackSize : INT_MAX));
|
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_srcSizeHint, (int)(unpackSize <= INT_MAX ? unpackSize : INT_MAX));
|
||||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
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);
|
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_ldmHashRateLog, _LdmHashRateLog);
|
||||||
if (ZSTD_isError(err)) return E_INVALIDARG;
|
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 (;;) {
|
for (;;) {
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ class CEncoder:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
int dictIDFlag;
|
||||||
|
int checksumFlag;
|
||||||
UInt64 unpackSize;
|
UInt64 unpackSize;
|
||||||
|
|
||||||
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
|
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
|
||||||
|
|||||||
Reference in New Issue
Block a user