ref: abe8e167487822dd932fe4f312fbbd4cd3d6ffcd
parent: 772aa2cee4fda55e2104240bf4d58f389c6f1f90
author: Krzysztof Nikiel <knik@users.sourceforge.net>
date: Sat Oct 14 08:19:15 EDT 2017
removed old huffman code
--- a/libfaac/huffman.c
+++ /dev/null
@@ -1,1244 +1,0 @@
-/***********
-
-This software module was originally developed by Dolby
-Laboratories and edited by Sony Corporation
-in the course of development of the MPEG-2 NBC/MPEG-4
-Audio standard ISO/IEC13818-7, 14496-1, 2 and 3. This software module is an
-implementation of a part of one or more MPEG-2 NBC/MPEG-4 Audio tools as
-specified by the MPEG-2 NBC/MPEG-4 Audio standard. ISO/IEC gives users of the
-MPEG-2NBC/MPEG-4 Audio standards free license to this software module
-or modifications thereof for use in hardware or software products
-claiming conformance to the MPEG-2 NBC/MPEG-4 Audio standards. Those
-intending to use this software module in hardware or software products
-are advised that this use may infringe existing patents. The original
-developer of this software module, the subsequent
-editors and their companies, and ISO/IEC have no liability for use of
-this software module or modifications thereof in an
-implementation. Copyright is not released for non MPEG-2 NBC/MPEG-4
-Audio conforming products. The original developer retains full right to
-use the code for the developer's own purpose, assign or donate the code to a
-third party and to inhibit third party from using the code for non
-MPEG-2 NBC/MPEG-4 Audio conforming products. This copyright notice
-must be included in all copies or derivative works. Copyright 1996.
-
-***********/
-/*
- * $Id: huffman.c,v 1.12 2009/06/05 16:16:06 menno Exp $
- */
-
-#include <math.h>
-#include <stdlib.h>
-
-#include "huffman.h"
-#include "coder.h"
-#include "bitstream.h"
-#include "util.h"
-
-#include "hufftab.h"
-
-void HuffmanInit(CoderInfo *coderInfo, unsigned int numChannels)
-{
- unsigned int channel;
-
- for (channel = 0; channel < numChannels; channel++) {
- coderInfo[channel].data = (int*)AllocMemory(5*FRAME_LEN*sizeof(int));
- coderInfo[channel].len = (int*)AllocMemory(5*FRAME_LEN*sizeof(int));
-
-#ifdef DRM
- coderInfo[channel].num_data_cw = (int*)AllocMemory(FRAME_LEN*sizeof(int));
-#endif
- }
-}
-
-void HuffmanEnd(CoderInfo *coderInfo, unsigned int numChannels)
-{
- unsigned int channel;
-
- for (channel = 0; channel < numChannels; channel++) {
- if (coderInfo[channel].data) FreeMemory(coderInfo[channel].data);
- if (coderInfo[channel].len) FreeMemory(coderInfo[channel].len);
-
-#ifdef DRM
- if (coderInfo[channel].num_data_cw) FreeMemory(coderInfo[channel].num_data_cw);
-#endif
- }
-}
-
-int BitSearch(CoderInfo *coderInfo,
- int *quant) /* Quantized spectral values */
- /*
- This function inputs a vector of quantized spectral data, quant[][], and returns a vector,
- 'book_vector[]' that describes how to group together the scalefactor bands into a smaller
- number of sections. There are MAX_SCFAC_BANDS elements in book_vector (equal to 49 in the
- case of long blocks and 112 for short blocks), and each element has a huffman codebook
- number assigned to it.
-
- For a quick and simple algorithm, this function performs a binary
- search across the sfb's (scale factor bands). On the first approach, it calculates the
- needed amount of bits if every sfb were its own section and transmitted its own huffman
- codebook value side information (equal to 9 bits for a long block, 7 for a short). The
- next iteration combines adjacent sfb's, and calculates the bit rate for length two sfb
- sections. If any wider two-sfb section requires fewer bits than the sum of the two
- single-sfb sections (below it in the binary tree), then the wider section will be chosen.
- This process occurs until the sections are split into three uniform parts, each with an
- equal amount of sfb's contained.
-
- The binary tree is stored as a two-dimensional array. Since this tree is not full, (there
- are only 49 nodes, not 2^6 = 64), the numbering is a little complicated. If the tree were
- full, the top node would be 1. It's children would be 2 and 3. But, since this tree
- is not full, the top row of three nodes are numbered {4,5,6}. The row below it is
- {8,9,10,11,12,13}, and so on.
-
- The binary tree is called bit_stats[112][3]. There are 112 total nodes (some are not
- used since it's not full). bit_stats[x][0] holds the bit totals needed for the sfb sectioning
- strategy represented by the node x in the tree. bit_stats[x][1] holds the optimal huffman
- codebook table that minimizes the bit rate, given the sectioning boundaries dictated by node x.
-*/
-
-{
- int i,j,k;
- int hop;
- int min_book_choice[112][3];
- int bit_stats[240][3];
- int total_bit_count;
- int levels;
- int pow2levels;
- int fracpow2lev;
-
- /* Set local pointer to coderInfo book_vector */
- int* book_vector = coderInfo -> book_vector;
-
- levels = (int) ((log((double)coderInfo->sfbn)/log((double)2.0))+1);
-
-/* #define SLOW */
-
-#ifdef SLOW
- for(i = 0; i < 5; i++) {
-#else
- i = 0;
-#endif
- hop = 1 << i;
-
- NoiselessBitCount(coderInfo, quant, hop, min_book_choice);
-
- /* load up the (not-full) binary search tree with the min_book_choice values */
- k=0;
- total_bit_count = 0;
-
- pow2levels = 1 << (levels - i);
- fracpow2lev = pow2levels + (coderInfo->sfbn >> i);
-
- for (j=pow2levels; j < fracpow2lev; j++)
- {
- bit_stats[j][0] = min_book_choice[k][0]; /* the minimum bit cost for this section */
- bit_stats[j][1] = min_book_choice[k][1]; /* used with this huffman book number */
-
-#ifdef SLOW
- if (i>0){ /* not on the lowest level, grouping more than one signle scalefactor band per section*/
- if (bit_stats[j][0] < bit_stats[2*j][0] + bit_stats[2*j+1][0]){
-
- /* it is cheaper to combine surrounding sfb secionts into one larger huffman book section */
- for(n=k;n<k+hop;n++) { /* write the optimal huffman book value for the new larger section */
- if ( (book_vector[n]!=INTENSITY_HCB)&&(book_vector[n]!=INTENSITY_HCB2) ) { /* Don't merge with IS bands */
- book_vector[n] = bit_stats[j][1];
- }
- }
- } else { /* it was cheaper to transmit the smaller huffman table sections */
- bit_stats[j][0] = bit_stats[2*j][0] + bit_stats[2*j+1][0];
- }
- } else
-#endif
- { /* during the first stage of the iteration, all sfb's are individual sections */
- if ( (book_vector[k]!=INTENSITY_HCB)&&(book_vector[k]!=INTENSITY_HCB2) ) {
- book_vector[k] = bit_stats[j][1]; /* initially, set all sfb's to their own optimal section table values */
- }
- }
- total_bit_count = total_bit_count + bit_stats[j][0];
- k=k+hop;
- }
-#ifdef SLOW
- }
-#endif
- /* book_vector[k] = book_vector[k-1]; */
- return(total_bit_count);
-}
-
-
-int NoiselessBitCount(CoderInfo *coderInfo,
- int *quant,
- int hop,
- int min_book_choice[112][3])
-{
- int i,j,k;
-
- /*
- This function inputs:
- - the quantized spectral data, 'quant[]';
- - all of the huffman codebooks, 'huff[][]';
- - the size of the sections, in scalefactor bands (SFB's), 'hop';
- - an empty matrix, min_book_choice[][] passed to it;
-
- This function outputs:
- - the matrix, min_book_choice. It is a two dimensional matrix, with its
- rows corresponding to spectral sections. The 0th column corresponds to
- the bits needed to code a section with 'hop' scalefactors bands wide, all using
- the same huffman codebook. The 1st column contains the huffman codebook number
- that allows the minimum number of bits to be used.
-
- Other notes:
- - Initally, the dynamic range is calculated for each spectral section. The section
- can only be entropy coded with books that have an equal or greater dynamic range
- than the section's spectral data. The exception to this is for the 11th ESC codebook.
- If the dynamic range is larger than 16, then an escape code is appended after the
- table 11 codeword which encodes the larger value explicity in a pseudo-non-uniform
- quantization method.
-
- */
-
- int max_sb_coeff;
- int book_choice[12][2];
- int total_bits_cost = 0;
- int offset, length, end;
- int q;
-
- /* set local pointer to sfb_offset */
- int *sfb_offset = coderInfo->sfb_offset;
- int sfbn = coderInfo->sfbn;
-
- /* each section is 'hop' scalefactor bands wide */
- for (i = 0; i < sfbn; i = i + hop){
-#ifdef SLOW
- if ((i+hop) > nr_of_sfb)
- q = nr_of_sfb;
- else
-#endif
- q = i+hop;
-
- {
-
- /* find the maximum absolute value in the current spectral section, to see what tables are available to use */
- max_sb_coeff = 0;
- for (j=sfb_offset[i]; j<sfb_offset[q]; j++){ /* snl */
- if (ABS(quant[j]) > max_sb_coeff)
- max_sb_coeff = ABS(quant[j]);
- }
-
- j = 0;
- offset = sfb_offset[i];
-#ifdef SLOW
- if ((i+hop) > nr_of_sfb){
- end = sfb_offset[nr_of_sfb];
- } else
-#endif
- end = sfb_offset[q];
- length = end - offset;
-
- /* all spectral coefficients in this section are zero */
- if (max_sb_coeff == 0) {
- book_choice[j][0] = CalcBits(coderInfo,0,quant,offset,length);
- book_choice[j++][1] = 0;
-
- }
- else { /* if the section does have non-zero coefficients */
- if(max_sb_coeff < 2){
- book_choice[j][0] = CalcBits(coderInfo,1,quant,offset,length);
- book_choice[j++][1] = 1;
- book_choice[j][0] = CalcBits(coderInfo,2,quant,offset,length);
- book_choice[j++][1] = 2;
- book_choice[j][0] = CalcBits(coderInfo,3,quant,offset,length);
- book_choice[j++][1] = 3;
- }
- else if (max_sb_coeff < 3){
- book_choice[j][0] = CalcBits(coderInfo,3,quant,offset,length);
- book_choice[j++][1] = 3;
- book_choice[j][0] = CalcBits(coderInfo,4,quant,offset,length);
- book_choice[j++][1] = 4;
- book_choice[j][0] = CalcBits(coderInfo,5,quant,offset,length);
- book_choice[j++][1] = 5;
- }
- else if (max_sb_coeff < 5){
- book_choice[j][0] = CalcBits(coderInfo,5,quant,offset,length);
- book_choice[j++][1] = 5;
- book_choice[j][0] = CalcBits(coderInfo,6,quant,offset,length);
- book_choice[j++][1] = 6;
- book_choice[j][0] = CalcBits(coderInfo,7,quant,offset,length);
- book_choice[j++][1] = 7;
- }
- else if (max_sb_coeff < 8){
- book_choice[j][0] = CalcBits(coderInfo,7,quant,offset,length);
- book_choice[j++][1] = 7;
- book_choice[j][0] = CalcBits(coderInfo,8,quant,offset,length);
- book_choice[j++][1] = 8;
- book_choice[j][0] = CalcBits(coderInfo,9,quant,offset,length);
- book_choice[j++][1] = 9;
- }
- else if (max_sb_coeff < 13){
- book_choice[j][0] = CalcBits(coderInfo,9,quant,offset,length);
- book_choice[j++][1] = 9;
- book_choice[j][0] = CalcBits(coderInfo,10,quant,offset,length);
- book_choice[j++][1] = 10;
- }
- /* (max_sb_coeff >= 13), choose table 11 */
- else {
- book_choice[j][0] = CalcBits(coderInfo,11,quant,offset,length);
- book_choice[j++][1] = 11;
- }
- }
-
- /* find the minimum bit cost and table number for huffman coding this scalefactor section */
- min_book_choice[i][1] = book_choice[0][1];
- min_book_choice[i][0] = book_choice[0][0];
-
- for(k=1;k<j;k++){
- if (book_choice[k][0] < min_book_choice[i][0]){
- min_book_choice[i][1] = book_choice[k][1];
- min_book_choice[i][0] = book_choice[k][0];
- }
- }
- total_bits_cost += min_book_choice[i][0];
- }
- }
- return(total_bits_cost);
-}
-
-
-
-static int CalculateEscSequence(int input, int *len_esc_sequence)
-/*
- This function takes an element that is larger than 16 and generates the base10 value of the
- equivalent escape sequence. It returns the escape sequence in the variable, 'output'. It
- also passed the length of the escape sequence through the parameter, 'len_esc_sequence'.
-*/
-
-{
- float x,y;
- int output;
- int N;
-
- N = -1;
- y = (float)ABS(input);
- x = y / 16;
-
- while (x >= 1) {
- N++;
- x = x/2;
- }
-
- *len_esc_sequence = 2*N + 5; /* the length of the escape sequence in bits */
-
- output = (int)((pow(2,N) - 1)*pow(2,N+5) + y - pow(2,N+4));
- return(output);
-}
-
-int OutputBits(CoderInfo *coderInfo,
-#ifdef DRM
- int *book, /* we need to change book for VCB11 */
-#else
- int book,
-#endif
- int *quant,
- int offset,
- int length)
-{
- /*
- This function inputs
- - a specific codebook number, 'book'
- - the quantized spectral data, 'quant[][]'
- - the offset into the spectral data to begin scanning, 'offset'
- - the 'length' of the segment to huffman code
- -> therefore, the segment quant[offset] to quant[offset+length-1]
- is huffman coded.
-
- This function outputs
- - the number of bits required, 'bits' using the prescribed codebook, book applied to
- the given segment of spectral data.
-
- There are three parameters that are passed back and forth into this function. data[]
- and len[] are one-dimensional arrays that store the codebook values and their respective
- bit lengths. These are used when packing the data for the bitstream in OutputBits(). The
- index into these arrays is 'coderInfo->spectral_count''. It gets incremented internally in this
- function as counter, then passed to the outside through outside_counter. The next time
- OutputBits() is called, counter starts at the value it left off from the previous call.
-
- */
- int esc_sequence;
- int len_esc;
- int index;
- int bits=0;
- int tmp;
- int codebook,i,j;
- int counter;
-
- /* Set up local pointers to coderInfo elements data and len */
- int* data= coderInfo->data;
- int* len= coderInfo->len;
-#ifdef DRM
- int* num_data = coderInfo->num_data_cw;
- int cur_cw_len;
- int max_esc_sequ = 0;
-#endif
-
- counter = coderInfo->spectral_count;
-
-#ifdef DRM
- switch (*book) {
-#else
- switch (book) {
-#endif
- case 0:
- case INTENSITY_HCB2:
- case INTENSITY_HCB:
-#ifdef DRM
- for(i=offset;i<offset+length;i=i+4){
-#endif
- /* This case also applies to intensity stereo encoding */
- coderInfo->data[counter] = 0;
- coderInfo->len[counter++] = 0;
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
-
-#ifdef DRM
- num_data[coderInfo->cur_cw++] = 1;
- }
-#endif
- return(bits);
- case 1:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
- codebook = huff1[index][LASTINTAB];
- tmp = huff1[index][FIRSTINTAB];
- bits += tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw++] = 1;
- coderInfo->iLenReordSpData += tmp;
- if (tmp > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = tmp;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 2:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
- codebook = huff2[index][LASTINTAB];
- tmp = huff2[index][FIRSTINTAB];
- bits += tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw++] = 1;
- coderInfo->iLenReordSpData += tmp;
- if (tmp > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = tmp;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 3:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
- codebook = huff3[index][LASTINTAB];
- tmp = huff3[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<4;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 4:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
- codebook = huff4[index][LASTINTAB];
- tmp = huff4[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<4;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 5:
- for(i=offset;i<offset+length;i=i+2){
- index = 9*(quant[i]) + (quant[i+1]) + 40;
- codebook = huff5[index][LASTINTAB];
- tmp = huff5[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw++] = 1;
- coderInfo->iLenReordSpData += tmp;
- if (tmp > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = tmp;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 6:
- for(i=offset;i<offset+length;i=i+2){
- index = 9*(quant[i]) + (quant[i+1]) + 40;
- codebook = huff6[index][LASTINTAB];
- tmp = huff6[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw++] = 1;
- coderInfo->iLenReordSpData += tmp;
- if (tmp > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = tmp;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 7:
- for(i=offset;i<offset+length;i=i+2){
- index = 8*ABS(quant[i]) + ABS(quant[i+1]);
- codebook = huff7[index][LASTINTAB];
- tmp = huff7[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<2;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 8:
- for(i=offset;i<offset+length;i=i+2){
- index = 8*ABS(quant[i]) + ABS(quant[i+1]);
- codebook = huff8[index][LASTINTAB];
- tmp = huff8[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<2;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 9:
- for(i=offset;i<offset+length;i=i+2){
- index = 13*ABS(quant[i]) + ABS(quant[i+1]);
- codebook = huff9[index][LASTINTAB];
- tmp = huff9[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<2;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 10:
- for(i=offset;i<offset+length;i=i+2){
- index = 13*ABS(quant[i]) + ABS(quant[i+1]);
- codebook = huff10[index][LASTINTAB];
- tmp = huff10[index][FIRSTINTAB];
- bits = bits + tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
- for(j=0;j<2;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
- return(bits);
- case 11:
- /* First, calculate the indecies into the huffman tables */
- for(i=offset;i<offset+length;i=i+2){
- if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) { /* both codewords were above 16 */
- /* first, code the orignal pair, with the larger value saturated to +/- 16 */
- index = 17*16 + 16;
- }
- else if (ABS(quant[i]) >= 16) { /* the first codeword was above 16, not the second one */
- /* first, code the orignal pair, with the larger value saturated to +/- 16 */
- index = 17*16 + ABS(quant[i+1]);
- }
- else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
- index = 17*ABS(quant[i]) + 16;
- }
- else { /* there were no values above 16, so no escape sequences */
- index = 17*ABS(quant[i]) + ABS(quant[i+1]);
- }
-
- /* write out the codewords */
- tmp = huff11[index][FIRSTINTAB];
- codebook = huff11[index][LASTINTAB];
- bits += tmp;
- data[counter] = codebook;
- len[counter++] = tmp;
-#ifdef DRM
- num_data[coderInfo->cur_cw] = 1;
- cur_cw_len = tmp;
-#endif
-
- /* Take care of the sign bits */
- for(j=0;j<2;j++){
- if(quant[i+j] > 0) { /* send out '0' if a positive value */
- data[counter] = 0;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- } else
- if(quant[i+j] < 0) { /* send out '1' if a negative value */
- data[counter] = 1;
- len[counter++] = 1;
- bits += 1;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += 1;
-#endif
- }
- }
-
- /* write out the escape sequences */
- if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) { /* both codewords were above 16 */
- /* code and transmit the first escape_sequence */
- esc_sequence = CalculateEscSequence(quant[i],&len_esc);
- bits += len_esc;
- data[counter] = esc_sequence;
- len[counter++] = len_esc;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += len_esc;
-
- if (esc_sequence > max_esc_sequ)
- max_esc_sequ = esc_sequence;
-#endif
-
- /* then code and transmit the second escape_sequence */
- esc_sequence = CalculateEscSequence(quant[i+1],&len_esc);
- bits += len_esc;
- data[counter] = esc_sequence;
- len[counter++] = len_esc;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += len_esc;
-
- if (esc_sequence > max_esc_sequ)
- max_esc_sequ = esc_sequence;
-#endif
- }
- else if (ABS(quant[i]) >= 16) { /* the first codeword was above 16, not the second one */
- /* code and transmit the escape_sequence */
- esc_sequence = CalculateEscSequence(quant[i],&len_esc);
- bits += len_esc;
- data[counter] = esc_sequence;
- len[counter++] = len_esc;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += len_esc;
-
- if (esc_sequence > max_esc_sequ)
- max_esc_sequ = esc_sequence;
-#endif
- }
- else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
- /* code and transmit the escape_sequence */
- esc_sequence = CalculateEscSequence(quant[i+1],&len_esc);
- bits += len_esc;
- data[counter] = esc_sequence;
- len[counter++] = len_esc;
-#ifdef DRM
- num_data[coderInfo->cur_cw]++;
- cur_cw_len += len_esc;
-
- if (esc_sequence > max_esc_sequ)
- max_esc_sequ = esc_sequence;
-#endif
- }
-#ifdef DRM
- coderInfo->iLenReordSpData += cur_cw_len;
- if (cur_cw_len > coderInfo->iLenLongestCW)
- coderInfo->iLenLongestCW = cur_cw_len;
-
- coderInfo->cur_cw++;
-#endif
- }
- coderInfo->spectral_count = counter; /* send the current count back to the outside world */
-
-#ifdef DRM
- /* VCB11: check which codebook should be used using max escape sequence */
- /* 8.5.3.1.3, table 157 */
- if (max_esc_sequ <= 15)
- *book = 16;
- else if (max_esc_sequ <= 31)
- *book = 17;
- else if (max_esc_sequ <= 47)
- *book = 18;
- else if (max_esc_sequ <= 63)
- *book = 19;
- else if (max_esc_sequ <= 95)
- *book = 20;
- else if (max_esc_sequ <= 127)
- *book = 21;
- else if (max_esc_sequ <= 159)
- *book = 22;
- else if (max_esc_sequ <= 191)
- *book = 23;
- else if (max_esc_sequ <= 223)
- *book = 24;
- else if (max_esc_sequ <= 255)
- *book = 25;
- else if (max_esc_sequ <= 319)
- *book = 26;
- else if (max_esc_sequ <= 383)
- *book = 27;
- else if (max_esc_sequ <= 511)
- *book = 28;
- else if (max_esc_sequ <= 767)
- *book = 29;
- else if (max_esc_sequ <= 1023)
- *book = 30;
- else if (max_esc_sequ <= 2047)
- *book = 31;
- /* else: codebook 11 -> it is already 11 */
-#endif
-
- return(bits);
- }
- return 0;
-}
-
-int CalcBits(CoderInfo *coderInfo,
- int book,
- int *quant,
- int offset,
- int length)
-{
- /*
- This function inputs
- - a specific codebook number, 'book'
- - the quantized spectral data, 'quant[]'
- - the offset into the spectral data to begin scanning, 'offset'
- - the 'length' of the segment to huffman code
- -> therefore, the segment quant[offset] to quant[offset+length-1]
- is huffman coded.
-
- This function outputs
- - the number of bits required, 'bits' using the prescribed codebook, book applied to
- the given segment of spectral data.
-
- */
-
- int len_esc;
- int index;
- int bits = 0;
- int i, j;
-
- switch (book) {
- case 1:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
- bits += huff1[index][FIRSTINTAB];
- }
- return (bits);
- case 2:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*quant[i] + 9*quant[i+1] + 3*quant[i+2] + quant[i+3] + 40;
- bits += huff2[index][FIRSTINTAB];
- }
- return (bits);
- case 3:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
- bits += huff3[index][FIRSTINTAB];
- for(j=0;j<4;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 4:
- for(i=offset;i<offset+length;i=i+4){
- index = 27*ABS(quant[i]) + 9*ABS(quant[i+1]) + 3*ABS(quant[i+2]) + ABS(quant[i+3]);
- bits += huff4[index][FIRSTINTAB];
- for(j=0;j<4;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 5:
- for(i=offset;i<offset+length;i=i+2){
- index = 9*(quant[i]) + (quant[i+1]) + 40;
- bits += huff5[index][FIRSTINTAB];
- }
- return (bits);
- case 6:
- for(i=offset;i<offset+length;i=i+2){
- index = 9*(quant[i]) + (quant[i+1]) + 40;
- bits += huff6[index][FIRSTINTAB];
- }
- return (bits);
- case 7:
- for(i=offset;i<offset+length;i=i+2){
- index = 8*ABS(quant[i]) + ABS(quant[i+1]);
- bits += huff7[index][FIRSTINTAB];
- for(j=0;j<2;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 8:
- for(i=offset;i<offset+length;i=i+2){
- index = 8*ABS(quant[i]) + ABS(quant[i+1]);
- bits += huff8[index][FIRSTINTAB];
- for(j=0;j<2;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 9:
- for(i=offset;i<offset+length;i=i+2){
- index = 13*ABS(quant[i]) + ABS(quant[i+1]);
- bits += huff9[index][FIRSTINTAB];
- for(j=0;j<2;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 10:
- for(i=offset;i<offset+length;i=i+2){
- index = 13*ABS(quant[i]) + ABS(quant[i+1]);
- bits += huff10[index][FIRSTINTAB];
- for(j=0;j<2;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
- }
- return (bits);
- case 11:
- /* First, calculate the indecies into the huffman tables */
- for(i=offset;i<offset+length;i=i+2){
- if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) { /* both codewords were above 16 */
- /* first, code the orignal pair, with the larger value saturated to +/- 16 */
- index = 17*16 + 16;
- } else if (ABS(quant[i]) >= 16) { /* the first codeword was above 16, not the second one */
- /* first, code the orignal pair, with the larger value saturated to +/- 16 */
- index = 17*16 + ABS(quant[i+1]);
- } else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
- index = 17*ABS(quant[i]) + 16;
- } else { /* there were no values above 16, so no escape sequences */
- index = 17*ABS(quant[i]) + ABS(quant[i+1]);
- }
-
- /* write out the codewords */
- bits += huff11[index][FIRSTINTAB];
-
- /* Take care of the sign bits */
- for(j=0;j<2;j++){
- if(quant[i+j] != 0) bits += 1; /* only for non-zero spectral coefficients */
- }
-
- /* write out the escape sequences */
- if ((ABS(quant[i]) >= 16) && (ABS(quant[i+1]) >= 16)) { /* both codewords were above 16 */
- /* code and transmit the first escape_sequence */
- CalculateEscSequence(quant[i],&len_esc);
- bits += len_esc;
-
- /* then code and transmit the second escape_sequence */
- CalculateEscSequence(quant[i+1],&len_esc);
- bits += len_esc;
- } else if (ABS(quant[i]) >= 16) { /* the first codeword was above 16, not the second one */
- /* code and transmit the escape_sequence */
- CalculateEscSequence(quant[i],&len_esc);
- bits += len_esc;
- } else if (ABS(quant[i+1]) >= 16) { /* the second codeword was above 16, not the first one */
- /* code and transmit the escape_sequence */
- CalculateEscSequence(quant[i+1],&len_esc);
- bits += len_esc;
- }
- }
- return (bits);
- }
- return 0;
-}
-
-int SortBookNumbers(CoderInfo *coderInfo,
- BitStream *bitStream,
- int writeFlag)
-{
- /*
- This function inputs the vector, 'book_vector[]', which is of length MAX_SCFAC_BANDS,
- and contains the optimal huffman tables of each sfb. It returns the vector, 'output_book_vector[]', which
- has it's elements formatted for the encoded bit stream. It's syntax is:
-
- {sect_cb[0], length_segment[0], ... ,sect_cb[num_of_sections], length_segment[num_of_sections]}
-
- The above syntax is true, unless there is an escape sequence. An
- escape sequence occurs when a section is longer than 2 ^ (bit_len)
- long in units of scalefactor bands. Also, the integer returned from
- this function is the number of bits written in the bitstream,
- 'bit_count'.
-
- This function supports both long and short blocks.
- */
-
- int i;
- int repeat_counter;
- int bit_count = 0;
- int previous;
- int max, bit_len/*,sfbs*/;
- int g,band;
- int sect_cb_bits = 4;
-
- /* Set local pointers to coderInfo elements */
- int* book_vector = coderInfo->book_vector;
-
-#ifdef DRM
- sect_cb_bits = 5; /* 5 bits in case of VCB11 */
-#endif
-
- if (coderInfo->block_type == ONLY_SHORT_WINDOW){
- max = 7;
- bit_len = 3;
- } else { /* the block_type is a long,start, or stop window */
- max = 31;
- bit_len = 5;
- }
-
- for (g = 0; g < coderInfo->groups.n; g++) {
- band = g * coderInfo->sfbn;
-
- repeat_counter=1;
-
- previous = book_vector[band];
- if (writeFlag) {
- PutBit(bitStream,book_vector[band],sect_cb_bits);
- }
- bit_count += sect_cb_bits;
-
- for (i = band + 1; i < (band + coderInfo->sfbn); i++) {
-#ifdef DRM
- /* sect_len is not transmitted in case the codebook for a */
- /* section is 11 or in the range of 16 and 31 */
- if ((previous == 11) ||
- ((previous >= 16) && (previous <= 32)))
- {
- if (writeFlag)
- PutBit(bitStream,book_vector[i],sect_cb_bits);
- bit_count += sect_cb_bits;
- previous = book_vector[i];
- repeat_counter=1;
-
- } else
-#endif
- if( (book_vector[i] != previous)) {
- if (writeFlag) {
- PutBit(bitStream,repeat_counter,bit_len);
- }
- bit_count += bit_len;
-
- if (repeat_counter == max){ /* in case you need to terminate an escape sequence */
- if (writeFlag)
- PutBit(bitStream,0,bit_len);
- bit_count += bit_len;
- }
-
- if (writeFlag)
- PutBit(bitStream,book_vector[i],sect_cb_bits);
- bit_count += sect_cb_bits;
- previous = book_vector[i];
- repeat_counter=1;
- }
- /* if the length of the section is longer than the amount of bits available in */
- /* the bitsream, "max", then start up an escape sequence */
- else if ((book_vector[i] == previous) && (repeat_counter == max)) {
- if (writeFlag) {
- PutBit(bitStream,repeat_counter,bit_len);
- }
- bit_count += bit_len;
- repeat_counter = 1;
- }
- else {
- repeat_counter++;
- }
- }
-
-#ifdef DRM
- if (!((previous == 11) || ((previous >= 16) && (previous <= 32))))
-#endif
- {
- if (writeFlag)
- PutBit(bitStream,repeat_counter,bit_len);
- bit_count += bit_len;
-
- if (repeat_counter == max) { /* special case if the last section length is an */
- /* escape sequence */
- if (writeFlag)
- PutBit(bitStream,0,bit_len);
- bit_count += bit_len;
- }
- }
- } /* Bottom of group iteration */
-
- return bit_count;
-}
-
-int WriteScalefactors(CoderInfo *coderInfo,
- BitStream *bitStream,
- int writeFlag)
-
-{
- /* this function takes care of counting the number of bits necessary */
- /* to encode the scalefactors. In addition, if the writeFlag == 1, */
- /* then the scalefactors are written out the bitStream output bit */
- /* stream. it returns k, the number of bits written to the bitstream*/
-
- int i,j,bit_count=0;
- int diff,length,codeword;
- int previous_scale_factor;
- int previous_is_factor; /* Intensity stereo */
- int index = 0;
- int nr_of_sfb_per_group;
-
- /* set local pointer to coderInfo elements */
- int* scale_factors = coderInfo->scale_factor;
-
- if (coderInfo->block_type == ONLY_SHORT_WINDOW) { /* short windows */
- nr_of_sfb_per_group = coderInfo->sfbn;
- } else {
- nr_of_sfb_per_group = coderInfo->sfbn;
- coderInfo->groups.n = 1;
- coderInfo->groups.len[0] = 1;
- }
-
- previous_scale_factor = coderInfo->global_gain;
- previous_is_factor = 0;
-
- for(j=0; j<coderInfo->groups.n; j++){
- for(i=0;i<nr_of_sfb_per_group;i++) {
- /* test to see if any codebooks in a group are zero */
- if ( (coderInfo->book_vector[index]==INTENSITY_HCB) ||
- (coderInfo->book_vector[index]==INTENSITY_HCB2) ) {
- /* only send scalefactors if using non-zero codebooks */
- diff = scale_factors[index] - previous_is_factor;
- if ((diff <= 60)&&(diff >= -60))
- {
- length = huff12[diff+60][FIRSTINTAB];
- }
- else if ( diff > 60 ) // frank 30.Oct.2007 added this because faad2 decoder and QuickTime choke when nothing is written and the codebook says a number is expected.
- {
- diff = 60;
- length = huff12[120][FIRSTINTAB]; //max
- }
- else
- {
- diff = -60;
- length = huff12[0][FIRSTINTAB]; // min
- }
- bit_count+=length;
- previous_is_factor += diff;
- if (writeFlag == 1 ) {
- codeword = huff12[diff+60][LASTINTAB];
- PutBit(bitStream,codeword,length);
- }
- } else if (coderInfo->book_vector[index]) {
- /* only send scalefactors if using non-zero codebooks */
- diff = scale_factors[index] - previous_scale_factor;
- if ((diff <= 60)&&(diff >= -60))
- {
- length = huff12[diff+60][FIRSTINTAB];
- }
- else if ( diff > 60 ) // frank 30.Oct.2007 added this because faad2 decoder and QuickTime choke when nothing is written and the codebook says a number is expected.
- {
- diff = 60;
- length = huff12[120][FIRSTINTAB]; //max
- }
- else
- {
- diff = -60;
- length = huff12[0][FIRSTINTAB]; //min
- }
- bit_count+=length;
- previous_scale_factor += diff;
- if (writeFlag == 1 ) {
- codeword = huff12[diff+60][LASTINTAB];
- PutBit(bitStream,codeword,length);
- }
- }
- index++;
- }
- }
- return bit_count;
-}
-
--- a/libfaac/huffman.h
+++ /dev/null
@@ -1,91 +1,0 @@
-/***********
-
-This software module was originally developed by Dolby
-Laboratories in the course of development of the MPEG-2 AAC/MPEG-4
-Audio standard ISO/IEC13818-7, 14496-1, 2 and 3. This software module is an implementation of a part
-of one or more MPEG-2 AAC/MPEG-4 Audio tools as specified by the
-MPEG-2 aac/MPEG-4 Audio standard. ISO/IEC gives users of the
-MPEG-2aac/MPEG-4 Audio standards free license to this software module
-or modifications thereof for use in hardware or software products
-claiming conformance to the MPEG-2 aac/MPEG-4 Audio standards. Those
-intending to use this software module in hardware or software products
-are advised that this use may infringe existing patents. The original
-developer of this software module, the subsequent
-editors and their companies, and ISO/IEC have no liability for use of
-this software module or modifications thereof in an
-implementation. Copyright is not released for non MPEG-2 aac/MPEG-4
-Audio conforming products. The original developer retains full right to
-use the code for the developer's own purpose, assign or donate the code to a
-third party and to inhibit third party from using the code for non
-MPEG-2 aac/MPEG-4 Audio conforming products. This copyright notice
-must be included in all copies or derivative works. Copyright 1996.
-
-***********/
-/*
- * $Id: huffman.h,v 1.7 2012/03/01 18:34:17 knik Exp $
- */
-
-#ifndef HUFFMAN_H
-#define HUFFMAN_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-
-#include "bitstream.h"
-#include "coder.h"
-
-/* Huffman tables */
-#define MAXINDEX 289
-#define NUMINTAB 2
-#define FIRSTINTAB 0
-#define LASTINTAB 1
-
-#define INTENSITY_HCB 15
-#define INTENSITY_HCB2 14
-
-
-#define ABS(A) ((A) < 0 ? (-A) : (A))
-
-#include <faac.h>
-
-void HuffmanInit(CoderInfo *coderInfo, unsigned int numChannels);
-void HuffmanEnd(CoderInfo *coderInfo, unsigned int numChannels);
-
-int BitSearch(CoderInfo *coderInfo,
- int *quant);
-
-int NoiselessBitCount(CoderInfo *coderInfo,
- int *quant,
- int hop,
- int min_book_choice[112][3]);
-
-int CalcBits(CoderInfo *coderInfo,
- int book,
- int *quant,
- int offset,
- int length);
-
-int OutputBits(CoderInfo *coderInfo,
-#ifdef DRM
- int *book, /* we need to change book for VCB11 */
-#else
- int book,
-#endif
- int *quant,
- int offset,
- int length);
-
-int SortBookNumbers(CoderInfo *coderInfo,
- BitStream *bitStream,
- int writeFlag);
-
-int WriteScalefactors(CoderInfo *coderInfo,
- BitStream *bitStream,
- int writeFlag);
-
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* HUFFMAN_H */
--- a/libfaac/hufftab.h
+++ /dev/null
@@ -1,331 +1,0 @@
-/*
- * FAAC - Freeware Advanced Audio Coder
- * Copyright (C) 2001 Menno Bakker
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
-
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- * $Id: hufftab.h,v 1.3 2001/06/08 18:01:09 menno Exp $
- */
-
-unsigned short huff1[][2] = {
- { 11, 2040},
- { 9, 497},{ 11, 2045},{ 10, 1013},{ 7, 104},{ 10, 1008},
- { 11, 2039},{ 9, 492},{ 11, 2037},{ 10, 1009},{ 7, 114},
- { 10, 1012},{ 7, 116},{ 5, 17},{ 7, 118},{ 9, 491},
- { 7, 108},{ 10, 1014},{ 11, 2044},{ 9, 481},{ 11, 2033},
- { 9, 496},{ 7, 97},{ 9, 502},{ 11, 2034},{ 9, 490},
- { 11, 2043},{ 9, 498},{ 7, 105},{ 9, 493},{ 7, 119},
- { 5, 23},{ 7, 111},{ 9, 486},{ 7, 100},{ 9, 485},
- { 7, 103},{ 5, 21},{ 7, 98},{ 5, 18},{ 1, 0},
- { 5, 20},{ 7, 101},{ 5, 22},{ 7, 109},{ 9, 489},
- { 7, 99},{ 9, 484},{ 7, 107},{ 5, 19},{ 7, 113},
- { 9, 483},{ 7, 112},{ 9, 499},{ 11, 2046},{ 9, 487},
- { 11, 2035},{ 9, 495},{ 7, 96},{ 9, 494},{ 11, 2032},
- { 9, 482},{ 11, 2042},{ 10, 1011},{ 7, 106},{ 9, 488},
- { 7, 117},{ 5, 16},{ 7, 115},{ 9, 500},{ 7, 110},
- { 10, 1015},{ 11, 2038},{ 9, 480},{ 11, 2041},{ 10, 1010},
- { 7, 102},{ 9, 501},{ 11, 2047},{ 9, 503},{ 11, 2036}
- };
-unsigned short huff2[][2] = {
- { 9, 499},
- { 7, 111},{ 9, 509},{ 8, 235},{ 6, 35},{ 8, 234},
- { 9, 503},{ 8, 232},{ 9, 506},{ 8, 242},{ 6, 45},
- { 7, 112},{ 6, 32},{ 5, 6},{ 6, 43},{ 7, 110},
- { 6, 40},{ 8, 233},{ 9, 505},{ 7, 102},{ 8, 248},
- { 8, 231},{ 6, 27},{ 8, 241},{ 9, 500},{ 7, 107},
- { 9, 501},{ 8, 236},{ 6, 42},{ 7, 108},{ 6, 44},
- { 5, 10},{ 6, 39},{ 7, 103},{ 6, 26},{ 8, 245},
- { 6, 36},{ 5, 8},{ 6, 31},{ 5, 9},{ 3, 0},
- { 5, 7},{ 6, 29},{ 5, 11},{ 6, 48},{ 8, 239},
- { 6, 28},{ 7, 100},{ 6, 30},{ 5, 12},{ 6, 41},
- { 8, 243},{ 6, 47},{ 8, 240},{ 9, 508},{ 7, 113},
- { 9, 498},{ 8, 244},{ 6, 33},{ 8, 230},{ 8, 247},
- { 7, 104},{ 9, 504},{ 8, 238},{ 6, 34},{ 7, 101},
- { 6, 49},{ 4, 2},{ 6, 38},{ 8, 237},{ 6, 37},
- { 7, 106},{ 9, 507},{ 7, 114},{ 9, 510},{ 7, 105},
- { 6, 46},{ 8, 246},{ 9, 511},{ 7, 109},{ 9, 502}
- };
-unsigned short huff3[][2] = {
- { 1, 0},
- { 4, 9},{ 8, 239},{ 4, 11},{ 5, 25},{ 8, 240},
- { 9, 491},{ 9, 486},{ 10, 1010},{ 4, 10},{ 6, 53},
- { 9, 495},{ 6, 52},{ 6, 55},{ 9, 489},{ 9, 493},
- { 9, 487},{ 10, 1011},{ 9, 494},{ 10, 1005},{ 13, 8186},
- { 9, 492},{ 9, 498},{ 11, 2041},{ 11, 2040},{ 10, 1016},
- { 12, 4088},{ 4, 8},{ 6, 56},{ 10, 1014},{ 6, 54},
- { 7, 117},{ 10, 1009},{ 10, 1003},{ 10, 1004},{ 12, 4084},
- { 5, 24},{ 7, 118},{ 11, 2036},{ 6, 57},{ 7, 116},
- { 10, 1007},{ 9, 499},{ 9, 500},{ 11, 2038},{ 9, 488},
- { 10, 1002},{ 13, 8188},{ 8, 242},{ 9, 497},{ 12, 4091},
- { 10, 1013},{ 11, 2035},{ 12, 4092},{ 8, 238},{ 10, 1015},
- { 15, 32766},{ 9, 496},{ 11, 2037},{ 15, 32765},{ 13, 8187},
- { 14, 16378},{ 16, 65535},{ 8, 241},{ 10, 1008},{ 14, 16380},
- { 9, 490},{ 10, 1006},{ 14, 16379},{ 12, 4086},{ 12, 4090},
- { 15, 32764},{ 11, 2034},{ 12, 4085},{ 16, 65534},{ 10, 1012},
- { 11, 2039},{ 15, 32763},{ 12, 4087},{ 12, 4089},{ 15, 32762}
- };
-unsigned short huff4[][2] = {
- { 4, 7},
- { 5, 22},{ 8, 246},{ 5, 24},{ 4, 8},{ 8, 239},
- { 9, 495},{ 8, 243},{ 11, 2040},{ 5, 25},{ 5, 23},
- { 8, 237},{ 5, 21},{ 4, 1},{ 8, 226},{ 8, 240},
- { 7, 112},{ 10, 1008},{ 9, 494},{ 8, 241},{ 11, 2042},
- { 8, 238},{ 8, 228},{ 10, 1010},{ 11, 2038},{ 10, 1007},
- { 11, 2045},{ 4, 5},{ 5, 20},{ 8, 242},{ 4, 9},
- { 4, 4},{ 8, 229},{ 8, 244},{ 8, 232},{ 10, 1012},
- { 4, 6},{ 4, 2},{ 8, 231},{ 4, 3},{ 4, 0},
- { 7, 107},{ 8, 227},{ 7, 105},{ 9, 499},{ 8, 235},
- { 8, 230},{ 10, 1014},{ 7, 110},{ 7, 106},{ 9, 500},
- { 10, 1004},{ 9, 496},{ 10, 1017},{ 8, 245},{ 8, 236},
- { 11, 2043},{ 8, 234},{ 7, 111},{ 10, 1015},{ 11, 2041},
- { 10, 1011},{ 12, 4095},{ 8, 233},{ 7, 109},{ 10, 1016},
- { 7, 108},{ 7, 104},{ 9, 501},{ 10, 1006},{ 9, 498},
- { 11, 2036},{ 11, 2039},{ 10, 1009},{ 12, 4094},{ 10, 1005},
- { 9, 497},{ 11, 2037},{ 11, 2046},{ 10, 1013},{ 11, 2044}
- };
-unsigned short huff5[][2] = {
- { 13, 8191},
- { 12, 4087},{ 11, 2036},{ 11, 2024},{ 10, 1009},{ 11, 2030},
- { 11, 2041},{ 12, 4088},{ 13, 8189},{ 12, 4093},{ 11, 2033},
- { 10, 1000},{ 9, 488},{ 8, 240},{ 9, 492},{ 10, 1006},
- { 11, 2034},{ 12, 4090},{ 12, 4084},{ 10, 1007},{ 9, 498},
- { 8, 232},{ 7, 112},{ 8, 236},{ 9, 496},{ 10, 1002},
- { 11, 2035},{ 11, 2027},{ 9, 491},{ 8, 234},{ 5, 26},
- { 4, 8},{ 5, 25},{ 8, 238},{ 9, 495},{ 11, 2029},
- { 10, 1008},{ 8, 242},{ 7, 115},{ 4, 11},{ 1, 0},
- { 4, 10},{ 7, 113},{ 8, 243},{ 11, 2025},{ 11, 2031},
- { 9, 494},{ 8, 239},{ 5, 24},{ 4, 9},{ 5, 27},
- { 8, 235},{ 9, 489},{ 11, 2028},{ 11, 2038},{ 10, 1003},
- { 9, 499},{ 8, 237},{ 7, 114},{ 8, 233},{ 9, 497},
- { 10, 1005},{ 11, 2039},{ 12, 4086},{ 11, 2032},{ 10, 1001},
- { 9, 493},{ 8, 241},{ 9, 490},{ 10, 1004},{ 11, 2040},
- { 12, 4089},{ 13, 8188},{ 12, 4092},{ 12, 4085},{ 11, 2026},
- { 10, 1011},{ 10, 1010},{ 11, 2037},{ 12, 4091},{ 13, 8190}
- };
-unsigned short huff6[][2] = {
- { 11, 2046},
- { 10, 1021},{ 9, 497},{ 9, 491},{ 9, 500},{ 9, 490},
- { 9, 496},{ 10, 1020},{ 11, 2045},{ 10, 1014},{ 9, 485},
- { 8, 234},{ 7, 108},{ 7, 113},{ 7, 104},{ 8, 240},
- { 9, 486},{ 10, 1015},{ 9, 499},{ 8, 239},{ 6, 50},
- { 6, 39},{ 6, 40},{ 6, 38},{ 6, 49},{ 8, 235},
- { 9, 503},{ 9, 488},{ 7, 111},{ 6, 46},{ 4, 8},
- { 4, 4},{ 4, 6},{ 6, 41},{ 7, 107},{ 9, 494},
- { 9, 495},{ 7, 114},{ 6, 45},{ 4, 2},{ 4, 0},
- { 4, 3},{ 6, 47},{ 7, 115},{ 9, 506},{ 9, 487},
- { 7, 110},{ 6, 43},{ 4, 7},{ 4, 1},{ 4, 5},
- { 6, 44},{ 7, 109},{ 9, 492},{ 9, 505},{ 8, 238},
- { 6, 48},{ 6, 36},{ 6, 42},{ 6, 37},{ 6, 51},
- { 8, 236},{ 9, 498},{ 10, 1016},{ 9, 484},{ 8, 237},
- { 7, 106},{ 7, 112},{ 7, 105},{ 7, 116},{ 8, 241},
- { 10, 1018},{ 11, 2047},{ 10, 1017},{ 9, 502},{ 9, 493},
- { 9, 504},{ 9, 489},{ 9, 501},{ 10, 1019},{ 11, 2044}
- };
-unsigned short huff7[][2] = {
- { 1, 0},
- { 3, 5},{ 6, 55},{ 7, 116},{ 8, 242},{ 9, 491},
- { 10, 1005},{ 11, 2039},{ 3, 4},{ 4, 12},{ 6, 53},
- { 7, 113},{ 8, 236},{ 8, 238},{ 9, 494},{ 9, 501},
- { 6, 54},{ 6, 52},{ 7, 114},{ 8, 234},{ 8, 241},
- { 9, 489},{ 9, 499},{ 10, 1013},{ 7, 115},{ 7, 112},
- { 8, 235},{ 8, 240},{ 9, 497},{ 9, 496},{ 10, 1004},
- { 10, 1018},{ 8, 243},{ 8, 237},{ 9, 488},{ 9, 495},
- { 10, 1007},{ 10, 1009},{ 10, 1017},{ 11, 2043},{ 9, 493},
- { 8, 239},{ 9, 490},{ 9, 498},{ 10, 1011},{ 10, 1016},
- { 11, 2041},{ 11, 2044},{ 10, 1006},{ 9, 492},{ 9, 500},
- { 10, 1012},{ 10, 1015},{ 11, 2040},{ 12, 4093},{ 12, 4094},
- { 11, 2038},{ 10, 1008},{ 10, 1010},{ 10, 1014},{ 11, 2042},
- { 11, 2045},{ 12, 4092},{ 12, 4095}
- };
-unsigned short huff8[][2] = {
- { 5, 14},
- { 4, 5},{ 5, 16},{ 6, 48},{ 7, 111},{ 8, 241},
- { 9, 506},{ 10, 1022},{ 4, 3},{ 3, 0},{ 4, 4},
- { 5, 18},{ 6, 44},{ 7, 106},{ 7, 117},{ 8, 248},
- { 5, 15},{ 4, 2},{ 4, 6},{ 5, 20},{ 6, 46},
- { 7, 105},{ 7, 114},{ 8, 245},{ 6, 47},{ 5, 17},
- { 5, 19},{ 6, 42},{ 6, 50},{ 7, 108},{ 8, 236},
- { 8, 250},{ 7, 113},{ 6, 43},{ 6, 45},{ 6, 49},
- { 7, 109},{ 7, 112},{ 8, 242},{ 9, 505},{ 8, 239},
- { 7, 104},{ 6, 51},{ 7, 107},{ 7, 110},{ 8, 238},
- { 8, 249},{ 10, 1020},{ 9, 504},{ 7, 116},{ 7, 115},
- { 8, 237},{ 8, 240},{ 8, 246},{ 9, 502},{ 9, 509},
- { 10, 1021},{ 8, 243},{ 8, 244},{ 8, 247},{ 9, 503},
- { 9, 507},{ 9, 508},{ 10, 1023}
- };
-unsigned short huff9[][2] = {
- { 1, 0},
- { 3, 5},{ 6, 55},{ 8, 231},{ 9, 478},{ 10, 974},
- { 10, 985},{ 11, 1992},{ 11, 1997},{ 12, 4040},{ 12, 4061},
- { 13, 8164},{ 13, 8172},{ 3, 4},{ 4, 12},{ 6, 53},
- { 7, 114},{ 8, 234},{ 8, 237},{ 9, 482},{ 10, 977},
- { 10, 979},{ 10, 992},{ 11, 2008},{ 12, 4047},{ 12, 4053},
- { 6, 54},{ 6, 52},{ 7, 113},{ 8, 232},{ 8, 236},
- { 9, 481},{ 10, 975},{ 10, 989},{ 10, 987},{ 11, 2000},
- { 12, 4039},{ 12, 4052},{ 12, 4068},{ 8, 230},{ 7, 112},
- { 8, 233},{ 9, 477},{ 9, 483},{ 10, 978},{ 10, 988},
- { 11, 1996},{ 11, 1994},{ 11, 2014},{ 12, 4056},{ 12, 4074},
- { 13, 8155},{ 9, 479},{ 8, 235},{ 9, 476},{ 9, 486},
- { 10, 981},{ 10, 990},{ 11, 1995},{ 11, 2013},{ 11, 2012},
- { 12, 4045},{ 12, 4066},{ 12, 4071},{ 13, 8161},{ 10, 976},
- { 9, 480},{ 9, 484},{ 10, 982},{ 11, 1989},{ 11, 2001},
- { 11, 2011},{ 12, 4050},{ 11, 2016},{ 12, 4057},{ 12, 4075},
- { 13, 8163},{ 13, 8169},{ 11, 1988},{ 9, 485},{ 10, 983},
- { 11, 1990},{ 11, 1999},{ 11, 2010},{ 12, 4043},{ 12, 4058},
- { 12, 4067},{ 12, 4073},{ 13, 8166},{ 13, 8179},{ 13, 8183},
- { 11, 2003},{ 10, 984},{ 10, 993},{ 11, 2004},{ 11, 2009},
- { 12, 4051},{ 12, 4062},{ 13, 8157},{ 13, 8153},{ 13, 8162},
- { 13, 8170},{ 13, 8177},{ 13, 8182},{ 11, 2002},{ 10, 980},
- { 10, 986},{ 11, 1991},{ 11, 2007},{ 11, 2018},{ 12, 4046},
- { 12, 4059},{ 13, 8152},{ 13, 8174},{ 14, 16368},{ 13, 8180},
- { 14, 16370},{ 11, 2017},{ 10, 991},{ 11, 1993},{ 11, 2006},
- { 12, 4042},{ 12, 4048},{ 12, 4069},{ 12, 4070},{ 13, 8171},
- { 13, 8175},{ 14, 16371},{ 14, 16372},{ 14, 16373},{ 12, 4064},
- { 11, 1998},{ 11, 2005},{ 12, 4038},{ 12, 4049},{ 12, 4065},
- { 13, 8160},{ 13, 8168},{ 13, 8176},{ 14, 16369},{ 14, 16376},
- { 14, 16374},{ 15, 32764},{ 12, 4072},{ 11, 2015},{ 12, 4041},
- { 12, 4055},{ 12, 4060},{ 13, 8156},{ 13, 8159},{ 13, 8173},
- { 13, 8181},{ 14, 16377},{ 14, 16379},{ 15, 32765},{ 15, 32766},
- { 13, 8167},{ 12, 4044},{ 12, 4054},{ 12, 4063},{ 13, 8158},
- { 13, 8154},{ 13, 8165},{ 13, 8178},{ 14, 16378},{ 14, 16375},
- { 14, 16380},{ 14, 16381},{ 15, 32767}
- };
-unsigned short huff10[][2] = {
- { 6, 34},
- { 5, 8},{ 6, 29},{ 6, 38},{ 7, 95},{ 8, 211},
- { 9, 463},{ 10, 976},{ 10, 983},{ 10, 1005},{ 11, 2032},
- { 11, 2038},{ 12, 4093},{ 5, 7},{ 4, 0},{ 4, 1},
- { 5, 9},{ 6, 32},{ 7, 84},{ 7, 96},{ 8, 213},
- { 8, 220},{ 9, 468},{ 10, 973},{ 10, 990},{ 11, 2023},
- { 6, 28},{ 4, 2},{ 5, 6},{ 5, 12},{ 6, 30},
- { 6, 40},{ 7, 91},{ 8, 205},{ 8, 217},{ 9, 462},
- { 9, 476},{ 10, 985},{ 10, 1009},{ 6, 37},{ 5, 11},
- { 5, 10},{ 5, 13},{ 6, 36},{ 7, 87},{ 7, 97},
- { 8, 204},{ 8, 221},{ 9, 460},{ 9, 478},{ 10, 979},
- { 10, 999},{ 7, 93},{ 6, 33},{ 6, 31},{ 6, 35},
- { 6, 39},{ 7, 89},{ 7, 100},{ 8, 216},{ 8, 223},
- { 9, 466},{ 9, 482},{ 10, 989},{ 10, 1006},{ 8, 209},
- { 7, 85},{ 6, 41},{ 7, 86},{ 7, 88},{ 7, 98},
- { 8, 206},{ 8, 224},{ 8, 226},{ 9, 474},{ 10, 980},
- { 10, 995},{ 11, 2027},{ 9, 457},{ 7, 94},{ 7, 90},
- { 7, 92},{ 7, 99},{ 8, 202},{ 8, 218},{ 9, 455},
- { 9, 458},{ 9, 480},{ 10, 987},{ 10, 1000},{ 11, 2028},
- { 9, 483},{ 8, 210},{ 8, 203},{ 8, 208},{ 8, 215},
- { 8, 219},{ 9, 454},{ 9, 469},{ 9, 472},{ 10, 970},
- { 10, 986},{ 11, 2026},{ 11, 2033},{ 9, 481},{ 8, 212},
- { 8, 207},{ 8, 214},{ 8, 222},{ 8, 225},{ 9, 464},
- { 9, 470},{ 10, 977},{ 10, 981},{ 10, 1010},{ 11, 2030},
- { 11, 2043},{ 10, 1001},{ 9, 461},{ 9, 456},{ 9, 459},
- { 9, 465},{ 9, 471},{ 9, 479},{ 10, 975},{ 10, 992},
- { 10, 1007},{ 11, 2022},{ 11, 2040},{ 12, 4090},{ 10, 1003},
- { 9, 477},{ 9, 467},{ 9, 473},{ 9, 475},{ 10, 978},
- { 10, 972},{ 10, 988},{ 10, 1002},{ 11, 2029},{ 11, 2035},
- { 11, 2041},{ 12, 4089},{ 11, 2034},{ 10, 974},{ 9, 484},
- { 10, 971},{ 10, 984},{ 10, 982},{ 10, 994},{ 10, 997},
- { 11, 2024},{ 11, 2036},{ 11, 2037},{ 11, 2039},{ 12, 4091},
- { 11, 2042},{ 10, 1004},{ 10, 991},{ 10, 993},{ 10, 996},
- { 10, 998},{ 10, 1008},{ 11, 2025},{ 11, 2031},{ 12, 4088},
- { 12, 4094},{ 12, 4092},{ 12, 4095}
- };
-unsigned short huff11[][2] = {
- { 4, 0},
- { 5, 6},{ 6, 25},{ 7, 61},{ 8, 156},{ 8, 198},
- { 9, 423},{ 10, 912},{ 10, 962},{ 10, 991},{ 11, 2022},
- { 11, 2035},{ 12, 4091},{ 11, 2028},{ 12, 4090},{ 12, 4094},
- { 10, 910},{ 5, 5},{ 4, 1},{ 5, 8},{ 6, 20},
- { 7, 55},{ 7, 66},{ 8, 146},{ 8, 175},{ 9, 401},
- { 9, 421},{ 9, 437},{ 10, 926},{ 10, 960},{ 10, 930},
- { 10, 973},{ 11, 2006},{ 8, 174},{ 6, 23},{ 5, 7},
- { 5, 9},{ 6, 24},{ 7, 57},{ 7, 64},{ 8, 142},
- { 8, 163},{ 8, 184},{ 9, 409},{ 9, 428},{ 9, 449},
- { 10, 945},{ 10, 918},{ 10, 958},{ 10, 970},{ 8, 157},
- { 7, 60},{ 6, 21},{ 6, 22},{ 6, 26},{ 7, 59},
- { 7, 68},{ 8, 145},{ 8, 165},{ 8, 190},{ 9, 406},
- { 9, 430},{ 9, 441},{ 10, 929},{ 10, 913},{ 10, 933},
- { 10, 981},{ 8, 148},{ 8, 154},{ 7, 54},{ 7, 56},
- { 7, 58},{ 7, 65},{ 8, 140},{ 8, 155},{ 8, 176},
- { 8, 195},{ 9, 414},{ 9, 427},{ 9, 444},{ 10, 927},
- { 10, 911},{ 10, 937},{ 10, 975},{ 8, 147},{ 8, 191},
- { 7, 62},{ 7, 63},{ 7, 67},{ 7, 69},{ 8, 158},
- { 8, 167},{ 8, 185},{ 9, 404},{ 9, 418},{ 9, 442},
- { 9, 451},{ 10, 934},{ 10, 935},{ 10, 955},{ 10, 980},
- { 8, 159},{ 9, 416},{ 8, 143},{ 8, 141},{ 8, 144},
- { 8, 152},{ 8, 166},{ 8, 182},{ 8, 196},{ 9, 415},
- { 9, 431},{ 9, 447},{ 10, 921},{ 10, 959},{ 10, 948},
- { 10, 969},{ 10, 999},{ 8, 168},{ 9, 438},{ 8, 171},
- { 8, 164},{ 8, 170},{ 8, 178},{ 8, 194},{ 8, 197},
- { 9, 408},{ 9, 420},{ 9, 440},{ 10, 908},{ 10, 932},
- { 10, 964},{ 10, 966},{ 10, 989},{ 10, 1000},{ 8, 173},
- { 10, 943},{ 9, 402},{ 8, 189},{ 8, 188},{ 9, 398},
- { 9, 407},{ 9, 410},{ 9, 419},{ 9, 433},{ 10, 909},
- { 10, 920},{ 10, 951},{ 10, 979},{ 10, 977},{ 10, 987},
- { 11, 2013},{ 8, 180},{ 10, 990},{ 9, 425},{ 9, 411},
- { 9, 412},{ 9, 417},{ 9, 426},{ 9, 429},{ 9, 435},
- { 10, 907},{ 10, 946},{ 10, 952},{ 10, 974},{ 10, 993},
- { 10, 992},{ 11, 2002},{ 11, 2021},{ 8, 183},{ 11, 2019},
- { 9, 443},{ 9, 424},{ 9, 422},{ 9, 432},{ 9, 434},
- { 9, 439},{ 10, 923},{ 10, 922},{ 10, 954},{ 10, 949},
- { 10, 982},{ 11, 2007},{ 10, 996},{ 11, 2008},{ 11, 2026},
- { 8, 186},{ 11, 2024},{ 10, 928},{ 9, 445},{ 9, 436},
- { 10, 906},{ 9, 452},{ 10, 914},{ 10, 938},{ 10, 944},
- { 10, 956},{ 10, 983},{ 11, 2004},{ 11, 2012},{ 11, 2011},
- { 11, 2005},{ 11, 2032},{ 8, 193},{ 11, 2043},{ 10, 968},
- { 10, 931},{ 10, 917},{ 10, 925},{ 10, 940},{ 10, 942},
- { 10, 965},{ 10, 984},{ 10, 994},{ 10, 998},{ 11, 2020},
- { 11, 2023},{ 11, 2016},{ 11, 2025},{ 11, 2039},{ 9, 400},
- { 11, 2034},{ 10, 915},{ 9, 446},{ 9, 448},{ 10, 916},
- { 10, 919},{ 10, 941},{ 10, 963},{ 10, 961},{ 10, 978},
- { 11, 2010},{ 11, 2009},{ 11, 2015},{ 11, 2027},{ 11, 2036},
- { 11, 2042},{ 9, 405},{ 11, 2040},{ 10, 957},{ 10, 924},
- { 10, 939},{ 10, 936},{ 10, 947},{ 10, 953},{ 10, 976},
- { 10, 995},{ 10, 997},{ 11, 2018},{ 11, 2014},{ 11, 2029},
- { 11, 2033},{ 11, 2041},{ 11, 2044},{ 9, 403},{ 12, 4093},
- { 10, 988},{ 10, 950},{ 10, 967},{ 10, 972},{ 10, 971},
- { 10, 985},{ 10, 986},{ 11, 2003},{ 11, 2017},{ 11, 2030},
- { 11, 2031},{ 11, 2037},{ 11, 2038},{ 12, 4092},{ 12, 4095},
- { 9, 413},{ 9, 450},{ 8, 181},{ 8, 161},{ 8, 150},
- { 8, 151},{ 8, 149},{ 8, 153},{ 8, 160},{ 8, 162},
- { 8, 172},{ 8, 169},{ 8, 177},{ 8, 179},{ 8, 187},
- { 8, 192},{ 9, 399},{ 5, 4}
- };
-unsigned int huff12[][2] = {
- { 18, 262120},
- { 18, 262118},{ 18, 262119},{ 18, 262117},{ 19, 524277},{ 19, 524273},
- { 19, 524269},{ 19, 524278},{ 19, 524270},{ 19, 524271},{ 19, 524272},
- { 19, 524284},{ 19, 524285},{ 19, 524287},{ 19, 524286},{ 19, 524279},
- { 19, 524280},{ 19, 524283},{ 19, 524281},{ 18, 262116},{ 19, 524282},
- { 18, 262115},{ 17, 131055},{ 17, 131056},{ 16, 65525},{ 17, 131054},
- { 16, 65522},{ 16, 65523},{ 16, 65524},{ 16, 65521},{ 15, 32758},
- { 15, 32759},{ 14, 16377},{ 14, 16373},{ 14, 16375},{ 14, 16371},
- { 14, 16374},{ 14, 16370},{ 13, 8183},{ 13, 8181},{ 12, 4089},
- { 12, 4087},{ 12, 4086},{ 11, 2041},{ 12, 4084},{ 11, 2040},
- { 10, 1017},{ 10, 1015},{ 10, 1013},{ 9, 504},{ 9, 503},
- { 8, 250},{ 8, 248},{ 8, 246},{ 7, 121},{ 6, 58},
- { 6, 56},{ 5, 26},{ 4, 11},{ 3, 4},{ 1, 0},
- { 4, 10},{ 4, 12},{ 5, 27},{ 6, 57},{ 6, 59},
- { 7, 120},{ 7, 122},{ 8, 247},{ 8, 249},{ 9, 502},
- { 9, 505},{ 10, 1012},{ 10, 1014},{ 10, 1016},{ 11, 2037},
- { 11, 2036},{ 11, 2038},{ 11, 2039},{ 12, 4085},{ 12, 4088},
- { 13, 8180},{ 13, 8182},{ 13, 8184},{ 14, 16376},{ 14, 16372},
- { 16, 65520},{ 15, 32756},{ 16, 65526},{ 15, 32757},{ 18, 262114},
- { 19, 524249},{ 19, 524250},{ 19, 524251},{ 19, 524252},{ 19, 524253},
- { 19, 524254},{ 19, 524248},{ 19, 524242},{ 19, 524243},{ 19, 524244},
- { 19, 524245},{ 19, 524246},{ 19, 524274},{ 19, 524255},{ 19, 524263},
- { 19, 524264},{ 19, 524265},{ 19, 524266},{ 19, 524267},{ 19, 524262},
- { 19, 524256},{ 19, 524257},{ 19, 524258},{ 19, 524259},{ 19, 524260},
- { 19, 524261},{ 19, 524247},{ 19, 524268},{ 19, 524276},{ 19, 524275}
- };
-
-