diff --git a/libfaad/codebook/hcb.h b/libfaad/codebook/hcb.h index 63c3d9a4..e4245eef 100644 --- a/libfaad/codebook/hcb.h +++ b/libfaad/codebook/hcb.h @@ -78,6 +78,9 @@ extern "C" { #define INTENSITY_HCB2 14 #define INTENSITY_HCB 15 +/* Maximal accessed codebook index. */ +#define LAST_CB_IDX 11 + /* 1st step table */ typedef struct { @@ -115,16 +118,6 @@ typedef struct int8_t data[2]; } hcb_bin_pair; -hcb *hcb_table[]; -hcb_2_quad *hcb_2_quad_table[]; -hcb_2_pair *hcb_2_pair_table[]; -hcb_bin_pair *hcb_bin_table[]; -uint8_t hcbN[]; -uint8_t unsigned_cb[]; -int hcb_2_quad_table_size[]; -int hcb_2_pair_table_size[]; -int hcb_bin_table_size[]; - #include "codebook/hcb_1.h" #include "codebook/hcb_2.h" #include "codebook/hcb_3.h" @@ -138,7 +131,6 @@ int hcb_bin_table_size[]; #include "codebook/hcb_11.h" #include "codebook/hcb_sf.h" - #ifdef __cplusplus } #endif diff --git a/libfaad/codebook/hcb_1.h b/libfaad/codebook/hcb_1.h index 86c7159a..bc9cf156 100644 --- a/libfaad/codebook/hcb_1.h +++ b/libfaad/codebook/hcb_1.h @@ -36,7 +36,8 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb1_1[] = { +static hcb hcb1_1[32] = { + /* 1 bit codeword */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, { /* */ 0, 0 }, @@ -53,6 +54,8 @@ static hcb hcb1_1[] = { { /* */ 0, 0 }, { /* */ 0, 0 }, { /* */ 0, 0 }, + + /* 5 bit codewords */ { /* 10000 */ 1, 0 }, { /* 10001 */ 2, 0 }, { /* 10010 */ 3, 0 }, @@ -75,13 +78,15 @@ static hcb hcb1_1[] = { /* 9/10/11 bit codewords */ { /* 11111 */ 49, 6 } + + /* Size of second level table is 49 + 64 = 113 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_quad hcb1_2[] = { +static hcb_2_quad hcb1_2[113] = { /* 1 bit codeword */ { 1, 0, 0, 0, 0 }, diff --git a/libfaad/codebook/hcb_10.h b/libfaad/codebook/hcb_10.h index d31dc81a..1c9cb00e 100644 --- a/libfaad/codebook/hcb_10.h +++ b/libfaad/codebook/hcb_10.h @@ -36,7 +36,7 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb10_1[] = { +static hcb hcb10_1[64] = { /* 4 bit codewords */ { /* 000000 */ 0, 0 }, { /* */ 0, 0 }, @@ -112,13 +112,15 @@ static hcb hcb10_1[] = { { /* 111110 */ 129, 4 }, /* 10/11/12 bit codewords */ { /* 111111 */ 145, 6 } + + /* Size of second level table is 145 + 64 = 209 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_pair hcb10_2[] = { +static hcb_2_pair hcb10_2[209] = { /* 4 bit codewords */ { 4, 1, 1 }, { 4, 1, 2 }, diff --git a/libfaad/codebook/hcb_11.h b/libfaad/codebook/hcb_11.h index e181735d..6ad70a97 100644 --- a/libfaad/codebook/hcb_11.h +++ b/libfaad/codebook/hcb_11.h @@ -36,7 +36,7 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb11_1[] = { +static hcb hcb11_1[32] = { /* 4 bits */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, @@ -92,13 +92,15 @@ static hcb hcb11_1[] = { /* 10/11/12 bits */ { /* 11111 */ 246, 7 } + + /* Size of second level table is 246 + 128 = 374 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_pair hcb11_2[] = { +static hcb_2_pair hcb11_2[374] = { /* 4 */ { 4, 0, 0 }, { 4, 1, 1 }, diff --git a/libfaad/codebook/hcb_2.h b/libfaad/codebook/hcb_2.h index 0d9fb517..d9ca6fa5 100644 --- a/libfaad/codebook/hcb_2.h +++ b/libfaad/codebook/hcb_2.h @@ -36,13 +36,18 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb2_1[] = { +static hcb hcb2_1[32] = { + /* 3 bit codeword */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, { /* */ 0, 0 }, - { /* */ 0, 0 }, + { /* 00011 */ 0, 0 }, + + /* 4 bit codeword */ { /* 00100 */ 1, 0 }, - { /* */ 1, 0 }, + { /* 00101 */ 1, 0 }, + + /* 5 bit codewords */ { /* 00110 */ 2, 0 }, { /* 00111 */ 3, 0 }, { /* 01000 */ 4, 0 }, @@ -79,13 +84,15 @@ static hcb hcb2_1[] = { /* 8/9 bit codewords */ { /* 11111 */ 69, 4 } + + /* Size of second level table is 69 + 16 = 85 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_quad hcb2_2[] = { +static hcb_2_quad hcb2_2[85] = { /* 3 bit codeword */ { 3, 0, 0, 0, 0 }, diff --git a/libfaad/codebook/hcb_3.h b/libfaad/codebook/hcb_3.h index 6bcf66cc..c120a60f 100644 --- a/libfaad/codebook/hcb_3.h +++ b/libfaad/codebook/hcb_3.h @@ -31,166 +31,166 @@ /* Binary search huffman table HCB_3 */ -static hcb_bin_quad hcb3[] = { - { /* 0 */ 0, { 1, 2, 0, 0 } }, - { /* 1 */ 1, { 0, 0, 0, 0 } }, /* 0 */ - { /* 2 */ 0, { 1, 2, 0, 0 } }, - { /* 3 */ 0, { 2, 3, 0, 0 } }, - { /* 4 */ 0, { 3, 4, 0, 0 } }, - { /* 5 */ 0, { 4, 5, 0, 0 } }, - { /* 6 */ 0, { 5, 6, 0, 0 } }, - { /* 7 */ 0, { 6, 7, 0, 0 } }, - { /* 8 */ 0, { 7, 8, 0, 0 } }, - { /* 9 */ 1, { 1, 0, 0, 0 } }, /* 1000 */ - { /* 10 */ 1, { 0, 0, 0, 1 } }, /* 1001 */ - { /* 11 */ 1, { 0, 1, 0, 0 } }, /* 1010 */ - { /* 12 */ 1, { 0, 0, 1, 0 } }, /* 1011 */ - { /* 13 */ 0, { 4, 5, 0, 0 } }, - { /* 14 */ 0, { 5, 6, 0, 0 } }, - { /* 15 */ 0, { 6, 7, 0, 0 } }, - { /* 16 */ 0, { 7, 8, 0, 0 } }, - { /* 17 */ 1, { 1, 1, 0, 0 } }, - { /* 18 */ 1, { 0, 0, 1, 1 } }, - { /* 19 */ 0, { 6, 7, 0, 0 } }, - { /* 20 */ 0, { 7, 8, 0, 0 } }, - { /* 21 */ 0, { 8, 9, 0, 0 } }, - { /* 22 */ 0, { 9, 10, 0, 0 } }, - { /* 23 */ 0, { 10, 11, 0, 0 } }, - { /* 24 */ 0, { 11, 12, 0, 0 } }, - { /* 25 */ 1, { 0, 1, 1, 0 } }, /* 110100 */ - { /* 26 */ 1, { 0, 1, 0, 1 } }, /* 110101 */ - { /* 27 */ 1, { 1, 0, 1, 0 } }, /* 110110 */ - { /* 28 */ 1, { 0, 1, 1, 1 } }, /* 110111 */ - { /* 29 */ 1, { 1, 0, 0, 1 } }, /* 111000 */ - { /* 30 */ 1, { 1, 1, 1, 0 } }, /* 111001 */ - { /* 31 */ 0, { 6, 7, 0, 0 } }, - { /* 32 */ 0, { 7, 8, 0, 0 } }, - { /* 33 */ 0, { 8, 9, 0, 0 } }, - { /* 34 */ 0, { 9, 10, 0, 0 } }, - { /* 35 */ 0, { 10, 11, 0, 0 } }, - { /* 36 */ 0, { 11, 12, 0, 0 } }, - { /* 37 */ 1, { 1, 1, 1, 1 } }, /* 1110100 */ - { /* 38 */ 1, { 1, 0, 1, 1 } }, /* 1110101 */ - { /* 39 */ 1, { 1, 1, 0, 1 } }, /* 1110110 */ - { /* 40 */ 0, { 9, 10, 0, 0 } }, - { /* 41 */ 0, { 10, 11, 0, 0 } }, - { /* 42 */ 0, { 11, 12, 0, 0 } }, - { /* 43 */ 0, { 12, 13, 0, 0 } }, - { /* 44 */ 0, { 13, 14, 0, 0 } }, - { /* 45 */ 0, { 14, 15, 0, 0 } }, - { /* 46 */ 0, { 15, 16, 0, 0 } }, - { /* 47 */ 0, { 16, 17, 0, 0 } }, - { /* 48 */ 0, { 17, 18, 0, 0 } }, - { /* 49 */ 1, { 2, 0, 0, 0 } }, /* 11101110 */ - { /* 50 */ 1, { 0, 0, 0, 2 } }, /* 11101111 */ - { /* 51 */ 1, { 0, 0, 1, 2 } }, /* 11110000 */ - { /* 52 */ 1, { 2, 1, 0, 0 } }, /* 11110001 */ - { /* 53 */ 1, { 1, 2, 1, 0 } }, /* 11110010 */ - { /* 54 */ 0, { 13, 14, 0, 0 } }, - { /* 55 */ 0, { 14, 15, 0, 0 } }, - { /* 56 */ 0, { 15, 16, 0, 0 } }, - { /* 57 */ 0, { 16, 17, 0, 0 } }, - { /* 58 */ 0, { 17, 18, 0, 0 } }, - { /* 59 */ 0, { 18, 19, 0, 0 } }, - { /* 60 */ 0, { 19, 20, 0, 0 } }, - { /* 61 */ 0, { 20, 21, 0, 0 } }, - { /* 62 */ 0, { 21, 22, 0, 0 } }, - { /* 63 */ 0, { 22, 23, 0, 0 } }, - { /* 64 */ 0, { 23, 24, 0, 0 } }, - { /* 65 */ 0, { 24, 25, 0, 0 } }, - { /* 66 */ 0, { 25, 26, 0, 0 } }, - { /* 67 */ 1, { 0, 0, 2, 1 } }, - { /* 68 */ 1, { 0, 1, 2, 1 } }, - { /* 69 */ 1, { 1, 2, 0, 0 } }, - { /* 70 */ 1, { 0, 1, 1, 2 } }, - { /* 71 */ 1, { 2, 1, 1, 0 } }, - { /* 72 */ 1, { 0, 0, 2, 0 } }, - { /* 73 */ 1, { 0, 2, 1, 0 } }, - { /* 74 */ 1, { 0, 1, 2, 0 } }, - { /* 75 */ 1, { 0, 2, 0, 0 } }, - { /* 76 */ 1, { 0, 1, 0, 2 } }, - { /* 77 */ 1, { 2, 0, 1, 0 } }, - { /* 78 */ 1, { 1, 2, 1, 1 } }, - { /* 79 */ 1, { 0, 2, 1, 1 } }, - { /* 80 */ 1, { 1, 1, 2, 0 } }, - { /* 81 */ 1, { 1, 1, 2, 1 } }, - { /* 82 */ 0, { 11, 12, 0, 0 } }, - { /* 83 */ 0, { 12, 13, 0, 0 } }, - { /* 84 */ 0, { 13, 14, 0, 0 } }, - { /* 85 */ 0, { 14, 15, 0, 0 } }, - { /* 86 */ 0, { 15, 16, 0, 0 } }, - { /* 87 */ 0, { 16, 17, 0, 0 } }, - { /* 88 */ 0, { 17, 18, 0, 0 } }, - { /* 89 */ 0, { 18, 19, 0, 0 } }, - { /* 90 */ 0, { 19, 20, 0, 0 } }, - { /* 91 */ 0, { 20, 21, 0, 0 } }, - { /* 92 */ 0, { 21, 22, 0, 0 } }, - { /* 93 */ 1, { 1, 2, 0, 1 } }, /* 1111101010 */ - { /* 94 */ 1, { 1, 0, 2, 0 } }, /* 1111101011 */ - { /* 95 */ 1, { 1, 0, 2, 1 } }, /* 1111101100 */ - { /* 96 */ 1, { 0, 2, 0, 1 } }, /* 1111101101 */ - { /* 97 */ 1, { 2, 1, 1, 1 } }, /* 1111101110 */ - { /* 98 */ 1, { 1, 1, 1, 2 } }, /* 1111101111 */ - { /* 99 */ 1, { 2, 1, 0, 1 } }, /* 1111110000 */ - { /* 00 */ 1, { 1, 0, 1, 2 } }, /* 1111110001 */ - { /* 01 */ 1, { 0, 0, 2, 2 } }, /* 1111110010 */ - { /* 02 */ 1, { 0, 1, 2, 2 } }, /* 1111110011 */ - { /* 03 */ 1, { 2, 2, 1, 0 } }, /* 1111110100 */ - { /* 04 */ 1, { 1, 2, 2, 0 } }, /* 1111110101 */ - { /* 05 */ 1, { 1, 0, 0, 2 } }, /* 1111110110 */ - { /* 06 */ 1, { 2, 0, 0, 1 } }, /* 1111110111 */ - { /* 07 */ 1, { 0, 2, 2, 1 } }, /* 1111111000 */ - { /* 08 */ 0, { 7, 8, 0, 0 } }, - { /* 09 */ 0, { 8, 9, 0, 0 } }, - { /* 10 */ 0, { 9, 10, 0, 0 } }, - { /* 11 */ 0, { 10, 11, 0, 0 } }, - { /* 12 */ 0, { 11, 12, 0, 0 } }, - { /* 13 */ 0, { 12, 13, 0, 0 } }, - { /* 14 */ 0, { 13, 14, 0, 0 } }, - { /* 15 */ 1, { 2, 2, 0, 0 } }, /* 11111110010 */ - { /* 16 */ 1, { 1, 2, 2, 1 } }, /* 11111110011 */ - { /* 17 */ 1, { 1, 1, 0, 2 } }, /* 11111110100 */ - { /* 18 */ 1, { 2, 0, 1, 1 } }, /* 11111110101 */ - { /* 19 */ 1, { 1, 1, 2, 2 } }, /* 11111110110 */ - { /* 20 */ 1, { 2, 2, 1, 1 } }, /* 11111110111 */ - { /* 21 */ 1, { 0, 2, 2, 0 } }, /* 11111111000 */ - { /* 22 */ 1, { 0, 2, 1, 2 } }, /* 11111111001 */ - { /* 23 */ 0, { 6, 7, 0, 0 } }, - { /* 24 */ 0, { 7, 8, 0, 0 } }, - { /* 25 */ 0, { 8, 9, 0, 0 } }, - { /* 26 */ 0, { 9, 10, 0, 0 } }, - { /* 27 */ 0, { 10, 11, 0, 0 } }, - { /* 28 */ 0, { 11, 12, 0, 0 } }, - { /* 29 */ 1, { 1, 0, 2, 2 } }, /* 111111110100 */ - { /* 30 */ 1, { 2, 2, 0, 1 } }, /* 111111110101 */ - { /* 31 */ 1, { 2, 1, 2, 0 } }, /* 111111110110 */ - { /* 32 */ 1, { 2, 2, 2, 0 } }, /* 111111110111 */ - { /* 33 */ 1, { 0, 2, 2, 2 } }, /* 111111111000 */ - { /* 34 */ 1, { 2, 2, 2, 1 } }, /* 111111111001 */ - { /* 35 */ 1, { 2, 1, 2, 1 } }, /* 111111111010 */ - { /* 36 */ 1, { 1, 2, 1, 2 } }, /* 111111111011 */ - { /* 37 */ 1, { 1, 2, 2, 2 } }, /* 111111111100 */ - { /* 38 */ 0, { 3, 4, 0, 0 } }, - { /* 39 */ 0, { 4, 5, 0, 0 } }, - { /* 40 */ 0, { 5, 6, 0, 0 } }, - { /* 41 */ 1, { 0, 2, 0, 2 } }, /* 1111111111010 */ - { /* 42 */ 1, { 2, 0, 2, 0 } }, /* 1111111111011 */ - { /* 43 */ 1, { 1, 2, 0, 2 } }, /* 1111111111100 */ - { /* 44 */ 0, { 3, 4, 0, 0 } }, - { /* 45 */ 0, { 4, 5, 0, 0 } }, - { /* 46 */ 0, { 5, 6, 0, 0 } }, - { /* 47 */ 1, { 2, 0, 2, 1 } }, /* 11111111111010 */ - { /* 48 */ 1, { 2, 1, 1, 2 } }, /* 11111111111011 */ - { /* 49 */ 1, { 2, 1, 0, 2 } }, /* 11111111111100 */ - { /* 50 */ 0, { 3, 4, 0, 0 } }, - { /* 51 */ 0, { 4, 5, 0, 0 } }, - { /* 52 */ 0, { 5, 6, 0, 0 } }, - { /* 53 */ 1, { 2, 2, 2, 2 } }, /* 111111111111010 */ - { /* 54 */ 1, { 2, 2, 1, 2 } }, /* 111111111111011 */ - { /* 55 */ 1, { 2, 1, 2, 2 } }, /* 111111111111100 */ - { /* 56 */ 1, { 2, 0, 1, 2 } }, /* 111111111111101 */ - { /* 57 */ 1, { 2, 0, 0, 2 } }, /* 111111111111110 */ - { /* 58 */ 0, { 1, 2, 0, 0 } }, - { /* 59 */ 1, { 2, 2, 0, 2 } }, /* 1111111111111110 */ - { /* 60 */ 1, { 2, 0, 2, 2 } } /* 1111111111111111 */ +static hcb_bin_quad hcb3[161] = { + { /* 0 */ 0, { 1, 2, 0, 0 } }, + { /* 1 */ 1, { 0, 0, 0, 0 } }, /* 0 */ + { /* 2 */ 0, { 1, 2, 0, 0 } }, + { /* 3 */ 0, { 2, 3, 0, 0 } }, + { /* 4 */ 0, { 3, 4, 0, 0 } }, + { /* 5 */ 0, { 4, 5, 0, 0 } }, + { /* 6 */ 0, { 5, 6, 0, 0 } }, + { /* 7 */ 0, { 6, 7, 0, 0 } }, + { /* 8 */ 0, { 7, 8, 0, 0 } }, + { /* 9 */ 1, { 1, 0, 0, 0 } }, /* 1000 */ + { /* 10 */ 1, { 0, 0, 0, 1 } }, /* 1001 */ + { /* 11 */ 1, { 0, 1, 0, 0 } }, /* 1010 */ + { /* 12 */ 1, { 0, 0, 1, 0 } }, /* 1011 */ + { /* 13 */ 0, { 4, 5, 0, 0 } }, + { /* 14 */ 0, { 5, 6, 0, 0 } }, + { /* 15 */ 0, { 6, 7, 0, 0 } }, + { /* 16 */ 0, { 7, 8, 0, 0 } }, + { /* 17 */ 1, { 1, 1, 0, 0 } }, + { /* 18 */ 1, { 0, 0, 1, 1 } }, + { /* 19 */ 0, { 6, 7, 0, 0 } }, + { /* 20 */ 0, { 7, 8, 0, 0 } }, + { /* 21 */ 0, { 8, 9, 0, 0 } }, + { /* 22 */ 0, { 9, 10, 0, 0 } }, + { /* 23 */ 0, { 10, 11, 0, 0 } }, + { /* 24 */ 0, { 11, 12, 0, 0 } }, + { /* 25 */ 1, { 0, 1, 1, 0 } }, /* 110100 */ + { /* 26 */ 1, { 0, 1, 0, 1 } }, /* 110101 */ + { /* 27 */ 1, { 1, 0, 1, 0 } }, /* 110110 */ + { /* 28 */ 1, { 0, 1, 1, 1 } }, /* 110111 */ + { /* 29 */ 1, { 1, 0, 0, 1 } }, /* 111000 */ + { /* 30 */ 1, { 1, 1, 1, 0 } }, /* 111001 */ + { /* 31 */ 0, { 6, 7, 0, 0 } }, + { /* 32 */ 0, { 7, 8, 0, 0 } }, + { /* 33 */ 0, { 8, 9, 0, 0 } }, + { /* 34 */ 0, { 9, 10, 0, 0 } }, + { /* 35 */ 0, { 10, 11, 0, 0 } }, + { /* 36 */ 0, { 11, 12, 0, 0 } }, + { /* 37 */ 1, { 1, 1, 1, 1 } }, /* 1110100 */ + { /* 38 */ 1, { 1, 0, 1, 1 } }, /* 1110101 */ + { /* 39 */ 1, { 1, 1, 0, 1 } }, /* 1110110 */ + { /* 40 */ 0, { 9, 10, 0, 0 } }, + { /* 41 */ 0, { 10, 11, 0, 0 } }, + { /* 42 */ 0, { 11, 12, 0, 0 } }, + { /* 43 */ 0, { 12, 13, 0, 0 } }, + { /* 44 */ 0, { 13, 14, 0, 0 } }, + { /* 45 */ 0, { 14, 15, 0, 0 } }, + { /* 46 */ 0, { 15, 16, 0, 0 } }, + { /* 47 */ 0, { 16, 17, 0, 0 } }, + { /* 48 */ 0, { 17, 18, 0, 0 } }, + { /* 49 */ 1, { 2, 0, 0, 0 } }, /* 11101110 */ + { /* 50 */ 1, { 0, 0, 0, 2 } }, /* 11101111 */ + { /* 51 */ 1, { 0, 0, 1, 2 } }, /* 11110000 */ + { /* 52 */ 1, { 2, 1, 0, 0 } }, /* 11110001 */ + { /* 53 */ 1, { 1, 2, 1, 0 } }, /* 11110010 */ + { /* 54 */ 0, { 13, 14, 0, 0 } }, + { /* 55 */ 0, { 14, 15, 0, 0 } }, + { /* 56 */ 0, { 15, 16, 0, 0 } }, + { /* 57 */ 0, { 16, 17, 0, 0 } }, + { /* 58 */ 0, { 17, 18, 0, 0 } }, + { /* 59 */ 0, { 18, 19, 0, 0 } }, + { /* 60 */ 0, { 19, 20, 0, 0 } }, + { /* 61 */ 0, { 20, 21, 0, 0 } }, + { /* 62 */ 0, { 21, 22, 0, 0 } }, + { /* 63 */ 0, { 22, 23, 0, 0 } }, + { /* 64 */ 0, { 23, 24, 0, 0 } }, + { /* 65 */ 0, { 24, 25, 0, 0 } }, + { /* 66 */ 0, { 25, 26, 0, 0 } }, + { /* 67 */ 1, { 0, 0, 2, 1 } }, + { /* 68 */ 1, { 0, 1, 2, 1 } }, + { /* 69 */ 1, { 1, 2, 0, 0 } }, + { /* 70 */ 1, { 0, 1, 1, 2 } }, + { /* 71 */ 1, { 2, 1, 1, 0 } }, + { /* 72 */ 1, { 0, 0, 2, 0 } }, + { /* 73 */ 1, { 0, 2, 1, 0 } }, + { /* 74 */ 1, { 0, 1, 2, 0 } }, + { /* 75 */ 1, { 0, 2, 0, 0 } }, + { /* 76 */ 1, { 0, 1, 0, 2 } }, + { /* 77 */ 1, { 2, 0, 1, 0 } }, + { /* 78 */ 1, { 1, 2, 1, 1 } }, + { /* 79 */ 1, { 0, 2, 1, 1 } }, + { /* 80 */ 1, { 1, 1, 2, 0 } }, + { /* 81 */ 1, { 1, 1, 2, 1 } }, + { /* 82 */ 0, { 11, 12, 0, 0 } }, + { /* 83 */ 0, { 12, 13, 0, 0 } }, + { /* 84 */ 0, { 13, 14, 0, 0 } }, + { /* 85 */ 0, { 14, 15, 0, 0 } }, + { /* 86 */ 0, { 15, 16, 0, 0 } }, + { /* 87 */ 0, { 16, 17, 0, 0 } }, + { /* 88 */ 0, { 17, 18, 0, 0 } }, + { /* 89 */ 0, { 18, 19, 0, 0 } }, + { /* 90 */ 0, { 19, 20, 0, 0 } }, + { /* 91 */ 0, { 20, 21, 0, 0 } }, + { /* 92 */ 0, { 21, 22, 0, 0 } }, + { /* 93 */ 1, { 1, 2, 0, 1 } }, /* 1111101010 */ + { /* 94 */ 1, { 1, 0, 2, 0 } }, /* 1111101011 */ + { /* 95 */ 1, { 1, 0, 2, 1 } }, /* 1111101100 */ + { /* 96 */ 1, { 0, 2, 0, 1 } }, /* 1111101101 */ + { /* 97 */ 1, { 2, 1, 1, 1 } }, /* 1111101110 */ + { /* 98 */ 1, { 1, 1, 1, 2 } }, /* 1111101111 */ + { /* 99 */ 1, { 2, 1, 0, 1 } }, /* 1111110000 */ + { /* 100 */ 1, { 1, 0, 1, 2 } }, /* 1111110001 */ + { /* 101 */ 1, { 0, 0, 2, 2 } }, /* 1111110010 */ + { /* 102 */ 1, { 0, 1, 2, 2 } }, /* 1111110011 */ + { /* 103 */ 1, { 2, 2, 1, 0 } }, /* 1111110100 */ + { /* 104 */ 1, { 1, 2, 2, 0 } }, /* 1111110101 */ + { /* 105 */ 1, { 1, 0, 0, 2 } }, /* 1111110110 */ + { /* 106 */ 1, { 2, 0, 0, 1 } }, /* 1111110111 */ + { /* 107 */ 1, { 0, 2, 2, 1 } }, /* 1111111000 */ + { /* 108 */ 0, { 7, 8, 0, 0 } }, + { /* 109 */ 0, { 8, 9, 0, 0 } }, + { /* 110 */ 0, { 9, 10, 0, 0 } }, + { /* 111 */ 0, { 10, 11, 0, 0 } }, + { /* 112 */ 0, { 11, 12, 0, 0 } }, + { /* 113 */ 0, { 12, 13, 0, 0 } }, + { /* 114 */ 0, { 13, 14, 0, 0 } }, + { /* 115 */ 1, { 2, 2, 0, 0 } }, /* 11111110010 */ + { /* 116 */ 1, { 1, 2, 2, 1 } }, /* 11111110011 */ + { /* 117 */ 1, { 1, 1, 0, 2 } }, /* 11111110100 */ + { /* 118 */ 1, { 2, 0, 1, 1 } }, /* 11111110101 */ + { /* 119 */ 1, { 1, 1, 2, 2 } }, /* 11111110110 */ + { /* 120 */ 1, { 2, 2, 1, 1 } }, /* 11111110111 */ + { /* 121 */ 1, { 0, 2, 2, 0 } }, /* 11111111000 */ + { /* 122 */ 1, { 0, 2, 1, 2 } }, /* 11111111001 */ + { /* 123 */ 0, { 6, 7, 0, 0 } }, + { /* 124 */ 0, { 7, 8, 0, 0 } }, + { /* 125 */ 0, { 8, 9, 0, 0 } }, + { /* 126 */ 0, { 9, 10, 0, 0 } }, + { /* 127 */ 0, { 10, 11, 0, 0 } }, + { /* 128 */ 0, { 11, 12, 0, 0 } }, + { /* 129 */ 1, { 1, 0, 2, 2 } }, /* 111111110100 */ + { /* 130 */ 1, { 2, 2, 0, 1 } }, /* 111111110101 */ + { /* 131 */ 1, { 2, 1, 2, 0 } }, /* 111111110110 */ + { /* 132 */ 1, { 2, 2, 2, 0 } }, /* 111111110111 */ + { /* 133 */ 1, { 0, 2, 2, 2 } }, /* 111111111000 */ + { /* 134 */ 1, { 2, 2, 2, 1 } }, /* 111111111001 */ + { /* 135 */ 1, { 2, 1, 2, 1 } }, /* 111111111010 */ + { /* 136 */ 1, { 1, 2, 1, 2 } }, /* 111111111011 */ + { /* 137 */ 1, { 1, 2, 2, 2 } }, /* 111111111100 */ + { /* 138 */ 0, { 3, 4, 0, 0 } }, + { /* 139 */ 0, { 4, 5, 0, 0 } }, + { /* 140 */ 0, { 5, 6, 0, 0 } }, + { /* 141 */ 1, { 0, 2, 0, 2 } }, /* 1111111111010 */ + { /* 142 */ 1, { 2, 0, 2, 0 } }, /* 1111111111011 */ + { /* 143 */ 1, { 1, 2, 0, 2 } }, /* 1111111111100 */ + { /* 144 */ 0, { 3, 4, 0, 0 } }, + { /* 145 */ 0, { 4, 5, 0, 0 } }, + { /* 146 */ 0, { 5, 6, 0, 0 } }, + { /* 147 */ 1, { 2, 0, 2, 1 } }, /* 11111111111010 */ + { /* 148 */ 1, { 2, 1, 1, 2 } }, /* 11111111111011 */ + { /* 149 */ 1, { 2, 1, 0, 2 } }, /* 11111111111100 */ + { /* 150 */ 0, { 3, 4, 0, 0 } }, + { /* 151 */ 0, { 4, 5, 0, 0 } }, + { /* 152 */ 0, { 5, 6, 0, 0 } }, + { /* 153 */ 1, { 2, 2, 2, 2 } }, /* 111111111111010 */ + { /* 154 */ 1, { 2, 2, 1, 2 } }, /* 111111111111011 */ + { /* 155 */ 1, { 2, 1, 2, 2 } }, /* 111111111111100 */ + { /* 156 */ 1, { 2, 0, 1, 2 } }, /* 111111111111101 */ + { /* 157 */ 1, { 2, 0, 0, 2 } }, /* 111111111111110 */ + { /* 158 */ 0, { 1, 2, 0, 0 } }, + { /* 159 */ 1, { 2, 2, 0, 2 } }, /* 1111111111111110 */ + { /* 160 */ 1, { 2, 0, 2, 2 } } /* 1111111111111111 */ }; diff --git a/libfaad/codebook/hcb_4.h b/libfaad/codebook/hcb_4.h index 0e5e06ef..e991810d 100644 --- a/libfaad/codebook/hcb_4.h +++ b/libfaad/codebook/hcb_4.h @@ -36,7 +36,7 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb4_1[] = { +static hcb hcb4_1[32] = { /* 4 bit codewords */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, @@ -82,13 +82,15 @@ static hcb hcb4_1[] = { /* 9/10/11/12 bit codewords */ { /* 11111 */ 56, 7 } + + /* Size of second level table is 56 + 128 = 184 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_quad hcb4_2[] = { +static hcb_2_quad hcb4_2[184] = { /* 4 bit codewords */ { 4, 1, 1, 1, 1 }, { 4, 0, 1, 1, 1 }, diff --git a/libfaad/codebook/hcb_5.h b/libfaad/codebook/hcb_5.h index f0156416..d88efd43 100644 --- a/libfaad/codebook/hcb_5.h +++ b/libfaad/codebook/hcb_5.h @@ -31,166 +31,166 @@ /* Binary search huffman table HCB_5 */ -static hcb_bin_pair hcb5[] = { - { /* 0 */ 0, { 1, 2 } }, - { /* 1 */ 1, { 0, 0 } }, /* 0 */ - { /* 2 */ 0, { 1, 2 } }, - { /* 3 */ 0, { 2, 3 } }, - { /* 4 */ 0, { 3, 4 } }, - { /* 5 */ 0, { 4, 5 } }, - { /* 6 */ 0, { 5, 6 } }, - { /* 7 */ 0, { 6, 7 } }, - { /* 8 */ 0, { 7, 8 } }, - { /* 9 */ 1, { -1, 0 } }, /* 1000 */ - { /* 10 */ 1, { 1, 0 } }, /* 1001 */ - { /* 11 */ 1, { 0, 1 } }, /* 1010 */ - { /* 12 */ 1, { 0, -1 } }, /* 1011 */ - { /* 13 */ 0, { 4, 5 } }, - { /* 14 */ 0, { 5, 6 } }, - { /* 15 */ 0, { 6, 7 } }, - { /* 16 */ 0, { 7, 8 } }, - { /* 17 */ 1, { 1, -1 } }, - { /* 18 */ 1, { -1, 1 } }, - { /* 19 */ 1, { -1, -1 } }, - { /* 20 */ 1, { 1, 1 } }, - { /* 21 */ 0, { 4, 5 } }, - { /* 22 */ 0, { 5, 6 } }, - { /* 23 */ 0, { 6, 7 } }, - { /* 24 */ 0, { 7, 8 } }, - { /* 25 */ 0, { 8, 9 } }, - { /* 26 */ 0, { 9, 10 } }, - { /* 27 */ 0, { 10, 11 } }, - { /* 28 */ 0, { 11, 12 } }, - { /* 29 */ 0, { 12, 13 } }, - { /* 30 */ 0, { 13, 14 } }, - { /* 31 */ 0, { 14, 15 } }, - { /* 32 */ 0, { 15, 16 } }, - { /* 33 */ 1, { -2, 0 } }, - { /* 34 */ 1, { 0, 2 } }, - { /* 35 */ 1, { 2, 0 } }, - { /* 36 */ 1, { 0, -2 } }, - { /* 37 */ 0, { 12, 13 } }, - { /* 38 */ 0, { 13, 14 } }, - { /* 39 */ 0, { 14, 15 } }, - { /* 40 */ 0, { 15, 16 } }, - { /* 41 */ 0, { 16, 17 } }, - { /* 42 */ 0, { 17, 18 } }, - { /* 43 */ 0, { 18, 19 } }, - { /* 44 */ 0, { 19, 20 } }, - { /* 45 */ 0, { 20, 21 } }, - { /* 46 */ 0, { 21, 22 } }, - { /* 47 */ 0, { 22, 23 } }, - { /* 48 */ 0, { 23, 24 } }, - { /* 49 */ 1, { -2, -1 } }, - { /* 50 */ 1, { 2, 1 } }, - { /* 51 */ 1, { -1, -2 } }, - { /* 52 */ 1, { 1, 2 } }, - { /* 53 */ 1, { -2, 1 } }, - { /* 54 */ 1, { 2, -1 } }, - { /* 55 */ 1, { -1, 2 } }, - { /* 56 */ 1, { 1, -2 } }, - { /* 57 */ 1, { -3, 0 } }, - { /* 58 */ 1, { 3, 0 } }, - { /* 59 */ 1, { 0, -3 } }, - { /* 60 */ 1, { 0, 3 } }, - { /* 61 */ 0, { 12, 13 } }, - { /* 62 */ 0, { 13, 14 } }, - { /* 63 */ 0, { 14, 15 } }, - { /* 64 */ 0, { 15, 16 } }, - { /* 65 */ 0, { 16, 17 } }, - { /* 66 */ 0, { 17, 18 } }, - { /* 67 */ 0, { 18, 19 } }, - { /* 68 */ 0, { 19, 20 } }, - { /* 69 */ 0, { 20, 21 } }, - { /* 70 */ 0, { 21, 22 } }, - { /* 71 */ 0, { 22, 23 } }, - { /* 72 */ 0, { 23, 24 } }, - { /* 73 */ 1, { -3, -1 } }, - { /* 74 */ 1, { 1, 3 } }, - { /* 75 */ 1, { 3, 1 } }, - { /* 76 */ 1, { -1, -3 } }, - { /* 77 */ 1, { -3, 1 } }, - { /* 78 */ 1, { 3, -1 } }, - { /* 79 */ 1, { 1, -3 } }, - { /* 80 */ 1, { -1, 3 } }, - { /* 81 */ 1, { -2, 2 } }, - { /* 82 */ 1, { 2, 2 } }, - { /* 83 */ 1, { -2, -2 } }, - { /* 84 */ 1, { 2, -2 } }, - { /* 85 */ 0, { 12, 13 } }, - { /* 86 */ 0, { 13, 14 } }, - { /* 87 */ 0, { 14, 15 } }, - { /* 88 */ 0, { 15, 16 } }, - { /* 89 */ 0, { 16, 17 } }, - { /* 90 */ 0, { 17, 18 } }, - { /* 91 */ 0, { 18, 19 } }, - { /* 92 */ 0, { 19, 20 } }, - { /* 93 */ 0, { 20, 21 } }, - { /* 94 */ 0, { 21, 22 } }, - { /* 95 */ 0, { 22, 23 } }, - { /* 96 */ 0, { 23, 24 } }, - { /* 97 */ 1, { -3, -2 } }, - { /* 98 */ 1, { 3, -2 } }, - { /* 99 */ 1, { -2, 3 } }, - { /* 00 */ 1, { 2, -3 } }, - { /* 01 */ 1, { 3, 2 } }, - { /* 02 */ 1, { 2, 3 } }, - { /* 03 */ 1, { -3, 2 } }, - { /* 04 */ 1, { -2, -3 } }, - { /* 05 */ 1, { 0, -4 } }, - { /* 06 */ 1, { -4, 0 } }, - { /* 07 */ 1, { 4, 1 } }, - { /* 08 */ 1, { 4, 0 } }, - { /* 09 */ 0, { 12, 13 } }, - { /* 10 */ 0, { 13, 14 } }, - { /* 11 */ 0, { 14, 15 } }, - { /* 12 */ 0, { 15, 16 } }, - { /* 13 */ 0, { 16, 17 } }, - { /* 14 */ 0, { 17, 18 } }, - { /* 15 */ 0, { 18, 19 } }, - { /* 16 */ 0, { 19, 20 } }, - { /* 17 */ 0, { 20, 21 } }, - { /* 18 */ 0, { 21, 22 } }, - { /* 19 */ 0, { 22, 23 } }, - { /* 20 */ 0, { 23, 24 } }, - { /* 21 */ 1, { -4, -1 } }, - { /* 22 */ 1, { 0, 4 } }, - { /* 23 */ 1, { 4, -1 } }, - { /* 24 */ 1, { -1, -4 } }, - { /* 25 */ 1, { 1, 4 } }, - { /* 26 */ 1, { -1, 4 } }, - { /* 27 */ 1, { -4, 1 } }, - { /* 28 */ 1, { 1, -4 } }, - { /* 29 */ 1, { 3, -3 } }, - { /* 30 */ 1, { -3, -3 } }, - { /* 31 */ 1, { -3, 3 } }, - { /* 32 */ 1, { -2, 4 } }, - { /* 33 */ 1, { -4, -2 } }, - { /* 34 */ 1, { 4, 2 } }, - { /* 35 */ 1, { 2, -4 } }, - { /* 36 */ 1, { 2, 4 } }, - { /* 37 */ 1, { 3, 3 } }, - { /* 38 */ 1, { -4, 2 } }, - { /* 39 */ 0, { 6, 7 } }, - { /* 40 */ 0, { 7, 8 } }, - { /* 41 */ 0, { 8, 9 } }, - { /* 42 */ 0, { 9, 10 } }, - { /* 43 */ 0, { 10, 11 } }, - { /* 44 */ 0, { 11, 12 } }, - { /* 45 */ 1, { -2, -4 } }, - { /* 46 */ 1, { 4, -2 } }, - { /* 47 */ 1, { 3, -4 } }, - { /* 48 */ 1, { -4, -3 } }, - { /* 49 */ 1, { -4, 3 } }, - { /* 50 */ 1, { 3, 4 } }, - { /* 51 */ 1, { -3, 4 } }, - { /* 52 */ 1, { 4, 3 } }, - { /* 53 */ 1, { 4, -3 } }, - { /* 54 */ 1, { -3, -4 } }, - { /* 55 */ 0, { 2, 3 } }, - { /* 56 */ 0, { 3, 4 } }, - { /* 57 */ 1, { 4, -4 } }, - { /* 58 */ 1, { -4, 4 } }, - { /* 59 */ 1, { 4, 4 } }, - { /* 60 */ 1, { -4, -4 } } +static hcb_bin_pair hcb5[161] = { + { /* 0 */ 0, { 1, 2 } }, + { /* 1 */ 1, { 0, 0 } }, /* 0 */ + { /* 2 */ 0, { 1, 2 } }, + { /* 3 */ 0, { 2, 3 } }, + { /* 4 */ 0, { 3, 4 } }, + { /* 5 */ 0, { 4, 5 } }, + { /* 6 */ 0, { 5, 6 } }, + { /* 7 */ 0, { 6, 7 } }, + { /* 8 */ 0, { 7, 8 } }, + { /* 9 */ 1, { -1, 0 } }, /* 1000 */ + { /* 10 */ 1, { 1, 0 } }, /* 1001 */ + { /* 11 */ 1, { 0, 1 } }, /* 1010 */ + { /* 12 */ 1, { 0, -1 } }, /* 1011 */ + { /* 13 */ 0, { 4, 5 } }, + { /* 14 */ 0, { 5, 6 } }, + { /* 15 */ 0, { 6, 7 } }, + { /* 16 */ 0, { 7, 8 } }, + { /* 17 */ 1, { 1, -1 } }, + { /* 18 */ 1, { -1, 1 } }, + { /* 19 */ 1, { -1, -1 } }, + { /* 20 */ 1, { 1, 1 } }, + { /* 21 */ 0, { 4, 5 } }, + { /* 22 */ 0, { 5, 6 } }, + { /* 23 */ 0, { 6, 7 } }, + { /* 24 */ 0, { 7, 8 } }, + { /* 25 */ 0, { 8, 9 } }, + { /* 26 */ 0, { 9, 10 } }, + { /* 27 */ 0, { 10, 11 } }, + { /* 28 */ 0, { 11, 12 } }, + { /* 29 */ 0, { 12, 13 } }, + { /* 30 */ 0, { 13, 14 } }, + { /* 31 */ 0, { 14, 15 } }, + { /* 32 */ 0, { 15, 16 } }, + { /* 33 */ 1, { -2, 0 } }, + { /* 34 */ 1, { 0, 2 } }, + { /* 35 */ 1, { 2, 0 } }, + { /* 36 */ 1, { 0, -2 } }, + { /* 37 */ 0, { 12, 13 } }, + { /* 38 */ 0, { 13, 14 } }, + { /* 39 */ 0, { 14, 15 } }, + { /* 40 */ 0, { 15, 16 } }, + { /* 41 */ 0, { 16, 17 } }, + { /* 42 */ 0, { 17, 18 } }, + { /* 43 */ 0, { 18, 19 } }, + { /* 44 */ 0, { 19, 20 } }, + { /* 45 */ 0, { 20, 21 } }, + { /* 46 */ 0, { 21, 22 } }, + { /* 47 */ 0, { 22, 23 } }, + { /* 48 */ 0, { 23, 24 } }, + { /* 49 */ 1, { -2, -1 } }, + { /* 50 */ 1, { 2, 1 } }, + { /* 51 */ 1, { -1, -2 } }, + { /* 52 */ 1, { 1, 2 } }, + { /* 53 */ 1, { -2, 1 } }, + { /* 54 */ 1, { 2, -1 } }, + { /* 55 */ 1, { -1, 2 } }, + { /* 56 */ 1, { 1, -2 } }, + { /* 57 */ 1, { -3, 0 } }, + { /* 58 */ 1, { 3, 0 } }, + { /* 59 */ 1, { 0, -3 } }, + { /* 60 */ 1, { 0, 3 } }, + { /* 61 */ 0, { 12, 13 } }, + { /* 62 */ 0, { 13, 14 } }, + { /* 63 */ 0, { 14, 15 } }, + { /* 64 */ 0, { 15, 16 } }, + { /* 65 */ 0, { 16, 17 } }, + { /* 66 */ 0, { 17, 18 } }, + { /* 67 */ 0, { 18, 19 } }, + { /* 68 */ 0, { 19, 20 } }, + { /* 69 */ 0, { 20, 21 } }, + { /* 70 */ 0, { 21, 22 } }, + { /* 71 */ 0, { 22, 23 } }, + { /* 72 */ 0, { 23, 24 } }, + { /* 73 */ 1, { -3, -1 } }, + { /* 74 */ 1, { 1, 3 } }, + { /* 75 */ 1, { 3, 1 } }, + { /* 76 */ 1, { -1, -3 } }, + { /* 77 */ 1, { -3, 1 } }, + { /* 78 */ 1, { 3, -1 } }, + { /* 79 */ 1, { 1, -3 } }, + { /* 80 */ 1, { -1, 3 } }, + { /* 81 */ 1, { -2, 2 } }, + { /* 82 */ 1, { 2, 2 } }, + { /* 83 */ 1, { -2, -2 } }, + { /* 84 */ 1, { 2, -2 } }, + { /* 85 */ 0, { 12, 13 } }, + { /* 86 */ 0, { 13, 14 } }, + { /* 87 */ 0, { 14, 15 } }, + { /* 88 */ 0, { 15, 16 } }, + { /* 89 */ 0, { 16, 17 } }, + { /* 90 */ 0, { 17, 18 } }, + { /* 91 */ 0, { 18, 19 } }, + { /* 92 */ 0, { 19, 20 } }, + { /* 93 */ 0, { 20, 21 } }, + { /* 94 */ 0, { 21, 22 } }, + { /* 95 */ 0, { 22, 23 } }, + { /* 96 */ 0, { 23, 24 } }, + { /* 97 */ 1, { -3, -2 } }, + { /* 98 */ 1, { 3, -2 } }, + { /* 99 */ 1, { -2, 3 } }, + { /* 100 */ 1, { 2, -3 } }, + { /* 101 */ 1, { 3, 2 } }, + { /* 102 */ 1, { 2, 3 } }, + { /* 103 */ 1, { -3, 2 } }, + { /* 104 */ 1, { -2, -3 } }, + { /* 105 */ 1, { 0, -4 } }, + { /* 106 */ 1, { -4, 0 } }, + { /* 107 */ 1, { 4, 1 } }, + { /* 108 */ 1, { 4, 0 } }, + { /* 109 */ 0, { 12, 13 } }, + { /* 110 */ 0, { 13, 14 } }, + { /* 111 */ 0, { 14, 15 } }, + { /* 112 */ 0, { 15, 16 } }, + { /* 113 */ 0, { 16, 17 } }, + { /* 114 */ 0, { 17, 18 } }, + { /* 115 */ 0, { 18, 19 } }, + { /* 116 */ 0, { 19, 20 } }, + { /* 117 */ 0, { 20, 21 } }, + { /* 118 */ 0, { 21, 22 } }, + { /* 119 */ 0, { 22, 23 } }, + { /* 120 */ 0, { 23, 24 } }, + { /* 121 */ 1, { -4, -1 } }, + { /* 122 */ 1, { 0, 4 } }, + { /* 123 */ 1, { 4, -1 } }, + { /* 124 */ 1, { -1, -4 } }, + { /* 125 */ 1, { 1, 4 } }, + { /* 126 */ 1, { -1, 4 } }, + { /* 127 */ 1, { -4, 1 } }, + { /* 128 */ 1, { 1, -4 } }, + { /* 129 */ 1, { 3, -3 } }, + { /* 130 */ 1, { -3, -3 } }, + { /* 131 */ 1, { -3, 3 } }, + { /* 132 */ 1, { -2, 4 } }, + { /* 133 */ 1, { -4, -2 } }, + { /* 134 */ 1, { 4, 2 } }, + { /* 135 */ 1, { 2, -4 } }, + { /* 136 */ 1, { 2, 4 } }, + { /* 137 */ 1, { 3, 3 } }, + { /* 138 */ 1, { -4, 2 } }, + { /* 139 */ 0, { 6, 7 } }, + { /* 140 */ 0, { 7, 8 } }, + { /* 141 */ 0, { 8, 9 } }, + { /* 142 */ 0, { 9, 10 } }, + { /* 143 */ 0, { 10, 11 } }, + { /* 144 */ 0, { 11, 12 } }, + { /* 145 */ 1, { -2, -4 } }, + { /* 146 */ 1, { 4, -2 } }, + { /* 147 */ 1, { 3, -4 } }, + { /* 148 */ 1, { -4, -3 } }, + { /* 149 */ 1, { -4, 3 } }, + { /* 150 */ 1, { 3, 4 } }, + { /* 151 */ 1, { -3, 4 } }, + { /* 152 */ 1, { 4, 3 } }, + { /* 153 */ 1, { 4, -3 } }, + { /* 154 */ 1, { -3, -4 } }, + { /* 155 */ 0, { 2, 3 } }, + { /* 156 */ 0, { 3, 4 } }, + { /* 157 */ 1, { 4, -4 } }, + { /* 158 */ 1, { -4, 4 } }, + { /* 159 */ 1, { 4, 4 } }, + { /* 160 */ 1, { -4, -4 } } }; diff --git a/libfaad/codebook/hcb_6.h b/libfaad/codebook/hcb_6.h index dbbaa42a..6510232d 100644 --- a/libfaad/codebook/hcb_6.h +++ b/libfaad/codebook/hcb_6.h @@ -36,7 +36,7 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb6_1[] = { +static hcb hcb6_1[32] = { /* 4 bit codewords */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, @@ -80,13 +80,15 @@ static hcb hcb6_1[] = { /* 9/10/11 bit codewords */ { /* 11111 */ 61, 6 } + + /* Size of second level table is 61 + 64 = 125 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_pair hcb6_2[] = { +static hcb_2_pair hcb6_2[125] = { /* 4 bit codewords */ { 4, 0, 0 }, { 4, 1, 0 }, diff --git a/libfaad/codebook/hcb_7.h b/libfaad/codebook/hcb_7.h index f680693c..7b6499bd 100644 --- a/libfaad/codebook/hcb_7.h +++ b/libfaad/codebook/hcb_7.h @@ -31,132 +31,132 @@ /* Binary search huffman table HCB_7 */ -static hcb_bin_pair hcb7[] = { - { /* 0 */ 0, { 1, 2 } }, - { /* 1 */ 1, { 0, 0 } }, - { /* 2 */ 0, { 1, 2 } }, - { /* 3 */ 0, { 2, 3 } }, - { /* 4 */ 0, { 3, 4 } }, - { /* 5 */ 1, { 1, 0 } }, - { /* 6 */ 1, { 0, 1 } }, - { /* 7 */ 0, { 2, 3 } }, - { /* 8 */ 0, { 3, 4 } }, - { /* 9 */ 1, { 1, 1 } }, - { /* 10 */ 0, { 3, 4 } }, - { /* 11 */ 0, { 4, 5 } }, - { /* 12 */ 0, { 5, 6 } }, - { /* 13 */ 0, { 6, 7 } }, - { /* 14 */ 0, { 7, 8 } }, - { /* 15 */ 0, { 8, 9 } }, - { /* 16 */ 0, { 9, 10 } }, - { /* 17 */ 0, { 10, 11 } }, - { /* 18 */ 0, { 11, 12 } }, - { /* 19 */ 1, { 2, 1 } }, - { /* 20 */ 1, { 1, 2 } }, - { /* 21 */ 1, { 2, 0 } }, - { /* 22 */ 1, { 0, 2 } }, - { /* 23 */ 0, { 8, 9 } }, - { /* 24 */ 0, { 9, 10 } }, - { /* 25 */ 0, { 10, 11 } }, - { /* 26 */ 0, { 11, 12 } }, - { /* 27 */ 0, { 12, 13 } }, - { /* 28 */ 0, { 13, 14 } }, - { /* 29 */ 0, { 14, 15 } }, - { /* 30 */ 0, { 15, 16 } }, - { /* 31 */ 1, { 3, 1 } }, - { /* 32 */ 1, { 1, 3 } }, - { /* 33 */ 1, { 2, 2 } }, - { /* 34 */ 1, { 3, 0 } }, - { /* 35 */ 1, { 0, 3 } }, - { /* 36 */ 0, { 11, 12 } }, - { /* 37 */ 0, { 12, 13 } }, - { /* 38 */ 0, { 13, 14 } }, - { /* 39 */ 0, { 14, 15 } }, - { /* 40 */ 0, { 15, 16 } }, - { /* 41 */ 0, { 16, 17 } }, - { /* 42 */ 0, { 17, 18 } }, - { /* 43 */ 0, { 18, 19 } }, - { /* 44 */ 0, { 19, 20 } }, - { /* 45 */ 0, { 20, 21 } }, - { /* 46 */ 0, { 21, 22 } }, - { /* 47 */ 1, { 2, 3 } }, - { /* 48 */ 1, { 3, 2 } }, - { /* 49 */ 1, { 1, 4 } }, - { /* 50 */ 1, { 4, 1 } }, - { /* 51 */ 1, { 1, 5 } }, - { /* 52 */ 1, { 5, 1 } }, - { /* 53 */ 1, { 3, 3 } }, - { /* 54 */ 1, { 2, 4 } }, - { /* 55 */ 1, { 0, 4 } }, - { /* 56 */ 1, { 4, 0 } }, - { /* 57 */ 0, { 12, 13 } }, - { /* 58 */ 0, { 13, 14 } }, - { /* 59 */ 0, { 14, 15 } }, - { /* 60 */ 0, { 15, 16 } }, - { /* 61 */ 0, { 16, 17 } }, - { /* 62 */ 0, { 17, 18 } }, - { /* 63 */ 0, { 18, 19 } }, - { /* 64 */ 0, { 19, 20 } }, - { /* 65 */ 0, { 20, 21 } }, - { /* 66 */ 0, { 21, 22 } }, - { /* 67 */ 0, { 22, 23 } }, - { /* 68 */ 0, { 23, 24 } }, - { /* 69 */ 1, { 4, 2 } }, - { /* 70 */ 1, { 2, 5 } }, - { /* 71 */ 1, { 5, 2 } }, - { /* 72 */ 1, { 0, 5 } }, - { /* 73 */ 1, { 6, 1 } }, - { /* 74 */ 1, { 5, 0 } }, - { /* 75 */ 1, { 1, 6 } }, - { /* 76 */ 1, { 4, 3 } }, - { /* 77 */ 1, { 3, 5 } }, - { /* 78 */ 1, { 3, 4 } }, - { /* 79 */ 1, { 5, 3 } }, - { /* 80 */ 1, { 2, 6 } }, - { /* 81 */ 1, { 6, 2 } }, - { /* 82 */ 1, { 1, 7 } }, - { /* 83 */ 0, { 10, 11 } }, - { /* 84 */ 0, { 11, 12 } }, - { /* 85 */ 0, { 12, 13 } }, - { /* 86 */ 0, { 13, 14 } }, - { /* 87 */ 0, { 14, 15 } }, - { /* 88 */ 0, { 15, 16 } }, - { /* 89 */ 0, { 16, 17 } }, - { /* 90 */ 0, { 17, 18 } }, - { /* 91 */ 0, { 18, 19 } }, - { /* 92 */ 0, { 19, 20 } }, - { /* 93 */ 1, { 3, 6 } }, - { /* 94 */ 1, { 0, 6 } }, - { /* 95 */ 1, { 6, 0 } }, - { /* 96 */ 1, { 4, 4 } }, - { /* 97 */ 1, { 7, 1 } }, - { /* 98 */ 1, { 4, 5 } }, - { /* 99 */ 1, { 7, 2 } }, - { /* 00 */ 1, { 5, 4 } }, - { /* 01 */ 1, { 6, 3 } }, - { /* 02 */ 1, { 2, 7 } }, - { /* 03 */ 1, { 7, 3 } }, - { /* 04 */ 1, { 6, 4 } }, - { /* 05 */ 1, { 5, 5 } }, - { /* 06 */ 1, { 4, 6 } }, - { /* 07 */ 1, { 3, 7 } }, - { /* 08 */ 0, { 5, 6 } }, - { /* 09 */ 0, { 6, 7 } }, - { /* 10 */ 0, { 7, 8 } }, - { /* 11 */ 0, { 8, 9 } }, - { /* 12 */ 0, { 9, 10 } }, - { /* 13 */ 1, { 7, 0 } }, - { /* 14 */ 1, { 0, 7 } }, - { /* 15 */ 1, { 6, 5 } }, - { /* 16 */ 1, { 5, 6 } }, - { /* 17 */ 1, { 7, 4 } }, - { /* 18 */ 1, { 4, 7 } }, - { /* 19 */ 1, { 5, 7 } }, - { /* 20 */ 1, { 7, 5 } }, - { /* 21 */ 0, { 2, 3 } }, - { /* 22 */ 0, { 3, 4 } }, - { /* 23 */ 1, { 7, 6 } }, - { /* 24 */ 1, { 6, 6 } }, - { /* 25 */ 1, { 6, 7 } }, - { /* 26 */ 1, { 7, 7 } } +static hcb_bin_pair hcb7[127] = { + { /* 0 */ 0, { 1, 2 } }, + { /* 1 */ 1, { 0, 0 } }, + { /* 2 */ 0, { 1, 2 } }, + { /* 3 */ 0, { 2, 3 } }, + { /* 4 */ 0, { 3, 4 } }, + { /* 5 */ 1, { 1, 0 } }, + { /* 6 */ 1, { 0, 1 } }, + { /* 7 */ 0, { 2, 3 } }, + { /* 8 */ 0, { 3, 4 } }, + { /* 9 */ 1, { 1, 1 } }, + { /* 10 */ 0, { 3, 4 } }, + { /* 11 */ 0, { 4, 5 } }, + { /* 12 */ 0, { 5, 6 } }, + { /* 13 */ 0, { 6, 7 } }, + { /* 14 */ 0, { 7, 8 } }, + { /* 15 */ 0, { 8, 9 } }, + { /* 16 */ 0, { 9, 10 } }, + { /* 17 */ 0, { 10, 11 } }, + { /* 18 */ 0, { 11, 12 } }, + { /* 19 */ 1, { 2, 1 } }, + { /* 20 */ 1, { 1, 2 } }, + { /* 21 */ 1, { 2, 0 } }, + { /* 22 */ 1, { 0, 2 } }, + { /* 23 */ 0, { 8, 9 } }, + { /* 24 */ 0, { 9, 10 } }, + { /* 25 */ 0, { 10, 11 } }, + { /* 26 */ 0, { 11, 12 } }, + { /* 27 */ 0, { 12, 13 } }, + { /* 28 */ 0, { 13, 14 } }, + { /* 29 */ 0, { 14, 15 } }, + { /* 30 */ 0, { 15, 16 } }, + { /* 31 */ 1, { 3, 1 } }, + { /* 32 */ 1, { 1, 3 } }, + { /* 33 */ 1, { 2, 2 } }, + { /* 34 */ 1, { 3, 0 } }, + { /* 35 */ 1, { 0, 3 } }, + { /* 36 */ 0, { 11, 12 } }, + { /* 37 */ 0, { 12, 13 } }, + { /* 38 */ 0, { 13, 14 } }, + { /* 39 */ 0, { 14, 15 } }, + { /* 40 */ 0, { 15, 16 } }, + { /* 41 */ 0, { 16, 17 } }, + { /* 42 */ 0, { 17, 18 } }, + { /* 43 */ 0, { 18, 19 } }, + { /* 44 */ 0, { 19, 20 } }, + { /* 45 */ 0, { 20, 21 } }, + { /* 46 */ 0, { 21, 22 } }, + { /* 47 */ 1, { 2, 3 } }, + { /* 48 */ 1, { 3, 2 } }, + { /* 49 */ 1, { 1, 4 } }, + { /* 50 */ 1, { 4, 1 } }, + { /* 51 */ 1, { 1, 5 } }, + { /* 52 */ 1, { 5, 1 } }, + { /* 53 */ 1, { 3, 3 } }, + { /* 54 */ 1, { 2, 4 } }, + { /* 55 */ 1, { 0, 4 } }, + { /* 56 */ 1, { 4, 0 } }, + { /* 57 */ 0, { 12, 13 } }, + { /* 58 */ 0, { 13, 14 } }, + { /* 59 */ 0, { 14, 15 } }, + { /* 60 */ 0, { 15, 16 } }, + { /* 61 */ 0, { 16, 17 } }, + { /* 62 */ 0, { 17, 18 } }, + { /* 63 */ 0, { 18, 19 } }, + { /* 64 */ 0, { 19, 20 } }, + { /* 65 */ 0, { 20, 21 } }, + { /* 66 */ 0, { 21, 22 } }, + { /* 67 */ 0, { 22, 23 } }, + { /* 68 */ 0, { 23, 24 } }, + { /* 69 */ 1, { 4, 2 } }, + { /* 70 */ 1, { 2, 5 } }, + { /* 71 */ 1, { 5, 2 } }, + { /* 72 */ 1, { 0, 5 } }, + { /* 73 */ 1, { 6, 1 } }, + { /* 74 */ 1, { 5, 0 } }, + { /* 75 */ 1, { 1, 6 } }, + { /* 76 */ 1, { 4, 3 } }, + { /* 77 */ 1, { 3, 5 } }, + { /* 78 */ 1, { 3, 4 } }, + { /* 79 */ 1, { 5, 3 } }, + { /* 80 */ 1, { 2, 6 } }, + { /* 81 */ 1, { 6, 2 } }, + { /* 82 */ 1, { 1, 7 } }, + { /* 83 */ 0, { 10, 11 } }, + { /* 84 */ 0, { 11, 12 } }, + { /* 85 */ 0, { 12, 13 } }, + { /* 86 */ 0, { 13, 14 } }, + { /* 87 */ 0, { 14, 15 } }, + { /* 88 */ 0, { 15, 16 } }, + { /* 89 */ 0, { 16, 17 } }, + { /* 90 */ 0, { 17, 18 } }, + { /* 91 */ 0, { 18, 19 } }, + { /* 92 */ 0, { 19, 20 } }, + { /* 93 */ 1, { 3, 6 } }, + { /* 94 */ 1, { 0, 6 } }, + { /* 95 */ 1, { 6, 0 } }, + { /* 96 */ 1, { 4, 4 } }, + { /* 97 */ 1, { 7, 1 } }, + { /* 98 */ 1, { 4, 5 } }, + { /* 99 */ 1, { 7, 2 } }, + { /* 100 */ 1, { 5, 4 } }, + { /* 101 */ 1, { 6, 3 } }, + { /* 102 */ 1, { 2, 7 } }, + { /* 103 */ 1, { 7, 3 } }, + { /* 104 */ 1, { 6, 4 } }, + { /* 105 */ 1, { 5, 5 } }, + { /* 106 */ 1, { 4, 6 } }, + { /* 107 */ 1, { 3, 7 } }, + { /* 108 */ 0, { 5, 6 } }, + { /* 109 */ 0, { 6, 7 } }, + { /* 110 */ 0, { 7, 8 } }, + { /* 111 */ 0, { 8, 9 } }, + { /* 112 */ 0, { 9, 10 } }, + { /* 113 */ 1, { 7, 0 } }, + { /* 114 */ 1, { 0, 7 } }, + { /* 115 */ 1, { 6, 5 } }, + { /* 116 */ 1, { 5, 6 } }, + { /* 117 */ 1, { 7, 4 } }, + { /* 118 */ 1, { 4, 7 } }, + { /* 119 */ 1, { 5, 7 } }, + { /* 120 */ 1, { 7, 5 } }, + { /* 121 */ 0, { 2, 3 } }, + { /* 122 */ 0, { 3, 4 } }, + { /* 123 */ 1, { 7, 6 } }, + { /* 124 */ 1, { 6, 6 } }, + { /* 125 */ 1, { 6, 7 } }, + { /* 126 */ 1, { 7, 7 } } }; diff --git a/libfaad/codebook/hcb_8.h b/libfaad/codebook/hcb_8.h index 751a3ad9..c64dd7ea 100644 --- a/libfaad/codebook/hcb_8.h +++ b/libfaad/codebook/hcb_8.h @@ -36,7 +36,7 @@ * * Used to find offset into 2nd step table and number of extra bits to get */ -static hcb hcb8_1[] = { +static hcb hcb8_1[32] = { /* 3 bit codeword */ { /* 00000 */ 0, 0 }, { /* */ 0, 0 }, @@ -84,13 +84,15 @@ static hcb hcb8_1[] = { /* 8/9/10 bit codewords */ { /* 11111 */ 51, 5 } + + /* Size of second level table is 51 + 32 = 83 */ }; /* 2nd step table * * Gives size of codeword and actual data (x,y,v,w) */ -static hcb_2_pair hcb8_2[] = { +static hcb_2_pair hcb8_2[83] = { /* 3 bit codeword */ { 3, 1, 1 }, diff --git a/libfaad/codebook/hcb_9.h b/libfaad/codebook/hcb_9.h index 37e3fdcc..a4eec045 100644 --- a/libfaad/codebook/hcb_9.h +++ b/libfaad/codebook/hcb_9.h @@ -31,342 +31,342 @@ /* Binary search huffman table HCB_9 */ -static hcb_bin_pair hcb9[] = { - { /* 0 */ 0, { 1, 2 } }, - { /* 1 */ 1, { 0, 0 } }, - { /* 2 */ 0, { 1, 2 } }, - { /* 3 */ 0, { 2, 3 } }, - { /* 4 */ 0, { 3, 4 } }, - { /* 5 */ 1, { 1, 0 } }, - { /* 6 */ 1, { 0, 1 } }, - { /* 7 */ 0, { 2, 3 } }, - { /* 8 */ 0, { 3, 4 } }, - { /* 9 */ 1, { 1, 1 } }, - { /* 10 */ 0, { 3, 4 } }, - { /* 11 */ 0, { 4, 5 } }, - { /* 12 */ 0, { 5, 6 } }, - { /* 13 */ 0, { 6, 7 } }, - { /* 14 */ 0, { 7, 8 } }, - { /* 15 */ 0, { 8, 9 } }, - { /* 16 */ 0, { 9, 10 } }, - { /* 17 */ 0, { 10, 11 } }, - { /* 18 */ 0, { 11, 12 } }, - { /* 19 */ 1, { 2, 1 } }, - { /* 20 */ 1, { 1, 2 } }, - { /* 21 */ 1, { 2, 0 } }, - { /* 22 */ 1, { 0, 2 } }, - { /* 23 */ 0, { 8, 9 } }, - { /* 24 */ 0, { 9, 10 } }, - { /* 25 */ 0, { 10, 11 } }, - { /* 26 */ 0, { 11, 12 } }, - { /* 27 */ 0, { 12, 13 } }, - { /* 28 */ 0, { 13, 14 } }, - { /* 29 */ 0, { 14, 15 } }, - { /* 30 */ 0, { 15, 16 } }, - { /* 31 */ 1, { 3, 1 } }, - { /* 32 */ 1, { 2, 2 } }, - { /* 33 */ 1, { 1, 3 } }, - { /* 34 */ 0, { 13, 14 } }, - { /* 35 */ 0, { 14, 15 } }, - { /* 36 */ 0, { 15, 16 } }, - { /* 37 */ 0, { 16, 17 } }, - { /* 38 */ 0, { 17, 18 } }, - { /* 39 */ 0, { 18, 19 } }, - { /* 40 */ 0, { 19, 20 } }, - { /* 41 */ 0, { 20, 21 } }, - { /* 42 */ 0, { 21, 22 } }, - { /* 43 */ 0, { 22, 23 } }, - { /* 44 */ 0, { 23, 24 } }, - { /* 45 */ 0, { 24, 25 } }, - { /* 46 */ 0, { 25, 26 } }, - { /* 47 */ 1, { 3, 0 } }, - { /* 48 */ 1, { 0, 3 } }, - { /* 49 */ 1, { 2, 3 } }, - { /* 50 */ 1, { 3, 2 } }, - { /* 51 */ 1, { 1, 4 } }, - { /* 52 */ 1, { 4, 1 } }, - { /* 53 */ 1, { 2, 4 } }, - { /* 54 */ 1, { 1, 5 } }, - { /* 55 */ 0, { 18, 19 } }, - { /* 56 */ 0, { 19, 20 } }, - { /* 57 */ 0, { 20, 21 } }, - { /* 58 */ 0, { 21, 22 } }, - { /* 59 */ 0, { 22, 23 } }, - { /* 60 */ 0, { 23, 24 } }, - { /* 61 */ 0, { 24, 25 } }, - { /* 62 */ 0, { 25, 26 } }, - { /* 63 */ 0, { 26, 27 } }, - { /* 64 */ 0, { 27, 28 } }, - { /* 65 */ 0, { 28, 29 } }, - { /* 66 */ 0, { 29, 30 } }, - { /* 67 */ 0, { 30, 31 } }, - { /* 68 */ 0, { 31, 32 } }, - { /* 69 */ 0, { 32, 33 } }, - { /* 70 */ 0, { 33, 34 } }, - { /* 71 */ 0, { 34, 35 } }, - { /* 72 */ 0, { 35, 36 } }, - { /* 73 */ 1, { 4, 2 } }, - { /* 74 */ 1, { 3, 3 } }, - { /* 75 */ 1, { 0, 4 } }, - { /* 76 */ 1, { 4, 0 } }, - { /* 77 */ 1, { 5, 1 } }, - { /* 78 */ 1, { 2, 5 } }, - { /* 79 */ 1, { 1, 6 } }, - { /* 80 */ 1, { 3, 4 } }, - { /* 81 */ 1, { 5, 2 } }, - { /* 82 */ 1, { 6, 1 } }, - { /* 83 */ 1, { 4, 3 } }, - { /* 84 */ 0, { 25, 26 } }, - { /* 85 */ 0, { 26, 27 } }, - { /* 86 */ 0, { 27, 28 } }, - { /* 87 */ 0, { 28, 29 } }, - { /* 88 */ 0, { 29, 30 } }, - { /* 89 */ 0, { 30, 31 } }, - { /* 90 */ 0, { 31, 32 } }, - { /* 91 */ 0, { 32, 33 } }, - { /* 92 */ 0, { 33, 34 } }, - { /* 93 */ 0, { 34, 35 } }, - { /* 94 */ 0, { 35, 36 } }, - { /* 95 */ 0, { 36, 37 } }, - { /* 96 */ 0, { 37, 38 } }, - { /* 97 */ 0, { 38, 39 } }, - { /* 98 */ 0, { 39, 40 } }, - { /* 99 */ 0, { 40, 41 } }, - { /* 00 */ 0, { 41, 42 } }, - { /* 01 */ 0, { 42, 43 } }, - { /* 02 */ 0, { 43, 44 } }, - { /* 03 */ 0, { 44, 45 } }, - { /* 04 */ 0, { 45, 46 } }, - { /* 05 */ 0, { 46, 47 } }, - { /* 06 */ 0, { 47, 48 } }, - { /* 07 */ 0, { 48, 49 } }, - { /* 08 */ 0, { 49, 50 } }, - { /* 09 */ 1, { 0, 5 } }, - { /* 10 */ 1, { 2, 6 } }, - { /* 11 */ 1, { 5, 0 } }, - { /* 12 */ 1, { 1, 7 } }, - { /* 13 */ 1, { 3, 5 } }, - { /* 14 */ 1, { 1, 8 } }, - { /* 15 */ 1, { 8, 1 } }, - { /* 16 */ 1, { 4, 4 } }, - { /* 17 */ 1, { 5, 3 } }, - { /* 18 */ 1, { 6, 2 } }, - { /* 19 */ 1, { 7, 1 } }, - { /* 20 */ 1, { 0, 6 } }, - { /* 21 */ 1, { 8, 2 } }, - { /* 22 */ 1, { 2, 8 } }, - { /* 23 */ 1, { 3, 6 } }, - { /* 24 */ 1, { 2, 7 } }, - { /* 25 */ 1, { 4, 5 } }, - { /* 26 */ 1, { 9, 1 } }, - { /* 27 */ 1, { 1, 9 } }, - { /* 28 */ 1, { 7, 2 } }, - { /* 29 */ 0, { 30, 31 } }, - { /* 30 */ 0, { 31, 32 } }, - { /* 31 */ 0, { 32, 33 } }, - { /* 32 */ 0, { 33, 34 } }, - { /* 33 */ 0, { 34, 35 } }, - { /* 34 */ 0, { 35, 36 } }, - { /* 35 */ 0, { 36, 37 } }, - { /* 36 */ 0, { 37, 38 } }, - { /* 37 */ 0, { 38, 39 } }, - { /* 38 */ 0, { 39, 40 } }, - { /* 39 */ 0, { 40, 41 } }, - { /* 40 */ 0, { 41, 42 } }, - { /* 41 */ 0, { 42, 43 } }, - { /* 42 */ 0, { 43, 44 } }, - { /* 43 */ 0, { 44, 45 } }, - { /* 44 */ 0, { 45, 46 } }, - { /* 45 */ 0, { 46, 47 } }, - { /* 46 */ 0, { 47, 48 } }, - { /* 47 */ 0, { 48, 49 } }, - { /* 48 */ 0, { 49, 50 } }, - { /* 49 */ 0, { 50, 51 } }, - { /* 50 */ 0, { 51, 52 } }, - { /* 51 */ 0, { 52, 53 } }, - { /* 52 */ 0, { 53, 54 } }, - { /* 53 */ 0, { 54, 55 } }, - { /* 54 */ 0, { 55, 56 } }, - { /* 55 */ 0, { 56, 57 } }, - { /* 56 */ 0, { 57, 58 } }, - { /* 57 */ 0, { 58, 59 } }, - { /* 58 */ 0, { 59, 60 } }, - { /* 59 */ 1, { 6, 0 } }, - { /* 60 */ 1, { 5, 4 } }, - { /* 61 */ 1, { 6, 3 } }, - { /* 62 */ 1, { 8, 3 } }, - { /* 63 */ 1, { 0, 7 } }, - { /* 64 */ 1, { 9, 2 } }, - { /* 65 */ 1, { 3, 8 } }, - { /* 66 */ 1, { 4, 6 } }, - { /* 67 */ 1, { 3, 7 } }, - { /* 68 */ 1, { 0, 8 } }, - { /* 69 */ 1, { 10, 1 } }, - { /* 70 */ 1, { 6, 4 } }, - { /* 71 */ 1, { 2, 9 } }, - { /* 72 */ 1, { 5, 5 } }, - { /* 73 */ 1, { 8, 0 } }, - { /* 74 */ 1, { 7, 0 } }, - { /* 75 */ 1, { 7, 3 } }, - { /* 76 */ 1, { 10, 2 } }, - { /* 77 */ 1, { 9, 3 } }, - { /* 78 */ 1, { 8, 4 } }, - { /* 79 */ 1, { 1, 10 } }, - { /* 80 */ 1, { 7, 4 } }, - { /* 81 */ 1, { 6, 5 } }, - { /* 82 */ 1, { 5, 6 } }, - { /* 83 */ 1, { 4, 8 } }, - { /* 84 */ 1, { 4, 7 } }, - { /* 85 */ 1, { 3, 9 } }, - { /* 86 */ 1, { 11, 1 } }, - { /* 87 */ 1, { 5, 8 } }, - { /* 88 */ 1, { 9, 0 } }, - { /* 89 */ 1, { 8, 5 } }, - { /* 90 */ 0, { 29, 30 } }, - { /* 91 */ 0, { 30, 31 } }, - { /* 92 */ 0, { 31, 32 } }, - { /* 93 */ 0, { 32, 33 } }, - { /* 94 */ 0, { 33, 34 } }, - { /* 95 */ 0, { 34, 35 } }, - { /* 96 */ 0, { 35, 36 } }, - { /* 97 */ 0, { 36, 37 } }, - { /* 98 */ 0, { 37, 38 } }, - { /* 99 */ 0, { 38, 39 } }, - { /* 00 */ 0, { 39, 40 } }, - { /* 01 */ 0, { 40, 41 } }, - { /* 02 */ 0, { 41, 42 } }, - { /* 03 */ 0, { 42, 43 } }, - { /* 04 */ 0, { 43, 44 } }, - { /* 05 */ 0, { 44, 45 } }, - { /* 06 */ 0, { 45, 46 } }, - { /* 07 */ 0, { 46, 47 } }, - { /* 08 */ 0, { 47, 48 } }, - { /* 09 */ 0, { 48, 49 } }, - { /* 10 */ 0, { 49, 50 } }, - { /* 11 */ 0, { 50, 51 } }, - { /* 12 */ 0, { 51, 52 } }, - { /* 13 */ 0, { 52, 53 } }, - { /* 14 */ 0, { 53, 54 } }, - { /* 15 */ 0, { 54, 55 } }, - { /* 16 */ 0, { 55, 56 } }, - { /* 17 */ 0, { 56, 57 } }, - { /* 18 */ 0, { 57, 58 } }, - { /* 19 */ 1, { 10, 3 } }, - { /* 20 */ 1, { 2, 10 } }, - { /* 21 */ 1, { 0, 9 } }, - { /* 22 */ 1, { 11, 2 } }, - { /* 23 */ 1, { 9, 4 } }, - { /* 24 */ 1, { 6, 6 } }, - { /* 25 */ 1, { 12, 1 } }, - { /* 26 */ 1, { 4, 9 } }, - { /* 27 */ 1, { 8, 6 } }, - { /* 28 */ 1, { 1, 11 } }, - { /* 29 */ 1, { 9, 5 } }, - { /* 30 */ 1, { 10, 4 } }, - { /* 31 */ 1, { 5, 7 } }, - { /* 32 */ 1, { 7, 5 } }, - { /* 33 */ 1, { 2, 11 } }, - { /* 34 */ 1, { 1, 12 } }, - { /* 35 */ 1, { 12, 2 } }, - { /* 36 */ 1, { 11, 3 } }, - { /* 37 */ 1, { 3, 10 } }, - { /* 38 */ 1, { 5, 9 } }, - { /* 39 */ 1, { 6, 7 } }, - { /* 40 */ 1, { 8, 7 } }, - { /* 41 */ 1, { 11, 4 } }, - { /* 42 */ 1, { 0, 10 } }, - { /* 43 */ 1, { 7, 6 } }, - { /* 44 */ 1, { 12, 3 } }, - { /* 45 */ 1, { 10, 0 } }, - { /* 46 */ 1, { 10, 5 } }, - { /* 47 */ 1, { 4, 10 } }, - { /* 48 */ 1, { 6, 8 } }, - { /* 49 */ 1, { 2, 12 } }, - { /* 50 */ 1, { 9, 6 } }, - { /* 51 */ 1, { 9, 7 } }, - { /* 52 */ 1, { 4, 11 } }, - { /* 53 */ 1, { 11, 0 } }, - { /* 54 */ 1, { 6, 9 } }, - { /* 55 */ 1, { 3, 11 } }, - { /* 56 */ 1, { 5, 10 } }, - { /* 57 */ 0, { 20, 21 } }, - { /* 58 */ 0, { 21, 22 } }, - { /* 59 */ 0, { 22, 23 } }, - { /* 60 */ 0, { 23, 24 } }, - { /* 61 */ 0, { 24, 25 } }, - { /* 62 */ 0, { 25, 26 } }, - { /* 63 */ 0, { 26, 27 } }, - { /* 64 */ 0, { 27, 28 } }, - { /* 65 */ 0, { 28, 29 } }, - { /* 66 */ 0, { 29, 30 } }, - { /* 67 */ 0, { 30, 31 } }, - { /* 68 */ 0, { 31, 32 } }, - { /* 69 */ 0, { 32, 33 } }, - { /* 70 */ 0, { 33, 34 } }, - { /* 71 */ 0, { 34, 35 } }, - { /* 72 */ 0, { 35, 36 } }, - { /* 73 */ 0, { 36, 37 } }, - { /* 74 */ 0, { 37, 38 } }, - { /* 75 */ 0, { 38, 39 } }, - { /* 76 */ 0, { 39, 40 } }, - { /* 77 */ 1, { 8, 8 } }, - { /* 78 */ 1, { 7, 8 } }, - { /* 79 */ 1, { 12, 5 } }, - { /* 80 */ 1, { 3, 12 } }, - { /* 81 */ 1, { 11, 5 } }, - { /* 82 */ 1, { 7, 7 } }, - { /* 83 */ 1, { 12, 4 } }, - { /* 84 */ 1, { 11, 6 } }, - { /* 85 */ 1, { 10, 6 } }, - { /* 86 */ 1, { 4, 12 } }, - { /* 87 */ 1, { 7, 9 } }, - { /* 88 */ 1, { 5, 11 } }, - { /* 89 */ 1, { 0, 11 } }, - { /* 90 */ 1, { 12, 6 } }, - { /* 91 */ 1, { 6, 10 } }, - { /* 92 */ 1, { 12, 0 } }, - { /* 93 */ 1, { 10, 7 } }, - { /* 94 */ 1, { 5, 12 } }, - { /* 95 */ 1, { 7, 10 } }, - { /* 96 */ 1, { 9, 8 } }, - { /* 97 */ 1, { 0, 12 } }, - { /* 98 */ 1, { 11, 7 } }, - { /* 99 */ 1, { 8, 9 } }, - { /* 00 */ 1, { 9, 9 } }, - { /* 01 */ 1, { 10, 8 } }, - { /* 02 */ 1, { 7, 11 } }, - { /* 03 */ 1, { 12, 7 } }, - { /* 04 */ 1, { 6, 11 } }, - { /* 05 */ 1, { 8, 11 } }, - { /* 06 */ 1, { 11, 8 } }, - { /* 07 */ 1, { 7, 12 } }, - { /* 08 */ 1, { 6, 12 } }, - { /* 09 */ 0, { 8, 9 } }, - { /* 10 */ 0, { 9, 10 } }, - { /* 11 */ 0, { 10, 11 } }, - { /* 12 */ 0, { 11, 12 } }, - { /* 13 */ 0, { 12, 13 } }, - { /* 14 */ 0, { 13, 14 } }, - { /* 15 */ 0, { 14, 15 } }, - { /* 16 */ 0, { 15, 16 } }, - { /* 17 */ 1, { 8, 10 } }, - { /* 18 */ 1, { 10, 9 } }, - { /* 19 */ 1, { 8, 12 } }, - { /* 20 */ 1, { 9, 10 } }, - { /* 21 */ 1, { 9, 11 } }, - { /* 22 */ 1, { 9, 12 } }, - { /* 23 */ 1, { 10, 11 } }, - { /* 24 */ 1, { 12, 9 } }, - { /* 25 */ 1, { 10, 10 } }, - { /* 26 */ 1, { 11, 9 } }, - { /* 27 */ 1, { 12, 8 } }, - { /* 28 */ 1, { 11, 10 } }, - { /* 29 */ 1, { 12, 10 } }, - { /* 30 */ 1, { 12, 11 } }, - { /* 31 */ 0, { 2, 3 } }, - { /* 32 */ 0, { 3, 4 } }, - { /* 33 */ 1, { 10, 12 } }, - { /* 34 */ 1, { 11, 11 } }, - { /* 35 */ 1, { 11, 12 } }, - { /* 36 */ 1, { 12, 12 } } +static hcb_bin_pair hcb9[337] = { + { /* 0 */ 0, { 1, 2 } }, + { /* 1 */ 1, { 0, 0 } }, + { /* 2 */ 0, { 1, 2 } }, + { /* 3 */ 0, { 2, 3 } }, + { /* 4 */ 0, { 3, 4 } }, + { /* 5 */ 1, { 1, 0 } }, + { /* 6 */ 1, { 0, 1 } }, + { /* 7 */ 0, { 2, 3 } }, + { /* 8 */ 0, { 3, 4 } }, + { /* 9 */ 1, { 1, 1 } }, + { /* 10 */ 0, { 3, 4 } }, + { /* 11 */ 0, { 4, 5 } }, + { /* 12 */ 0, { 5, 6 } }, + { /* 13 */ 0, { 6, 7 } }, + { /* 14 */ 0, { 7, 8 } }, + { /* 15 */ 0, { 8, 9 } }, + { /* 16 */ 0, { 9, 10 } }, + { /* 17 */ 0, { 10, 11 } }, + { /* 18 */ 0, { 11, 12 } }, + { /* 19 */ 1, { 2, 1 } }, + { /* 20 */ 1, { 1, 2 } }, + { /* 21 */ 1, { 2, 0 } }, + { /* 22 */ 1, { 0, 2 } }, + { /* 23 */ 0, { 8, 9 } }, + { /* 24 */ 0, { 9, 10 } }, + { /* 25 */ 0, { 10, 11 } }, + { /* 26 */ 0, { 11, 12 } }, + { /* 27 */ 0, { 12, 13 } }, + { /* 28 */ 0, { 13, 14 } }, + { /* 29 */ 0, { 14, 15 } }, + { /* 30 */ 0, { 15, 16 } }, + { /* 31 */ 1, { 3, 1 } }, + { /* 32 */ 1, { 2, 2 } }, + { /* 33 */ 1, { 1, 3 } }, + { /* 34 */ 0, { 13, 14 } }, + { /* 35 */ 0, { 14, 15 } }, + { /* 36 */ 0, { 15, 16 } }, + { /* 37 */ 0, { 16, 17 } }, + { /* 38 */ 0, { 17, 18 } }, + { /* 39 */ 0, { 18, 19 } }, + { /* 40 */ 0, { 19, 20 } }, + { /* 41 */ 0, { 20, 21 } }, + { /* 42 */ 0, { 21, 22 } }, + { /* 43 */ 0, { 22, 23 } }, + { /* 44 */ 0, { 23, 24 } }, + { /* 45 */ 0, { 24, 25 } }, + { /* 46 */ 0, { 25, 26 } }, + { /* 47 */ 1, { 3, 0 } }, + { /* 48 */ 1, { 0, 3 } }, + { /* 49 */ 1, { 2, 3 } }, + { /* 50 */ 1, { 3, 2 } }, + { /* 51 */ 1, { 1, 4 } }, + { /* 52 */ 1, { 4, 1 } }, + { /* 53 */ 1, { 2, 4 } }, + { /* 54 */ 1, { 1, 5 } }, + { /* 55 */ 0, { 18, 19 } }, + { /* 56 */ 0, { 19, 20 } }, + { /* 57 */ 0, { 20, 21 } }, + { /* 58 */ 0, { 21, 22 } }, + { /* 59 */ 0, { 22, 23 } }, + { /* 60 */ 0, { 23, 24 } }, + { /* 61 */ 0, { 24, 25 } }, + { /* 62 */ 0, { 25, 26 } }, + { /* 63 */ 0, { 26, 27 } }, + { /* 64 */ 0, { 27, 28 } }, + { /* 65 */ 0, { 28, 29 } }, + { /* 66 */ 0, { 29, 30 } }, + { /* 67 */ 0, { 30, 31 } }, + { /* 68 */ 0, { 31, 32 } }, + { /* 69 */ 0, { 32, 33 } }, + { /* 70 */ 0, { 33, 34 } }, + { /* 71 */ 0, { 34, 35 } }, + { /* 72 */ 0, { 35, 36 } }, + { /* 73 */ 1, { 4, 2 } }, + { /* 74 */ 1, { 3, 3 } }, + { /* 75 */ 1, { 0, 4 } }, + { /* 76 */ 1, { 4, 0 } }, + { /* 77 */ 1, { 5, 1 } }, + { /* 78 */ 1, { 2, 5 } }, + { /* 79 */ 1, { 1, 6 } }, + { /* 80 */ 1, { 3, 4 } }, + { /* 81 */ 1, { 5, 2 } }, + { /* 82 */ 1, { 6, 1 } }, + { /* 83 */ 1, { 4, 3 } }, + { /* 84 */ 0, { 25, 26 } }, + { /* 85 */ 0, { 26, 27 } }, + { /* 86 */ 0, { 27, 28 } }, + { /* 87 */ 0, { 28, 29 } }, + { /* 88 */ 0, { 29, 30 } }, + { /* 89 */ 0, { 30, 31 } }, + { /* 90 */ 0, { 31, 32 } }, + { /* 91 */ 0, { 32, 33 } }, + { /* 92 */ 0, { 33, 34 } }, + { /* 93 */ 0, { 34, 35 } }, + { /* 94 */ 0, { 35, 36 } }, + { /* 95 */ 0, { 36, 37 } }, + { /* 96 */ 0, { 37, 38 } }, + { /* 97 */ 0, { 38, 39 } }, + { /* 98 */ 0, { 39, 40 } }, + { /* 99 */ 0, { 40, 41 } }, + { /* 100 */ 0, { 41, 42 } }, + { /* 101 */ 0, { 42, 43 } }, + { /* 102 */ 0, { 43, 44 } }, + { /* 103 */ 0, { 44, 45 } }, + { /* 104 */ 0, { 45, 46 } }, + { /* 105 */ 0, { 46, 47 } }, + { /* 106 */ 0, { 47, 48 } }, + { /* 107 */ 0, { 48, 49 } }, + { /* 108 */ 0, { 49, 50 } }, + { /* 109 */ 1, { 0, 5 } }, + { /* 110 */ 1, { 2, 6 } }, + { /* 111 */ 1, { 5, 0 } }, + { /* 112 */ 1, { 1, 7 } }, + { /* 113 */ 1, { 3, 5 } }, + { /* 114 */ 1, { 1, 8 } }, + { /* 115 */ 1, { 8, 1 } }, + { /* 116 */ 1, { 4, 4 } }, + { /* 117 */ 1, { 5, 3 } }, + { /* 118 */ 1, { 6, 2 } }, + { /* 119 */ 1, { 7, 1 } }, + { /* 120 */ 1, { 0, 6 } }, + { /* 121 */ 1, { 8, 2 } }, + { /* 122 */ 1, { 2, 8 } }, + { /* 123 */ 1, { 3, 6 } }, + { /* 124 */ 1, { 2, 7 } }, + { /* 125 */ 1, { 4, 5 } }, + { /* 126 */ 1, { 9, 1 } }, + { /* 127 */ 1, { 1, 9 } }, + { /* 128 */ 1, { 7, 2 } }, + { /* 129 */ 0, { 30, 31 } }, + { /* 130 */ 0, { 31, 32 } }, + { /* 131 */ 0, { 32, 33 } }, + { /* 132 */ 0, { 33, 34 } }, + { /* 133 */ 0, { 34, 35 } }, + { /* 134 */ 0, { 35, 36 } }, + { /* 135 */ 0, { 36, 37 } }, + { /* 136 */ 0, { 37, 38 } }, + { /* 137 */ 0, { 38, 39 } }, + { /* 138 */ 0, { 39, 40 } }, + { /* 139 */ 0, { 40, 41 } }, + { /* 140 */ 0, { 41, 42 } }, + { /* 141 */ 0, { 42, 43 } }, + { /* 142 */ 0, { 43, 44 } }, + { /* 143 */ 0, { 44, 45 } }, + { /* 144 */ 0, { 45, 46 } }, + { /* 145 */ 0, { 46, 47 } }, + { /* 146 */ 0, { 47, 48 } }, + { /* 147 */ 0, { 48, 49 } }, + { /* 148 */ 0, { 49, 50 } }, + { /* 149 */ 0, { 50, 51 } }, + { /* 150 */ 0, { 51, 52 } }, + { /* 151 */ 0, { 52, 53 } }, + { /* 152 */ 0, { 53, 54 } }, + { /* 153 */ 0, { 54, 55 } }, + { /* 154 */ 0, { 55, 56 } }, + { /* 155 */ 0, { 56, 57 } }, + { /* 156 */ 0, { 57, 58 } }, + { /* 157 */ 0, { 58, 59 } }, + { /* 158 */ 0, { 59, 60 } }, + { /* 159 */ 1, { 6, 0 } }, + { /* 160 */ 1, { 5, 4 } }, + { /* 161 */ 1, { 6, 3 } }, + { /* 162 */ 1, { 8, 3 } }, + { /* 163 */ 1, { 0, 7 } }, + { /* 164 */ 1, { 9, 2 } }, + { /* 165 */ 1, { 3, 8 } }, + { /* 166 */ 1, { 4, 6 } }, + { /* 167 */ 1, { 3, 7 } }, + { /* 168 */ 1, { 0, 8 } }, + { /* 169 */ 1, { 10, 1 } }, + { /* 170 */ 1, { 6, 4 } }, + { /* 171 */ 1, { 2, 9 } }, + { /* 172 */ 1, { 5, 5 } }, + { /* 173 */ 1, { 8, 0 } }, + { /* 174 */ 1, { 7, 0 } }, + { /* 175 */ 1, { 7, 3 } }, + { /* 176 */ 1, { 10, 2 } }, + { /* 177 */ 1, { 9, 3 } }, + { /* 178 */ 1, { 8, 4 } }, + { /* 179 */ 1, { 1, 10 } }, + { /* 180 */ 1, { 7, 4 } }, + { /* 181 */ 1, { 6, 5 } }, + { /* 182 */ 1, { 5, 6 } }, + { /* 183 */ 1, { 4, 8 } }, + { /* 184 */ 1, { 4, 7 } }, + { /* 185 */ 1, { 3, 9 } }, + { /* 186 */ 1, { 11, 1 } }, + { /* 187 */ 1, { 5, 8 } }, + { /* 188 */ 1, { 9, 0 } }, + { /* 189 */ 1, { 8, 5 } }, + { /* 190 */ 0, { 29, 30 } }, + { /* 191 */ 0, { 30, 31 } }, + { /* 192 */ 0, { 31, 32 } }, + { /* 193 */ 0, { 32, 33 } }, + { /* 194 */ 0, { 33, 34 } }, + { /* 195 */ 0, { 34, 35 } }, + { /* 196 */ 0, { 35, 36 } }, + { /* 197 */ 0, { 36, 37 } }, + { /* 198 */ 0, { 37, 38 } }, + { /* 199 */ 0, { 38, 39 } }, + { /* 200 */ 0, { 39, 40 } }, + { /* 201 */ 0, { 40, 41 } }, + { /* 202 */ 0, { 41, 42 } }, + { /* 203 */ 0, { 42, 43 } }, + { /* 204 */ 0, { 43, 44 } }, + { /* 205 */ 0, { 44, 45 } }, + { /* 206 */ 0, { 45, 46 } }, + { /* 207 */ 0, { 46, 47 } }, + { /* 208 */ 0, { 47, 48 } }, + { /* 209 */ 0, { 48, 49 } }, + { /* 210 */ 0, { 49, 50 } }, + { /* 211 */ 0, { 50, 51 } }, + { /* 212 */ 0, { 51, 52 } }, + { /* 213 */ 0, { 52, 53 } }, + { /* 214 */ 0, { 53, 54 } }, + { /* 215 */ 0, { 54, 55 } }, + { /* 216 */ 0, { 55, 56 } }, + { /* 217 */ 0, { 56, 57 } }, + { /* 218 */ 0, { 57, 58 } }, + { /* 219 */ 1, { 10, 3 } }, + { /* 220 */ 1, { 2, 10 } }, + { /* 221 */ 1, { 0, 9 } }, + { /* 222 */ 1, { 11, 2 } }, + { /* 223 */ 1, { 9, 4 } }, + { /* 224 */ 1, { 6, 6 } }, + { /* 225 */ 1, { 12, 1 } }, + { /* 226 */ 1, { 4, 9 } }, + { /* 227 */ 1, { 8, 6 } }, + { /* 228 */ 1, { 1, 11 } }, + { /* 229 */ 1, { 9, 5 } }, + { /* 230 */ 1, { 10, 4 } }, + { /* 231 */ 1, { 5, 7 } }, + { /* 232 */ 1, { 7, 5 } }, + { /* 233 */ 1, { 2, 11 } }, + { /* 234 */ 1, { 1, 12 } }, + { /* 235 */ 1, { 12, 2 } }, + { /* 236 */ 1, { 11, 3 } }, + { /* 237 */ 1, { 3, 10 } }, + { /* 238 */ 1, { 5, 9 } }, + { /* 239 */ 1, { 6, 7 } }, + { /* 240 */ 1, { 8, 7 } }, + { /* 241 */ 1, { 11, 4 } }, + { /* 242 */ 1, { 0, 10 } }, + { /* 243 */ 1, { 7, 6 } }, + { /* 244 */ 1, { 12, 3 } }, + { /* 245 */ 1, { 10, 0 } }, + { /* 246 */ 1, { 10, 5 } }, + { /* 247 */ 1, { 4, 10 } }, + { /* 248 */ 1, { 6, 8 } }, + { /* 249 */ 1, { 2, 12 } }, + { /* 250 */ 1, { 9, 6 } }, + { /* 251 */ 1, { 9, 7 } }, + { /* 252 */ 1, { 4, 11 } }, + { /* 253 */ 1, { 11, 0 } }, + { /* 254 */ 1, { 6, 9 } }, + { /* 255 */ 1, { 3, 11 } }, + { /* 256 */ 1, { 5, 10 } }, + { /* 257 */ 0, { 20, 21 } }, + { /* 258 */ 0, { 21, 22 } }, + { /* 259 */ 0, { 22, 23 } }, + { /* 260 */ 0, { 23, 24 } }, + { /* 261 */ 0, { 24, 25 } }, + { /* 262 */ 0, { 25, 26 } }, + { /* 263 */ 0, { 26, 27 } }, + { /* 264 */ 0, { 27, 28 } }, + { /* 265 */ 0, { 28, 29 } }, + { /* 266 */ 0, { 29, 30 } }, + { /* 267 */ 0, { 30, 31 } }, + { /* 268 */ 0, { 31, 32 } }, + { /* 269 */ 0, { 32, 33 } }, + { /* 270 */ 0, { 33, 34 } }, + { /* 271 */ 0, { 34, 35 } }, + { /* 272 */ 0, { 35, 36 } }, + { /* 273 */ 0, { 36, 37 } }, + { /* 274 */ 0, { 37, 38 } }, + { /* 275 */ 0, { 38, 39 } }, + { /* 276 */ 0, { 39, 40 } }, + { /* 277 */ 1, { 8, 8 } }, + { /* 278 */ 1, { 7, 8 } }, + { /* 279 */ 1, { 12, 5 } }, + { /* 280 */ 1, { 3, 12 } }, + { /* 281 */ 1, { 11, 5 } }, + { /* 282 */ 1, { 7, 7 } }, + { /* 283 */ 1, { 12, 4 } }, + { /* 284 */ 1, { 11, 6 } }, + { /* 285 */ 1, { 10, 6 } }, + { /* 286 */ 1, { 4, 12 } }, + { /* 287 */ 1, { 7, 9 } }, + { /* 288 */ 1, { 5, 11 } }, + { /* 289 */ 1, { 0, 11 } }, + { /* 290 */ 1, { 12, 6 } }, + { /* 291 */ 1, { 6, 10 } }, + { /* 292 */ 1, { 12, 0 } }, + { /* 293 */ 1, { 10, 7 } }, + { /* 294 */ 1, { 5, 12 } }, + { /* 295 */ 1, { 7, 10 } }, + { /* 296 */ 1, { 9, 8 } }, + { /* 297 */ 1, { 0, 12 } }, + { /* 298 */ 1, { 11, 7 } }, + { /* 299 */ 1, { 8, 9 } }, + { /* 300 */ 1, { 9, 9 } }, + { /* 301 */ 1, { 10, 8 } }, + { /* 302 */ 1, { 7, 11 } }, + { /* 303 */ 1, { 12, 7 } }, + { /* 304 */ 1, { 6, 11 } }, + { /* 305 */ 1, { 8, 11 } }, + { /* 306 */ 1, { 11, 8 } }, + { /* 307 */ 1, { 7, 12 } }, + { /* 308 */ 1, { 6, 12 } }, + { /* 309 */ 0, { 8, 9 } }, + { /* 310 */ 0, { 9, 10 } }, + { /* 311 */ 0, { 10, 11 } }, + { /* 312 */ 0, { 11, 12 } }, + { /* 313 */ 0, { 12, 13 } }, + { /* 314 */ 0, { 13, 14 } }, + { /* 315 */ 0, { 14, 15 } }, + { /* 316 */ 0, { 15, 16 } }, + { /* 317 */ 1, { 8, 10 } }, + { /* 318 */ 1, { 10, 9 } }, + { /* 319 */ 1, { 8, 12 } }, + { /* 320 */ 1, { 9, 10 } }, + { /* 321 */ 1, { 9, 11 } }, + { /* 322 */ 1, { 9, 12 } }, + { /* 323 */ 1, { 10, 11 } }, + { /* 324 */ 1, { 12, 9 } }, + { /* 325 */ 1, { 10, 10 } }, + { /* 326 */ 1, { 11, 9 } }, + { /* 327 */ 1, { 12, 8 } }, + { /* 328 */ 1, { 11, 10 } }, + { /* 329 */ 1, { 12, 10 } }, + { /* 330 */ 1, { 12, 11 } }, + { /* 331 */ 0, { 2, 3 } }, + { /* 332 */ 0, { 3, 4 } }, + { /* 333 */ 1, { 10, 12 } }, + { /* 334 */ 1, { 11, 11 } }, + { /* 335 */ 1, { 11, 12 } }, + { /* 336 */ 1, { 12, 12 } } }; diff --git a/libfaad/codebook/hcb_sf.h b/libfaad/codebook/hcb_sf.h index 0fc9f59f..3590c079 100644 --- a/libfaad/codebook/hcb_sf.h +++ b/libfaad/codebook/hcb_sf.h @@ -31,246 +31,246 @@ /* Binary search huffman table HCB_SF */ -static uint8_t hcb_sf[][2] = { - { /* 0 */ 1, 2 }, - { /* 1 */ 60, 0 }, - { /* 2 */ 1, 2 }, - { /* 3 */ 2, 3 }, - { /* 4 */ 3, 4 }, - { /* 5 */ 59, 0 }, - { /* 6 */ 3, 4 }, - { /* 7 */ 4, 5 }, - { /* 8 */ 5, 6 }, - { /* 9 */ 61, 0 }, - { /* 10 */ 58, 0 }, - { /* 11 */ 62, 0 }, - { /* 12 */ 3, 4 }, - { /* 13 */ 4, 5 }, - { /* 14 */ 5, 6 }, - { /* 15 */ 57, 0 }, - { /* 16 */ 63, 0 }, - { /* 17 */ 4, 5 }, - { /* 18 */ 5, 6 }, - { /* 19 */ 6, 7 }, - { /* 20 */ 7, 8 }, - { /* 21 */ 56, 0 }, - { /* 22 */ 64, 0 }, - { /* 23 */ 55, 0 }, - { /* 24 */ 65, 0 }, - { /* 25 */ 4, 5 }, - { /* 26 */ 5, 6 }, - { /* 27 */ 6, 7 }, - { /* 28 */ 7, 8 }, - { /* 29 */ 66, 0 }, - { /* 30 */ 54, 0 }, - { /* 31 */ 67, 0 }, - { /* 32 */ 5, 6 }, - { /* 33 */ 6, 7 }, - { /* 34 */ 7, 8 }, - { /* 35 */ 8, 9 }, - { /* 36 */ 9, 10 }, - { /* 37 */ 53, 0 }, - { /* 38 */ 68, 0 }, - { /* 39 */ 52, 0 }, - { /* 40 */ 69, 0 }, - { /* 41 */ 51, 0 }, - { /* 42 */ 5, 6 }, - { /* 43 */ 6, 7 }, - { /* 44 */ 7, 8 }, - { /* 45 */ 8, 9 }, - { /* 46 */ 9, 10 }, - { /* 47 */ 70, 0 }, - { /* 48 */ 50, 0 }, - { /* 49 */ 49, 0 }, - { /* 50 */ 71, 0 }, - { /* 51 */ 6, 7 }, - { /* 52 */ 7, 8 }, - { /* 53 */ 8, 9 }, - { /* 54 */ 9, 10 }, - { /* 55 */ 10, 11 }, - { /* 56 */ 11, 12 }, - { /* 57 */ 72, 0 }, - { /* 58 */ 48, 0 }, - { /* 59 */ 73, 0 }, - { /* 60 */ 47, 0 }, - { /* 61 */ 74, 0 }, - { /* 62 */ 46, 0 }, - { /* 63 */ 6, 7 }, - { /* 64 */ 7, 8 }, - { /* 65 */ 8, 9 }, - { /* 66 */ 9, 10 }, - { /* 67 */ 10, 11 }, - { /* 68 */ 11, 12 }, - { /* 69 */ 76, 0 }, - { /* 70 */ 75, 0 }, - { /* 71 */ 77, 0 }, - { /* 72 */ 78, 0 }, - { /* 73 */ 45, 0 }, - { /* 74 */ 43, 0 }, - { /* 75 */ 6, 7 }, - { /* 76 */ 7, 8 }, - { /* 77 */ 8, 9 }, - { /* 78 */ 9, 10 }, - { /* 79 */ 10, 11 }, - { /* 80 */ 11, 12 }, - { /* 81 */ 44, 0 }, - { /* 82 */ 79, 0 }, - { /* 83 */ 42, 0 }, - { /* 84 */ 41, 0 }, - { /* 85 */ 80, 0 }, - { /* 86 */ 40, 0 }, - { /* 87 */ 6, 7 }, - { /* 88 */ 7, 8 }, - { /* 89 */ 8, 9 }, - { /* 90 */ 9, 10 }, - { /* 91 */ 10, 11 }, - { /* 92 */ 11, 12 }, - { /* 93 */ 81, 0 }, - { /* 94 */ 39, 0 }, - { /* 95 */ 82, 0 }, - { /* 96 */ 38, 0 }, - { /* 97 */ 83, 0 }, - { /* 98 */ 7, 8 }, - { /* 99 */ 8, 9 }, - { /* 00 */ 9, 10 }, - { /* 01 */ 10, 11 }, - { /* 02 */ 11, 12 }, - { /* 03 */ 12, 13 }, - { /* 04 */ 13, 14 }, - { /* 05 */ 37, 0 }, - { /* 06 */ 35, 0 }, - { /* 07 */ 85, 0 }, - { /* 08 */ 33, 0 }, - { /* 09 */ 36, 0 }, - { /* 10 */ 34, 0 }, - { /* 11 */ 84, 0 }, - { /* 12 */ 32, 0 }, - { /* 13 */ 6, 7 }, - { /* 14 */ 7, 8 }, - { /* 15 */ 8, 9 }, - { /* 16 */ 9, 10 }, - { /* 17 */ 10, 11 }, - { /* 18 */ 11, 12 }, - { /* 19 */ 87, 0 }, - { /* 20 */ 89, 0 }, - { /* 21 */ 30, 0 }, - { /* 22 */ 31, 0 }, - { /* 23 */ 8, 9 }, - { /* 24 */ 9, 10 }, - { /* 25 */ 10, 11 }, - { /* 26 */ 11, 12 }, - { /* 27 */ 12, 13 }, - { /* 28 */ 13, 14 }, - { /* 29 */ 14, 15 }, - { /* 30 */ 15, 16 }, - { /* 31 */ 86, 0 }, - { /* 32 */ 29, 0 }, - { /* 33 */ 26, 0 }, - { /* 34 */ 27, 0 }, - { /* 35 */ 28, 0 }, - { /* 36 */ 24, 0 }, - { /* 37 */ 88, 0 }, - { /* 38 */ 9, 10 }, - { /* 39 */ 10, 11 }, - { /* 40 */ 11, 12 }, - { /* 41 */ 12, 13 }, - { /* 42 */ 13, 14 }, - { /* 43 */ 14, 15 }, - { /* 44 */ 15, 16 }, - { /* 45 */ 16, 17 }, - { /* 46 */ 17, 18 }, - { /* 47 */ 25, 0 }, - { /* 48 */ 22, 0 }, - { /* 49 */ 23, 0 }, - { /* 50 */ 15, 16 }, - { /* 51 */ 16, 17 }, - { /* 52 */ 17, 18 }, - { /* 53 */ 18, 19 }, - { /* 54 */ 19, 20 }, - { /* 55 */ 20, 21 }, - { /* 56 */ 21, 22 }, - { /* 57 */ 22, 23 }, - { /* 58 */ 23, 24 }, - { /* 59 */ 24, 25 }, - { /* 60 */ 25, 26 }, - { /* 61 */ 26, 27 }, - { /* 62 */ 27, 28 }, - { /* 63 */ 28, 29 }, - { /* 64 */ 29, 30 }, - { /* 65 */ 90, 0 }, - { /* 66 */ 21, 0 }, - { /* 67 */ 19, 0 }, - { /* 68 */ 3, 0 }, - { /* 69 */ 1, 0 }, - { /* 70 */ 2, 0 }, - { /* 71 */ 0, 0 }, - { /* 72 */ 23, 24 }, - { /* 73 */ 24, 25 }, - { /* 74 */ 25, 26 }, - { /* 75 */ 26, 27 }, - { /* 76 */ 27, 28 }, - { /* 77 */ 28, 29 }, - { /* 78 */ 29, 30 }, - { /* 79 */ 30, 31 }, - { /* 80 */ 31, 32 }, - { /* 81 */ 32, 33 }, - { /* 82 */ 33, 34 }, - { /* 83 */ 34, 35 }, - { /* 84 */ 35, 36 }, - { /* 85 */ 36, 37 }, - { /* 86 */ 37, 38 }, - { /* 87 */ 38, 39 }, - { /* 88 */ 39, 40 }, - { /* 89 */ 40, 41 }, - { /* 90 */ 41, 42 }, - { /* 91 */ 42, 43 }, - { /* 92 */ 43, 44 }, - { /* 93 */ 44, 45 }, - { /* 94 */ 45, 46 }, - { /* 95 */ 98, 0 }, - { /* 96 */ 99, 0 }, - { /* 97 */ 100, 0 }, - { /* 98 */ 101, 0 }, - { /* 99 */ 102, 0 }, - { /* 00 */ 117, 0 }, - { /* 01 */ 97, 0 }, - { /* 02 */ 91, 0 }, - { /* 03 */ 92, 0 }, - { /* 04 */ 93, 0 }, - { /* 05 */ 94, 0 }, - { /* 06 */ 95, 0 }, - { /* 07 */ 96, 0 }, - { /* 08 */ 104, 0 }, - { /* 09 */ 111, 0 }, - { /* 10 */ 112, 0 }, - { /* 11 */ 113, 0 }, - { /* 12 */ 114, 0 }, - { /* 13 */ 115, 0 }, - { /* 14 */ 116, 0 }, - { /* 15 */ 110, 0 }, - { /* 16 */ 105, 0 }, - { /* 17 */ 106, 0 }, - { /* 18 */ 107, 0 }, - { /* 19 */ 108, 0 }, - { /* 20 */ 109, 0 }, - { /* 21 */ 118, 0 }, - { /* 22 */ 6, 0 }, - { /* 23 */ 8, 0 }, - { /* 24 */ 9, 0 }, - { /* 25 */ 10, 0 }, - { /* 26 */ 5, 0 }, - { /* 27 */ 103, 0 }, - { /* 28 */ 120, 0 }, - { /* 29 */ 119, 0 }, - { /* 30 */ 4, 0 }, - { /* 31 */ 7, 0 }, - { /* 32 */ 15, 0 }, - { /* 33 */ 16, 0 }, - { /* 34 */ 18, 0 }, - { /* 35 */ 20, 0 }, - { /* 36 */ 17, 0 }, - { /* 37 */ 11, 0 }, - { /* 38 */ 12, 0 }, - { /* 39 */ 14, 0 }, - { /* 40 */ 13, 0 } +static uint8_t hcb_sf[241][2] = { + { /* 0 */ 1, 2 }, + { /* 1 */ 60, 0 }, + { /* 2 */ 1, 2 }, + { /* 3 */ 2, 3 }, + { /* 4 */ 3, 4 }, + { /* 5 */ 59, 0 }, + { /* 6 */ 3, 4 }, + { /* 7 */ 4, 5 }, + { /* 8 */ 5, 6 }, + { /* 9 */ 61, 0 }, + { /* 10 */ 58, 0 }, + { /* 11 */ 62, 0 }, + { /* 12 */ 3, 4 }, + { /* 13 */ 4, 5 }, + { /* 14 */ 5, 6 }, + { /* 15 */ 57, 0 }, + { /* 16 */ 63, 0 }, + { /* 17 */ 4, 5 }, + { /* 18 */ 5, 6 }, + { /* 19 */ 6, 7 }, + { /* 20 */ 7, 8 }, + { /* 21 */ 56, 0 }, + { /* 22 */ 64, 0 }, + { /* 23 */ 55, 0 }, + { /* 24 */ 65, 0 }, + { /* 25 */ 4, 5 }, + { /* 26 */ 5, 6 }, + { /* 27 */ 6, 7 }, + { /* 28 */ 7, 8 }, + { /* 29 */ 66, 0 }, + { /* 30 */ 54, 0 }, + { /* 31 */ 67, 0 }, + { /* 32 */ 5, 6 }, + { /* 33 */ 6, 7 }, + { /* 34 */ 7, 8 }, + { /* 35 */ 8, 9 }, + { /* 36 */ 9, 10 }, + { /* 37 */ 53, 0 }, + { /* 38 */ 68, 0 }, + { /* 39 */ 52, 0 }, + { /* 40 */ 69, 0 }, + { /* 41 */ 51, 0 }, + { /* 42 */ 5, 6 }, + { /* 43 */ 6, 7 }, + { /* 44 */ 7, 8 }, + { /* 45 */ 8, 9 }, + { /* 46 */ 9, 10 }, + { /* 47 */ 70, 0 }, + { /* 48 */ 50, 0 }, + { /* 49 */ 49, 0 }, + { /* 50 */ 71, 0 }, + { /* 51 */ 6, 7 }, + { /* 52 */ 7, 8 }, + { /* 53 */ 8, 9 }, + { /* 54 */ 9, 10 }, + { /* 55 */ 10, 11 }, + { /* 56 */ 11, 12 }, + { /* 57 */ 72, 0 }, + { /* 58 */ 48, 0 }, + { /* 59 */ 73, 0 }, + { /* 60 */ 47, 0 }, + { /* 61 */ 74, 0 }, + { /* 62 */ 46, 0 }, + { /* 63 */ 6, 7 }, + { /* 64 */ 7, 8 }, + { /* 65 */ 8, 9 }, + { /* 66 */ 9, 10 }, + { /* 67 */ 10, 11 }, + { /* 68 */ 11, 12 }, + { /* 69 */ 76, 0 }, + { /* 70 */ 75, 0 }, + { /* 71 */ 77, 0 }, + { /* 72 */ 78, 0 }, + { /* 73 */ 45, 0 }, + { /* 74 */ 43, 0 }, + { /* 75 */ 6, 7 }, + { /* 76 */ 7, 8 }, + { /* 77 */ 8, 9 }, + { /* 78 */ 9, 10 }, + { /* 79 */ 10, 11 }, + { /* 80 */ 11, 12 }, + { /* 81 */ 44, 0 }, + { /* 82 */ 79, 0 }, + { /* 83 */ 42, 0 }, + { /* 84 */ 41, 0 }, + { /* 85 */ 80, 0 }, + { /* 86 */ 40, 0 }, + { /* 87 */ 6, 7 }, + { /* 88 */ 7, 8 }, + { /* 89 */ 8, 9 }, + { /* 90 */ 9, 10 }, + { /* 91 */ 10, 11 }, + { /* 92 */ 11, 12 }, + { /* 93 */ 81, 0 }, + { /* 94 */ 39, 0 }, + { /* 95 */ 82, 0 }, + { /* 96 */ 38, 0 }, + { /* 97 */ 83, 0 }, + { /* 98 */ 7, 8 }, + { /* 99 */ 8, 9 }, + { /* 100 */ 9, 10 }, + { /* 101 */ 10, 11 }, + { /* 102 */ 11, 12 }, + { /* 103 */ 12, 13 }, + { /* 104 */ 13, 14 }, + { /* 105 */ 37, 0 }, + { /* 106 */ 35, 0 }, + { /* 107 */ 85, 0 }, + { /* 108 */ 33, 0 }, + { /* 109 */ 36, 0 }, + { /* 110 */ 34, 0 }, + { /* 111 */ 84, 0 }, + { /* 112 */ 32, 0 }, + { /* 113 */ 6, 7 }, + { /* 114 */ 7, 8 }, + { /* 115 */ 8, 9 }, + { /* 116 */ 9, 10 }, + { /* 117 */ 10, 11 }, + { /* 118 */ 11, 12 }, + { /* 119 */ 87, 0 }, + { /* 120 */ 89, 0 }, + { /* 121 */ 30, 0 }, + { /* 122 */ 31, 0 }, + { /* 123 */ 8, 9 }, + { /* 124 */ 9, 10 }, + { /* 125 */ 10, 11 }, + { /* 126 */ 11, 12 }, + { /* 127 */ 12, 13 }, + { /* 128 */ 13, 14 }, + { /* 129 */ 14, 15 }, + { /* 130 */ 15, 16 }, + { /* 131 */ 86, 0 }, + { /* 132 */ 29, 0 }, + { /* 133 */ 26, 0 }, + { /* 134 */ 27, 0 }, + { /* 135 */ 28, 0 }, + { /* 136 */ 24, 0 }, + { /* 137 */ 88, 0 }, + { /* 138 */ 9, 10 }, + { /* 139 */ 10, 11 }, + { /* 140 */ 11, 12 }, + { /* 141 */ 12, 13 }, + { /* 142 */ 13, 14 }, + { /* 143 */ 14, 15 }, + { /* 144 */ 15, 16 }, + { /* 145 */ 16, 17 }, + { /* 146 */ 17, 18 }, + { /* 147 */ 25, 0 }, + { /* 148 */ 22, 0 }, + { /* 149 */ 23, 0 }, + { /* 150 */ 15, 16 }, + { /* 151 */ 16, 17 }, + { /* 152 */ 17, 18 }, + { /* 153 */ 18, 19 }, + { /* 154 */ 19, 20 }, + { /* 155 */ 20, 21 }, + { /* 156 */ 21, 22 }, + { /* 157 */ 22, 23 }, + { /* 158 */ 23, 24 }, + { /* 159 */ 24, 25 }, + { /* 160 */ 25, 26 }, + { /* 161 */ 26, 27 }, + { /* 162 */ 27, 28 }, + { /* 163 */ 28, 29 }, + { /* 164 */ 29, 30 }, + { /* 165 */ 90, 0 }, + { /* 166 */ 21, 0 }, + { /* 167 */ 19, 0 }, + { /* 168 */ 3, 0 }, + { /* 169 */ 1, 0 }, + { /* 170 */ 2, 0 }, + { /* 171 */ 0, 0 }, + { /* 172 */ 23, 24 }, + { /* 173 */ 24, 25 }, + { /* 174 */ 25, 26 }, + { /* 175 */ 26, 27 }, + { /* 176 */ 27, 28 }, + { /* 177 */ 28, 29 }, + { /* 178 */ 29, 30 }, + { /* 179 */ 30, 31 }, + { /* 180 */ 31, 32 }, + { /* 181 */ 32, 33 }, + { /* 182 */ 33, 34 }, + { /* 183 */ 34, 35 }, + { /* 184 */ 35, 36 }, + { /* 185 */ 36, 37 }, + { /* 186 */ 37, 38 }, + { /* 187 */ 38, 39 }, + { /* 188 */ 39, 40 }, + { /* 189 */ 40, 41 }, + { /* 190 */ 41, 42 }, + { /* 191 */ 42, 43 }, + { /* 192 */ 43, 44 }, + { /* 193 */ 44, 45 }, + { /* 194 */ 45, 46 }, + { /* 195 */ 98, 0 }, + { /* 196 */ 99, 0 }, + { /* 197 */ 100, 0 }, + { /* 198 */ 101, 0 }, + { /* 199 */ 102, 0 }, + { /* 200 */ 117, 0 }, + { /* 201 */ 97, 0 }, + { /* 202 */ 91, 0 }, + { /* 203 */ 92, 0 }, + { /* 204 */ 93, 0 }, + { /* 205 */ 94, 0 }, + { /* 206 */ 95, 0 }, + { /* 207 */ 96, 0 }, + { /* 208 */ 104, 0 }, + { /* 209 */ 111, 0 }, + { /* 210 */ 112, 0 }, + { /* 211 */ 113, 0 }, + { /* 212 */ 114, 0 }, + { /* 213 */ 115, 0 }, + { /* 214 */ 116, 0 }, + { /* 215 */ 110, 0 }, + { /* 216 */ 105, 0 }, + { /* 217 */ 106, 0 }, + { /* 218 */ 107, 0 }, + { /* 219 */ 108, 0 }, + { /* 220 */ 109, 0 }, + { /* 221 */ 118, 0 }, + { /* 222 */ 6, 0 }, + { /* 223 */ 8, 0 }, + { /* 224 */ 9, 0 }, + { /* 225 */ 10, 0 }, + { /* 226 */ 5, 0 }, + { /* 227 */ 103, 0 }, + { /* 228 */ 120, 0 }, + { /* 229 */ 119, 0 }, + { /* 230 */ 4, 0 }, + { /* 231 */ 7, 0 }, + { /* 232 */ 15, 0 }, + { /* 233 */ 16, 0 }, + { /* 234 */ 18, 0 }, + { /* 235 */ 20, 0 }, + { /* 236 */ 17, 0 }, + { /* 237 */ 11, 0 }, + { /* 238 */ 12, 0 }, + { /* 239 */ 14, 0 }, + { /* 240 */ 13, 0 } }; diff --git a/libfaad/huffman.c b/libfaad/huffman.c index 948f099b..1cc9ebf1 100644 --- a/libfaad/huffman.c +++ b/libfaad/huffman.c @@ -66,46 +66,30 @@ int8_t huffman_scale_factor(bitfile *ld) uint8_t b = faad_get1bit(ld DEBUGVAR(1,255,"huffman_scale_factor()")); offset += hcb_sf[offset][b]; - - if (offset > 240) - { - /* printf("ERROR: offset into hcb_sf = %d >240!\n", offset); */ - return -1; - } } return hcb_sf[offset][0]; } -hcb *hcb_table[] = { - 0, hcb1_1, hcb2_1, 0, hcb4_1, 0, hcb6_1, 0, hcb8_1, 0, hcb10_1, hcb11_1 -}; - -hcb_2_quad *hcb_2_quad_table[] = { - 0, hcb1_2, hcb2_2, 0, hcb4_2, 0, 0, 0, 0, 0, 0, 0 -}; - -hcb_2_pair *hcb_2_pair_table[] = { - 0, 0, 0, 0, 0, 0, hcb6_2, 0, hcb8_2, 0, hcb10_2, hcb11_2 -}; - -hcb_bin_pair *hcb_bin_table[] = { - 0, 0, 0, 0, 0, hcb5, 0, hcb7, 0, hcb9, 0, 0 -}; - -uint8_t hcbN[] = { 0, 5, 5, 0, 5, 0, 5, 0, 5, 0, 6, 5 }; +static const uint8_t hcbN[LAST_CB_IDX + 1] = +{ 0, 5, 5, 0, 5, 0, 5, 0, 5, 0, 6, 5}; +static const hcb* hcb_table[LAST_CB_IDX + 1] = +{NULL, hcb1_1, hcb2_1, NULL, hcb4_1, NULL, hcb6_1, NULL, hcb8_1, NULL, hcb10_1, hcb11_1}; +static const hcb_2_quad* hcb_2_quad_table[LAST_CB_IDX + 1] = +{NULL, hcb1_2, hcb2_2, NULL, hcb4_2, NULL, NULL, NULL, NULL, NULL, NULL, NULL}; +static const hcb_2_pair* hcb_2_pair_table[LAST_CB_IDX + 1] = +{NULL, NULL, NULL, NULL, NULL, NULL, hcb6_2, NULL, hcb8_2, NULL, hcb10_2, hcb11_2}; +static const hcb_bin_pair* hcb_bin_table[LAST_CB_IDX + 1] = +{NULL, NULL, NULL, NULL, NULL, hcb5, NULL, hcb7, NULL, hcb9, NULL, NULL}; +/* hcb3 is the unique case */ /* defines whether a huffman codebook is unsigned or not */ /* Table 4.6.2 */ -uint8_t unsigned_cb[] = { 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, - /* codebook 16 to 31 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 +static uint8_t unsigned_cb[32] = { 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, + /* codebook 16 to 31 */ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; -int hcb_2_quad_table_size[] = { 0, 114, 86, 0, 185, 0, 0, 0, 0, 0, 0, 0 }; -int hcb_2_pair_table_size[] = { 0, 0, 0, 0, 0, 0, 126, 0, 83, 0, 210, 373 }; -int hcb_bin_table_size[] = { 0, 0, 0, 161, 0, 161, 0, 127, 0, 337, 0, 0 }; - static INLINE void huffman_sign_bits(bitfile *ld, int16_t *sp, uint8_t len) { uint8_t i; @@ -166,34 +150,39 @@ static INLINE uint8_t huffman_getescape(bitfile *ld, int16_t *sp) static uint8_t huffman_2step_quad(uint8_t cb, bitfile *ld, int16_t *sp) { uint32_t cw; - uint16_t offset = 0; + uint16_t offset; uint8_t extra_bits; + hcb* root; + uint8_t root_bits; + hcb_2_quad* table; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (hcbN[cb] == 0) __builtin_trap(); + if (hcb_table[cb] == NULL) __builtin_trap(); + if (hcb_2_quad_table[cb] == NULL) __builtin_trap(); + // In other words, `cb` is one of [1, 2, 4]. +#endif + root = hcb_table[cb]; + root_bits = hcbN[cb]; + table = hcb_2_quad_table[cb]; - cw = faad_showbits(ld, hcbN[cb]); - offset = hcb_table[cb][cw].offset; - extra_bits = hcb_table[cb][cw].extra_bits; + cw = faad_showbits(ld, root_bits); + offset = root[cw].offset; + extra_bits = root[cw].extra_bits; if (extra_bits) { - /* we know for sure it's more than hcbN[cb] bits long */ - faad_flushbits(ld, hcbN[cb]); + /* We know for sure it's more than `root_bits` bits long. */ + faad_flushbits(ld, root_bits); offset += (uint16_t)faad_showbits(ld, extra_bits); - faad_flushbits(ld, hcb_2_quad_table[cb][offset].bits - hcbN[cb]); + faad_flushbits(ld, table[offset].bits - root_bits); } else { - faad_flushbits(ld, hcb_2_quad_table[cb][offset].bits); + faad_flushbits(ld, table[offset].bits); } - if (offset > hcb_2_quad_table_size[cb]) - { - /* printf("ERROR: offset into hcb_2_quad_table = %d >%d!\n", offset, - hcb_2_quad_table_size[cb]); */ - return 10; - } - - sp[0] = hcb_2_quad_table[cb][offset].x; - sp[1] = hcb_2_quad_table[cb][offset].y; - sp[2] = hcb_2_quad_table[cb][offset].v; - sp[3] = hcb_2_quad_table[cb][offset].w; + sp[0] = table[offset].x; + sp[1] = table[offset].y; + sp[2] = table[offset].v; + sp[3] = table[offset].w; return 0; } @@ -209,32 +198,37 @@ static uint8_t huffman_2step_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp) static uint8_t huffman_2step_pair(uint8_t cb, bitfile *ld, int16_t *sp) { uint32_t cw; - uint16_t offset = 0; + uint16_t offset; uint8_t extra_bits; + hcb* root; + uint8_t root_bits; + hcb_2_pair* table; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (hcbN[cb] == 0) __builtin_trap(); + if (hcb_table[cb] == NULL) __builtin_trap(); + if (hcb_2_pair_table[cb] == NULL) __builtin_trap(); + // In other words, `cb` is one of [6, 8, 10, 11]. +#endif + root = hcb_table[cb]; + root_bits = hcbN[cb]; + table = hcb_2_pair_table[cb]; - cw = faad_showbits(ld, hcbN[cb]); - offset = hcb_table[cb][cw].offset; - extra_bits = hcb_table[cb][cw].extra_bits; + cw = faad_showbits(ld, root_bits); + offset = root[cw].offset; + extra_bits = root[cw].extra_bits; if (extra_bits) { /* we know for sure it's more than hcbN[cb] bits long */ - faad_flushbits(ld, hcbN[cb]); + faad_flushbits(ld, root_bits); offset += (uint16_t)faad_showbits(ld, extra_bits); - faad_flushbits(ld, hcb_2_pair_table[cb][offset].bits - hcbN[cb]); + faad_flushbits(ld, table[offset].bits - root_bits); } else { - faad_flushbits(ld, hcb_2_pair_table[cb][offset].bits); - } - - if (offset > hcb_2_pair_table_size[cb]) - { - /* printf("ERROR: offset into hcb_2_pair_table = %d >%d!\n", offset, - hcb_2_pair_table_size[cb]); */ - return 10; + faad_flushbits(ld, table[offset].bits); } - sp[0] = hcb_2_pair_table[cb][offset].x; - sp[1] = hcb_2_pair_table[cb][offset].y; + sp[0] = table[offset].x; + sp[1] = table[offset].y; return 0; } @@ -250,25 +244,23 @@ static uint8_t huffman_2step_pair_sign(uint8_t cb, bitfile *ld, int16_t *sp) static uint8_t huffman_binary_quad(uint8_t cb, bitfile *ld, int16_t *sp) { uint16_t offset = 0; + hcb_bin_quad* table = hcb3; - while (!hcb3[offset].is_leaf) +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (cb != 3) __builtin_trap(); +#endif + + while (!table[offset].is_leaf) { uint8_t b = faad_get1bit(ld DEBUGVAR(1,255,"huffman_spectral_data():3")); - offset += hcb3[offset].data[b]; + offset += table[offset].data[b]; } - if (offset > hcb_bin_table_size[cb]) - { - /* printf("ERROR: offset into hcb_bin_table = %d >%d!\n", offset, - hcb_bin_table_size[cb]); */ - return 10; - } - - sp[0] = hcb3[offset].data[0]; - sp[1] = hcb3[offset].data[1]; - sp[2] = hcb3[offset].data[2]; - sp[3] = hcb3[offset].data[3]; + sp[0] = table[offset].data[0]; + sp[1] = table[offset].data[1]; + sp[2] = table[offset].data[2]; + sp[3] = table[offset].data[3]; return 0; } @@ -284,23 +276,23 @@ static uint8_t huffman_binary_quad_sign(uint8_t cb, bitfile *ld, int16_t *sp) static uint8_t huffman_binary_pair(uint8_t cb, bitfile *ld, int16_t *sp) { uint16_t offset = 0; + hcb_bin_pair* table; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (hcb_bin_table[cb] == NULL) __builtin_trap(); + if (cb == 3) __builtin_trap(); + // In other words, `cb` is one of [5, 7, 9]. +#endif + table = hcb_bin_table[cb]; - while (!hcb_bin_table[cb][offset].is_leaf) + while (!table[offset].is_leaf) { uint8_t b = faad_get1bit(ld DEBUGVAR(1,255,"huffman_spectral_data():9")); - offset += hcb_bin_table[cb][offset].data[b]; + offset += table[offset].data[b]; } - if (offset > hcb_bin_table_size[cb]) - { - /* printf("ERROR: offset into hcb_bin_table = %d >%d!\n", offset, - hcb_bin_table_size[cb]); */ - return 10; - } - - sp[0] = hcb_bin_table[cb][offset].data[0]; - sp[1] = hcb_bin_table[cb][offset].data[1]; + sp[0] = table[offset].data[0]; + sp[1] = table[offset].data[1]; return 0; } @@ -425,35 +417,50 @@ int8_t huffman_spectral_data_2(uint8_t cb, bits_t *ld, int16_t *sp) { case 1: /* 2-step method for data quadruples */ case 2: - case 4: + case 4: { + hcb* root; + uint8_t root_bits; + hcb_2_quad* table; +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (hcbN[cb] == 0) __builtin_trap(); + if (hcb_table[cb] == NULL) __builtin_trap(); + if (hcb_2_quad_table[cb] == NULL) __builtin_trap(); + // In other words, `cb` is one of [1, 2, 4]. +#endif + root = hcb_table[cb]; + root_bits = hcbN[cb]; + table = hcb_2_quad_table[cb]; - cw = showbits_hcr(ld, hcbN[cb]); - offset = hcb_table[cb][cw].offset; - extra_bits = hcb_table[cb][cw].extra_bits; + cw = showbits_hcr(ld, root_bits); + offset = root[cw].offset; + extra_bits = root[cw].extra_bits; if (extra_bits) { - /* we know for sure it's more than hcbN[cb] bits long */ - if ( flushbits_hcr(ld, hcbN[cb]) ) return -1; + /* We know for sure it's more than root_bits bits long. */ + if (flushbits_hcr(ld, root_bits)) return -1; offset += (uint16_t)showbits_hcr(ld, extra_bits); - if ( flushbits_hcr(ld, hcb_2_quad_table[cb][offset].bits - hcbN[cb]) ) return -1; + if (flushbits_hcr(ld, table[offset].bits - root_bits)) return -1; } else { - if ( flushbits_hcr(ld, hcb_2_quad_table[cb][offset].bits) ) return -1; + if (flushbits_hcr(ld, table[offset].bits)) return -1; } - sp[0] = hcb_2_quad_table[cb][offset].x; - sp[1] = hcb_2_quad_table[cb][offset].y; - sp[2] = hcb_2_quad_table[cb][offset].v; - sp[3] = hcb_2_quad_table[cb][offset].w; + sp[0] = table[offset].x; + sp[1] = table[offset].y; + sp[2] = table[offset].v; + sp[3] = table[offset].w; break; - + } case 6: /* 2-step method for data pairs */ case 8: case 10: case 11: /* VCB11 uses codebook 11 */ case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: - case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: + case 24: case 25: case 26: case 27: case 28: case 29: case 30: case 31: { + hcb* root; + uint8_t root_bits; + hcb_2_pair* table; if (cb >= 16) { @@ -461,58 +468,67 @@ int8_t huffman_spectral_data_2(uint8_t cb, bits_t *ld, int16_t *sp) vcb11 = cb; cb = 11; } +#ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION + if (hcbN[cb] == 0) __builtin_trap(); + if (hcb_table[cb] == NULL) __builtin_trap(); + if (hcb_2_pair_table[cb] == NULL) __builtin_trap(); + // In other words, `cb` is one of [6, 8, 10, 11]. +#endif + root = hcb_table[cb]; + root_bits = hcbN[cb]; + table = hcb_2_pair_table[cb]; - cw = showbits_hcr(ld, hcbN[cb]); - offset = hcb_table[cb][cw].offset; - extra_bits = hcb_table[cb][cw].extra_bits; + cw = showbits_hcr(ld, root_bits); + offset = root[cw].offset; + extra_bits = root[cw].extra_bits; if (extra_bits) { /* we know for sure it's more than hcbN[cb] bits long */ - if ( flushbits_hcr(ld, hcbN[cb]) ) return -1; + if (flushbits_hcr(ld, root_bits)) return -1; offset += (uint16_t)showbits_hcr(ld, extra_bits); - if ( flushbits_hcr(ld, hcb_2_pair_table[cb][offset].bits - hcbN[cb]) ) return -1; + if (flushbits_hcr(ld, table[offset].bits - root_bits)) return -1; } else { - if ( flushbits_hcr(ld, hcb_2_pair_table[cb][offset].bits) ) return -1; + if ( flushbits_hcr(ld, table[offset].bits)) return -1; } - sp[0] = hcb_2_pair_table[cb][offset].x; - sp[1] = hcb_2_pair_table[cb][offset].y; + sp[0] = table[offset].x; + sp[1] = table[offset].y; break; - - case 3: /* binary search for data quadruples */ - - while (!hcb3[offset].is_leaf) + } + case 3: { /* binary search for data quadruples */ + hcb_bin_quad* table = hcb3; + while (!table[offset].is_leaf) { uint8_t b; - - if ( get1bit_hcr(ld, &b) ) return -1; - offset += hcb3[offset].data[b]; + if (get1bit_hcr(ld, &b)) return -1; + offset += table[offset].data[b]; } - sp[0] = hcb3[offset].data[0]; - sp[1] = hcb3[offset].data[1]; - sp[2] = hcb3[offset].data[2]; - sp[3] = hcb3[offset].data[3]; + sp[0] = table[offset].data[0]; + sp[1] = table[offset].data[1]; + sp[2] = table[offset].data[2]; + sp[3] = table[offset].data[3]; break; + } case 5: /* binary search for data pairs */ case 7: - case 9: - - while (!hcb_bin_table[cb][offset].is_leaf) + case 9: { + hcb_bin_pair* table = hcb_bin_table[cb]; + while (!table[offset].is_leaf) { uint8_t b; if (get1bit_hcr(ld, &b) ) return -1; - offset += hcb_bin_table[cb][offset].data[b]; + offset += table[offset].data[b]; } - sp[0] = hcb_bin_table[cb][offset].data[0]; - sp[1] = hcb_bin_table[cb][offset].data[1]; + sp[0] = table[offset].data[0]; + sp[1] = table[offset].data[1]; break; - } + }} /* decode sign bits */ if (unsigned_cb[cb])