Parolin 0.7.9 6796
Console (soon DLLs) to do a tar like job
Loading...
Searching...
No Matches
metablock.h
Go to the documentation of this file.
1/* Copyright 2015 Google Inc. All Rights Reserved.
2
3 Distributed under MIT license.
4 See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5*/
6
7/* Algorithms for distributing the literals and commands of a metablock between
8 block types and contexts. */
9
10#ifndef BROTLI_ENC_METABLOCK_H_
11#define BROTLI_ENC_METABLOCK_H_
12
13#include "../common/context.h"
14#include "../common/platform.h"
15#include <brotli/types.h>
16#include "./block_splitter.h"
17#include "./command.h"
18#include "./histogram.h"
19#include "./memory.h"
20#include "./quality.h"
21
22#if defined(__cplusplus) || defined(c_plusplus)
23extern "C" {
24#endif
25
26typedef struct MetaBlockSplit {
30 uint32_t* literal_context_map;
32 uint32_t* distance_context_map;
34 HistogramLiteral* literal_histograms;
36 HistogramCommand* command_histograms;
38 HistogramDistance* distance_histograms;
41
42static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
46 mb->literal_context_map = 0;
50 mb->literal_histograms = 0;
52 mb->command_histograms = 0;
54 mb->distance_histograms = 0;
56}
57
58static BROTLI_INLINE void DestroyMetaBlockSplit(
68}
69
70/* Uses the slow shortest-path block splitter and does context clustering.
71 The distance parameters are dynamically selected based on the commands
72 which get recomputed under the new distance parameters. The new distance
73 parameters are stored into *params. */
75 const uint8_t* ringbuffer,
76 const size_t pos,
77 const size_t mask,
78 BrotliEncoderParams* params,
79 uint8_t prev_byte,
80 uint8_t prev_byte2,
81 Command* cmds,
82 size_t num_commands,
83 ContextType literal_context_mode,
84 MetaBlockSplit* mb);
85
86/* Uses a fast greedy block splitter that tries to merge current block with the
87 last or the second last block and uses a static context clustering which
88 is the same for all block types. */
90 MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
91 uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
92 size_t num_contexts, const uint32_t* static_context_map,
93 const Command* commands, size_t n_commands, MetaBlockSplit* mb);
94
95BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,
96 MetaBlockSplit* mb);
97
99 uint32_t npostfix, uint32_t ndirect);
100
101#if defined(__cplusplus) || defined(c_plusplus)
102} /* extern "C" */
103#endif
104
105#endif /* BROTLI_ENC_METABLOCK_H_ */
const uint8_t * ContextLut
Definition context.h:105
ContextType
Definition context.h:94
void BrotliDestroyBlockSplit(MemoryManager *m, BlockSplit *self)
Definition block_splitter.c:117
void BrotliInitBlockSplit(BlockSplit *self)
Definition block_splitter.c:108
#define BROTLI_FREE(M, P)
Definition memory.h:48
BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams *params, uint32_t npostfix, uint32_t ndirect)
Definition metablock.c:28
BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(MemoryManager *m, const uint8_t *ringbuffer, size_t pos, size_t mask, uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut, size_t num_contexts, const uint32_t *static_context_map, const Command *commands, size_t n_commands, MetaBlockSplit *mb)
Definition metablock.c:619
BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes, MetaBlockSplit *mb)
Definition metablock.c:641
BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager *m, const uint8_t *ringbuffer, const size_t pos, const size_t mask, BrotliEncoderParams *params, uint8_t prev_byte, uint8_t prev_byte2, Command *cmds, size_t num_commands, ContextType literal_context_mode, MetaBlockSplit *mb)
Definition metablock.c:126
struct MetaBlockSplit MetaBlockSplit
Definition block_splitter.h:22
Definition params.h:32
Definition command.h:107
Definition memory.h:26
Definition metablock.h:26
size_t literal_histograms_size
Definition metablock.h:35
BlockSplit distance_split
Definition metablock.h:29
size_t literal_context_map_size
Definition metablock.h:31
HistogramCommand * command_histograms
Definition metablock.h:36
HistogramLiteral * literal_histograms
Definition metablock.h:34
uint32_t * literal_context_map
Definition metablock.h:30
size_t command_histograms_size
Definition metablock.h:37
size_t distance_histograms_size
Definition metablock.h:39
HistogramDistance * distance_histograms
Definition metablock.h:38
size_t distance_context_map_size
Definition metablock.h:33
BlockSplit literal_split
Definition metablock.h:27
BlockSplit command_split
Definition metablock.h:28
uint32_t * distance_context_map
Definition metablock.h:32
#define BROTLI_INTERNAL
Definition platform.h:173
#define BROTLI_INLINE
Definition platform.h:136