Home | History | Annotate | Download | only in utils
      1 // Copyright 2011 Google Inc. All Rights Reserved.
      2 //
      3 // This code is licensed under the same terms as WebM:
      4 //  Software License Agreement:  http://www.webmproject.org/license/software/
      5 //  Additional IP Rights Grant:  http://www.webmproject.org/license/additional/
      6 // -----------------------------------------------------------------------------
      7 //
      8 // Author: Jyrki Alakuijala (jyrki (at) google.com)
      9 //
     10 // Entropy encoding (Huffman) for webp lossless
     11 
     12 #ifndef WEBP_UTILS_HUFFMAN_ENCODE_H_
     13 #define WEBP_UTILS_HUFFMAN_ENCODE_H_
     14 
     15 #include "webp/types.h"
     16 
     17 #if defined(__cplusplus) || defined(c_plusplus)
     18 extern "C" {
     19 #endif
     20 
     21 // Struct for holding the tree header in coded form.
     22 typedef struct {
     23   uint8_t code;         // value (0..15) or escape code (16,17,18)
     24   uint8_t extra_bits;   // extra bits for escape codes
     25 } HuffmanTreeToken;
     26 
     27 // Struct to represent the tree codes (depth and bits array).
     28 typedef struct {
     29   int       num_symbols;   // Number of symbols.
     30   uint8_t*  code_lengths;  // Code lengths of the symbols.
     31   uint16_t* codes;         // Symbol Codes.
     32 } HuffmanTreeCode;
     33 
     34 // Turn the Huffman tree into a token sequence.
     35 // Returns the number of tokens used.
     36 int VP8LCreateCompressedHuffmanTree(const HuffmanTreeCode* const tree,
     37                                     HuffmanTreeToken* tokens, int max_tokens);
     38 
     39 // Create an optimized tree, and tokenize it.
     40 int VP8LCreateHuffmanTree(int* const histogram, int tree_depth_limit,
     41                           HuffmanTreeCode* const tree);
     42 
     43 #if defined(__cplusplus) || defined(c_plusplus)
     44 }
     45 #endif
     46 
     47 #endif  // WEBP_UTILS_HUFFMAN_ENCODE_H_
     48