Use BROTLI_MAX_STATIC_CONTEXTS instead of magic constants in encode.c

PiperOrigin-RevId: 615341475
This commit is contained in:
Brotli 2024-03-13 02:47:07 -07:00 committed by Copybara-Service
parent ccec9628e4
commit 9717649c31
3 changed files with 7 additions and 6 deletions

View File

@ -351,7 +351,7 @@ static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
size_t sink; size_t sink;
size_t i; size_t i;
ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8); ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
memset(arena, 0, sizeof(arena[0]) * 32 * 14); memset(arena, 0, sizeof(arena[0]) * 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));
for (; start_pos + 64 <= end_pos; start_pos += 4096) { for (; start_pos + 64 <= end_pos; start_pos += 4096) {
const size_t stride_end_pos = start_pos + 64; const size_t stride_end_pos = start_pos + 64;
uint8_t prev2 = input[start_pos & mask]; uint8_t prev2 = input[start_pos & mask];
@ -372,7 +372,7 @@ static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
} }
entropy[1] = ShannonEntropy(combined_histo, 32, &sink); entropy[1] = ShannonEntropy(combined_histo, 32, &sink);
entropy[2] = 0; entropy[2] = 0;
for (i = 0; i < 13; ++i) { for (i = 0; i < BROTLI_MAX_STATIC_CONTEXTS; ++i) {
entropy[2] += ShannonEntropy(context_histo + (i << 5), 32, &sink); entropy[2] += ShannonEntropy(context_histo + (i << 5), 32, &sink);
} }
entropy[0] = 1.0 / (double)total; entropy[0] = 1.0 / (double)total;
@ -388,7 +388,7 @@ static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) { if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
return BROTLI_FALSE; return BROTLI_FALSE;
} else { } else {
*num_literal_contexts = 13; *num_literal_contexts = BROTLI_MAX_STATIC_CONTEXTS;
*literal_context_map = kStaticContextMapComplexUTF8; *literal_context_map = kStaticContextMapComplexUTF8;
return BROTLI_TRUE; return BROTLI_TRUE;
} }
@ -532,7 +532,8 @@ static void WriteMetaBlockInternal(MemoryManager* m,
const uint32_t* literal_context_map = NULL; const uint32_t* literal_context_map = NULL;
if (!params->disable_literal_context_modeling) { if (!params->disable_literal_context_modeling) {
/* TODO(eustas): pull to higher level and reuse. */ /* TODO(eustas): pull to higher level and reuse. */
uint32_t* arena = BROTLI_ALLOC(m, uint32_t, 14 * 32); uint32_t* arena =
BROTLI_ALLOC(m, uint32_t, 32 * (BROTLI_MAX_STATIC_CONTEXTS + 1));
if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return; if (BROTLI_IS_OOM(m) || BROTLI_IS_NULL(arena)) return;
DecideOverLiteralContextModeling( DecideOverLiteralContextModeling(
data, wrapped_last_flush_pos, bytes, mask, params->quality, data, wrapped_last_flush_pos, bytes, mask, params->quality,

View File

@ -298,8 +298,6 @@ void BrotliBuildMetaBlock(MemoryManager* m,
#include "metablock_inc.h" /* NOLINT(build/include) */ #include "metablock_inc.h" /* NOLINT(build/include) */
#undef FN #undef FN
#define BROTLI_MAX_STATIC_CONTEXTS 13
/* Greedy block splitter for one block category (literal, command or distance). /* Greedy block splitter for one block category (literal, command or distance).
Gathers histograms for all context buckets. */ Gathers histograms for all context buckets. */
typedef struct ContextBlockSplitter { typedef struct ContextBlockSplitter {

View File

@ -24,6 +24,8 @@
extern "C" { extern "C" {
#endif #endif
#define BROTLI_MAX_STATIC_CONTEXTS 13
typedef struct MetaBlockSplit { typedef struct MetaBlockSplit {
BlockSplit literal_split; BlockSplit literal_split;
BlockSplit command_split; BlockSplit command_split;