aboutsummaryrefslogtreecommitdiff
path: root/c/enc/block_encoder_inc.h
diff options
context:
space:
mode:
Diffstat (limited to 'c/enc/block_encoder_inc.h')
-rw-r--r--c/enc/block_encoder_inc.h33
1 files changed, 33 insertions, 0 deletions
diff --git a/c/enc/block_encoder_inc.h b/c/enc/block_encoder_inc.h
new file mode 100644
index 0000000..2a08f90
--- /dev/null
+++ b/c/enc/block_encoder_inc.h
@@ -0,0 +1,33 @@
+/* NOLINT(build/header_guard) */
+/* Copyright 2014 Google Inc. All Rights Reserved.
+
+ Distributed under MIT license.
+ See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
+*/
+
+/* template parameters: FN */
+
+#define HistogramType FN(Histogram)
+
+/* Creates entropy codes for all block types and stores them to the bit
+ stream. */
+static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,
+ const HistogramType* histograms, const size_t histograms_size,
+ HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
+ const size_t alphabet_size = self->alphabet_size_;
+ const size_t table_size = histograms_size * alphabet_size;
+ self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
+ self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
+ if (BROTLI_IS_OOM(m)) return;
+
+ {
+ size_t i;
+ for (i = 0; i < histograms_size; ++i) {
+ size_t ix = i * alphabet_size;
+ BuildAndStoreHuffmanTree(&histograms[i].data_[0], alphabet_size, tree,
+ &self->depths_[ix], &self->bits_[ix], storage_ix, storage);
+ }
+ }
+}
+
+#undef HistogramType