Create the Huffman tree given the symbol frequencies*/
| 849 | |
| 850 | /*Create the Huffman tree given the symbol frequencies*/ |
| 851 | static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, |
| 852 | size_t mincodes, size_t numcodes, unsigned maxbitlen) |
| 853 | { |
| 854 | unsigned error = 0; |
| 855 | while(!frequencies[numcodes - 1] && numcodes > mincodes) numcodes--; /*trim zeroes*/ |
| 856 | tree->maxbitlen = maxbitlen; |
| 857 | tree->numcodes = (unsigned)numcodes; /*number of symbols*/ |
| 858 | tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); |
| 859 | if(!tree->lengths) return 83; /*alloc fail*/ |
| 860 | /*initialize all lengths to 0*/ |
| 861 | memset(tree->lengths, 0, numcodes * sizeof(unsigned)); |
| 862 | |
| 863 | error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); |
| 864 | if(!error) error = HuffmanTree_makeFromLengths2(tree); |
| 865 | return error; |
| 866 | } |
| 867 | |
| 868 | static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) |
| 869 | { |
no test coverage detected