mirror of
https://github.com/Xevion/easy7zip.git
synced 2025-12-09 00:07:00 -06:00
- allow to specify brotli window size - parameter -m0=brotli:long=n, BROTLI_MAX_WINDOW_BITS (24) used by default in brotli-mt, smaller == faster - note that :long can be set up to BROTLI_LARGE_MAX_WINDOW_BITS (30), whereas :wlog can be set up to BROTLI_MAX_WINDOW_BITS (24) only... - todo: check whether set of BROTLI_PARAM_LARGE_WINDOW to BROTLI_TRUE is needed if (lgwin > BROTLI_MAX_WINDOW_BITS) - implementation of single-threaded brotli compression / decompression for .br data Signed-off-by: Sergey G. Brester <info@sebres.de> Reviewed-by: Tino Reichardt <milky-7zip@mcmilk.de>
75 lines
1.7 KiB
C++
75 lines
1.7 KiB
C++
// (C) 2017 Tino Reichardt
|
|
|
|
#define BROTLI_STATIC_LINKING_ONLY
|
|
#include "../../../C/Alloc.h"
|
|
#include "../../../C/Threads.h"
|
|
#include "../../../C/brotli/encode.h"
|
|
#include "../../../C/zstdmt/brotli-mt.h"
|
|
|
|
#include "../../Common/Common.h"
|
|
#include "../../Common/MyCom.h"
|
|
#include "../ICoder.h"
|
|
#include "../Common/StreamUtils.h"
|
|
|
|
#ifndef EXTRACT_ONLY
|
|
namespace NCompress {
|
|
namespace NBROTLI {
|
|
|
|
struct CProps
|
|
{
|
|
CProps() { clear (); }
|
|
void clear ()
|
|
{
|
|
memset(this, 0, sizeof (*this));
|
|
_ver_major = BROTLI_VERSION_MAJOR;
|
|
_ver_minor = BROTLI_VERSION_MINOR;
|
|
_level = 3;
|
|
}
|
|
|
|
Byte _ver_major;
|
|
Byte _ver_minor;
|
|
Byte _level;
|
|
};
|
|
|
|
class CEncoder:
|
|
public ICompressCoder,
|
|
public ICompressSetCoderMt,
|
|
public ICompressSetCoderProperties,
|
|
public ICompressWriteCoderProperties,
|
|
public CMyUnknownImp
|
|
{
|
|
CProps _props;
|
|
|
|
UInt64 _processedIn;
|
|
UInt64 _processedOut;
|
|
UInt32 _inputSize;
|
|
UInt32 _numThreads;
|
|
|
|
Int32 _Long;
|
|
Int32 _WindowLog;
|
|
|
|
BROTLIMT_CCtx *_ctx;
|
|
|
|
public:
|
|
|
|
UInt64 unpackSize;
|
|
|
|
MY_QUERYINTERFACE_BEGIN2(ICompressCoder)
|
|
MY_QUERYINTERFACE_ENTRY(ICompressSetCoderMt)
|
|
MY_QUERYINTERFACE_ENTRY(ICompressSetCoderProperties)
|
|
MY_QUERYINTERFACE_ENTRY(ICompressWriteCoderProperties)
|
|
MY_QUERYINTERFACE_END
|
|
MY_ADDREF_RELEASE
|
|
|
|
STDMETHOD (Code)(ISequentialInStream *inStream, ISequentialOutStream *outStream, const UInt64 *inSize, const UInt64 *outSize, ICompressProgressInfo *progress);
|
|
STDMETHOD (SetCoderProperties)(const PROPID *propIDs, const PROPVARIANT *props, UInt32 numProps);
|
|
STDMETHOD (WriteCoderProperties)(ISequentialOutStream *outStream);
|
|
STDMETHOD (SetNumberOfThreads)(UInt32 numThreads);
|
|
|
|
CEncoder();
|
|
virtual ~CEncoder();
|
|
};
|
|
|
|
}}
|
|
#endif
|