Updates to Brotli compression format, decoder and encoder
This commit contains a batch of changes that were made to the Brotli compression algorithm in the last three weeks. Most important changes: * Added UTF8 context model for good text compression. * Simplified context modeling by having only 4 context modes. * Per-block context mode selection. * Faster backward copying and bit reading functions. * More efficient histogram coding. * Streaming support for the decoder and encoder.
This commit is contained in:
@@ -20,9 +20,45 @@
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
#include "./hash.h"
|
||||
#include "./ringbuffer.h"
|
||||
|
||||
namespace brotli {
|
||||
|
||||
class BrotliCompressor {
|
||||
public:
|
||||
BrotliCompressor();
|
||||
~BrotliCompressor();
|
||||
|
||||
// Writes the stream header into the internal output buffer.
|
||||
void WriteStreamHeader();
|
||||
|
||||
// Encodes the data in input_buffer as a meta-block and writes it to
|
||||
// encoded_buffer and sets *encoded_size to the number of bytes that was
|
||||
// written.
|
||||
void WriteMetaBlock(const size_t input_size,
|
||||
const uint8_t* input_buffer,
|
||||
size_t* encoded_size,
|
||||
uint8_t* encoded_buffer);
|
||||
|
||||
// Writes a zero-length meta-block with end-of-input bit set to the
|
||||
// internal output buffer and copies the output buffer to encoded_buffer and
|
||||
// sets *encoded_size to the number of bytes written.
|
||||
void FinishStream(size_t* encoded_size, uint8_t* encoded_buffer);
|
||||
|
||||
|
||||
private:
|
||||
Hasher* hasher_;
|
||||
int dist_ringbuffer_[4];
|
||||
size_t dist_ringbuffer_idx_;
|
||||
size_t input_pos_;
|
||||
RingBuffer ringbuffer_;
|
||||
std::vector<float> literal_cost_;
|
||||
int storage_ix_;
|
||||
uint8_t* storage_;
|
||||
};
|
||||
|
||||
// Compresses the data in input_buffer into encoded_buffer, and sets
|
||||
// *encoded_size to the compressed length.
|
||||
// Returns 0 if there was an error and 1 otherwise.
|
||||
|
||||
Reference in New Issue
Block a user