1b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne/* 2b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneCopyright 2011 Google Inc. All Rights Reserved. 3b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 4b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneLicensed under the Apache License, Version 2.0 (the "License"); 5b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneyou may not use this file except in compliance with the License. 6b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneYou may obtain a copy of the License at 7b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 8b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne http://www.apache.org/licenses/LICENSE-2.0 9b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 10b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneUnless required by applicable law or agreed to in writing, software 11b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennedistributed under the License is distributed on an "AS IS" BASIS, 12b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneSee the License for the specific language governing permissions and 14b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennelimitations under the License. 15b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 16b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneAuthor: lode.vandevenne@gmail.com (Lode Vandevenne) 17b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneAuthor: jyrki.alakuijala@gmail.com (Jyrki Alakuijala) 18b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne*/ 19b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 20b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#ifndef ZOPFLI_KATAJAINEN_H_ 21b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#define ZOPFLI_KATAJAINEN_H_ 22b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 23b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#include <string.h> 24b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 25b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne/* 26b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneOutputs minimum-redundancy length-limited code bitlengths for symbols with the 27b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennegiven counts. The bitlengths are limited by maxbits. 28b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 29b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode VandevenneThe output is tailored for DEFLATE: symbols that never occur, get a bit length 30b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneof 0, and if only a single symbol occurs at least once, its bitlength will be 1, 31b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenneand not 0 as would theoretically be needed for a single symbol. 32b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 33b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennefrequencies: The amount of occurances of each symbol. 34b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennen: The amount of symbols. 35b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennemaxbits: Maximum bit length, inclusive. 36b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennebitlengths: Output, the bitlengths for the symbol prefix codes. 37b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevennereturn: 0 for OK, non-0 for error. 38b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne*/ 39981df0fe897c94382b9b963eb72bc36cbc2e729cLode Vandevenneint ZopfliLengthLimitedCodeLengths( 40b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne const size_t* frequencies, int n, int maxbits, unsigned* bitlengths); 41b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne 42b50b7ef8f8150616d3e9a227ce2d722a8355b1dLode Vandevenne#endif /* ZOPFLI_KATAJAINEN_H_ */ 43