BaseJpegDeocde exampe program

Dependencies:   BaseJpegDecode Terminal BaseUsbHost mbed mbed-rtos

Fork of BaseJpegDecode by Norimasa Okamoto

Committer:
va009039
Date:
Mon Oct 08 11:38:57 2012 +0000
Revision:
1:58dfd5386a92
Parent:
0:7121d9fb45f4
add HuffmanDecode::Lookup2()

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 0:7121d9fb45f4 1 #include "mbed.h"
va009039 0:7121d9fb45f4 2 #include "HuffmanDecode.h"
va009039 1:58dfd5386a92 3 #include "HuffmanCodeTable.h"
va009039 0:7121d9fb45f4 4 #if 1
va009039 0:7121d9fb45f4 5 #define DBG(...) do{fprintf(stderr,"[%s@%d] ",__PRETTY_FUNCTION__,__LINE__);fprintf(stderr,__VA_ARGS__);} while(0);
va009039 0:7121d9fb45f4 6 #define DBG_ASSERT(A) while(!(A)){fprintf(stderr,"\n\n%s@%d %s ASSERT!\n\n",__PRETTY_FUNCTION__,__LINE__,#A);exit(1);};
va009039 0:7121d9fb45f4 7 #else
va009039 0:7121d9fb45f4 8 #define DBG(...)
va009039 0:7121d9fb45f4 9 #define DBG_ASSERT(A)
va009039 0:7121d9fb45f4 10 #endif
va009039 0:7121d9fb45f4 11
va009039 0:7121d9fb45f4 12 const Huff HT_DC_0[] = {
va009039 0:7121d9fb45f4 13 /* 0 */ {0,0,2,0x0},
va009039 0:7121d9fb45f4 14 /* 1 */ {0,1,3,0x2},
va009039 0:7121d9fb45f4 15 /* 2 */ {0,2,3,0x3},
va009039 0:7121d9fb45f4 16 /* 3 */ {0,3,3,0x4},
va009039 0:7121d9fb45f4 17 /* 4 */ {0,4,3,0x5},
va009039 0:7121d9fb45f4 18 /* 5 */ {0,5,3,0x6},
va009039 0:7121d9fb45f4 19 /* 6 */ {0,6,4,0xe},
va009039 0:7121d9fb45f4 20 /* 7 */ {0,7,5,0x1e},
va009039 0:7121d9fb45f4 21 /* 8 */ {0,8,6,0x3e},
va009039 0:7121d9fb45f4 22 /* 9 */ {0,9,7,0x7e},
va009039 0:7121d9fb45f4 23 /* 10 */ {0,10,8,0xfe},
va009039 0:7121d9fb45f4 24 /* 11 */ {0,11,9,0x1fe},
va009039 0:7121d9fb45f4 25 };
va009039 0:7121d9fb45f4 26 const Huff HT_AC_0[] = {
va009039 0:7121d9fb45f4 27 /* 0 */ {0,1,2,0x0},
va009039 0:7121d9fb45f4 28 /* 1 */ {0,2,2,0x1},
va009039 0:7121d9fb45f4 29 /* 2 */ {0,3,3,0x4},
va009039 0:7121d9fb45f4 30 /* 3 */ {0,0,4,0xa},
va009039 0:7121d9fb45f4 31 /* 4 */ {0,4,4,0xb},
va009039 0:7121d9fb45f4 32 /* 5 */ {1,1,4,0xc},
va009039 0:7121d9fb45f4 33 /* 6 */ {0,5,5,0x1a},
va009039 0:7121d9fb45f4 34 /* 7 */ {1,2,5,0x1b},
va009039 0:7121d9fb45f4 35 /* 8 */ {2,1,5,0x1c},
va009039 0:7121d9fb45f4 36 /* 9 */ {3,1,6,0x3a},
va009039 0:7121d9fb45f4 37 /* 10 */ {4,1,6,0x3b},
va009039 0:7121d9fb45f4 38 /* 11 */ {0,6,7,0x78},
va009039 0:7121d9fb45f4 39 /* 12 */ {1,3,7,0x79},
va009039 0:7121d9fb45f4 40 /* 13 */ {5,1,7,0x7a},
va009039 0:7121d9fb45f4 41 /* 14 */ {6,1,7,0x7b},
va009039 0:7121d9fb45f4 42 /* 15 */ {0,7,8,0xf8},
va009039 0:7121d9fb45f4 43 /* 16 */ {2,2,8,0xf9},
va009039 0:7121d9fb45f4 44 /* 17 */ {7,1,8,0xfa},
va009039 0:7121d9fb45f4 45 /* 18 */ {1,4,9,0x1f6},
va009039 0:7121d9fb45f4 46 /* 19 */ {3,2,9,0x1f7},
va009039 0:7121d9fb45f4 47 /* 20 */ {8,1,9,0x1f8},
va009039 0:7121d9fb45f4 48 /* 21 */ {9,1,9,0x1f9},
va009039 0:7121d9fb45f4 49 /* 22 */ {10,1,9,0x1fa},
va009039 0:7121d9fb45f4 50 /* 23 */ {0,8,10,0x3f6},
va009039 0:7121d9fb45f4 51 /* 24 */ {2,3,10,0x3f7},
va009039 0:7121d9fb45f4 52 /* 25 */ {4,2,10,0x3f8},
va009039 0:7121d9fb45f4 53 /* 26 */ {11,1,10,0x3f9},
va009039 0:7121d9fb45f4 54 /* 27 */ {12,1,10,0x3fa},
va009039 0:7121d9fb45f4 55 /* 28 */ {1,5,11,0x7f6},
va009039 0:7121d9fb45f4 56 /* 29 */ {5,2,11,0x7f7},
va009039 0:7121d9fb45f4 57 /* 30 */ {13,1,11,0x7f8},
va009039 0:7121d9fb45f4 58 /* 31 */ {15,0,11,0x7f9},
va009039 0:7121d9fb45f4 59 /* 32 */ {2,4,12,0xff4},
va009039 0:7121d9fb45f4 60 /* 33 */ {3,3,12,0xff5},
va009039 0:7121d9fb45f4 61 /* 34 */ {6,2,12,0xff6},
va009039 0:7121d9fb45f4 62 /* 35 */ {7,2,12,0xff7},
va009039 0:7121d9fb45f4 63 /* 36 */ {8,2,15,0x7fc0},
va009039 0:7121d9fb45f4 64 /* 37 */ {0,9,16,0xff82},
va009039 0:7121d9fb45f4 65 /* 38 */ {0,10,16,0xff83},
va009039 0:7121d9fb45f4 66 /* 39 */ {1,6,16,0xff84},
va009039 0:7121d9fb45f4 67 /* 40 */ {1,7,16,0xff85},
va009039 0:7121d9fb45f4 68 /* 41 */ {1,8,16,0xff86},
va009039 0:7121d9fb45f4 69 /* 42 */ {1,9,16,0xff87},
va009039 0:7121d9fb45f4 70 /* 43 */ {1,10,16,0xff88},
va009039 0:7121d9fb45f4 71 /* 44 */ {2,5,16,0xff89},
va009039 0:7121d9fb45f4 72 /* 45 */ {2,6,16,0xff8a},
va009039 0:7121d9fb45f4 73 /* 46 */ {2,7,16,0xff8b},
va009039 0:7121d9fb45f4 74 /* 47 */ {2,8,16,0xff8c},
va009039 0:7121d9fb45f4 75 /* 48 */ {2,9,16,0xff8d},
va009039 0:7121d9fb45f4 76 /* 49 */ {2,10,16,0xff8e},
va009039 0:7121d9fb45f4 77 /* 50 */ {3,4,16,0xff8f},
va009039 0:7121d9fb45f4 78 /* 51 */ {3,5,16,0xff90},
va009039 0:7121d9fb45f4 79 /* 52 */ {3,6,16,0xff91},
va009039 0:7121d9fb45f4 80 /* 53 */ {3,7,16,0xff92},
va009039 0:7121d9fb45f4 81 /* 54 */ {3,8,16,0xff93},
va009039 0:7121d9fb45f4 82 /* 55 */ {3,9,16,0xff94},
va009039 0:7121d9fb45f4 83 /* 56 */ {3,10,16,0xff95},
va009039 0:7121d9fb45f4 84 /* 57 */ {4,3,16,0xff96},
va009039 0:7121d9fb45f4 85 /* 58 */ {4,4,16,0xff97},
va009039 0:7121d9fb45f4 86 /* 59 */ {4,5,16,0xff98},
va009039 0:7121d9fb45f4 87 /* 60 */ {4,6,16,0xff99},
va009039 0:7121d9fb45f4 88 /* 61 */ {4,7,16,0xff9a},
va009039 0:7121d9fb45f4 89 /* 62 */ {4,8,16,0xff9b},
va009039 0:7121d9fb45f4 90 /* 63 */ {4,9,16,0xff9c},
va009039 0:7121d9fb45f4 91 /* 64 */ {4,10,16,0xff9d},
va009039 0:7121d9fb45f4 92 /* 65 */ {5,3,16,0xff9e},
va009039 0:7121d9fb45f4 93 /* 66 */ {5,4,16,0xff9f},
va009039 0:7121d9fb45f4 94 /* 67 */ {5,5,16,0xffa0},
va009039 0:7121d9fb45f4 95 /* 68 */ {5,6,16,0xffa1},
va009039 0:7121d9fb45f4 96 /* 69 */ {5,7,16,0xffa2},
va009039 0:7121d9fb45f4 97 /* 70 */ {5,8,16,0xffa3},
va009039 0:7121d9fb45f4 98 /* 71 */ {5,9,16,0xffa4},
va009039 0:7121d9fb45f4 99 /* 72 */ {5,10,16,0xffa5},
va009039 0:7121d9fb45f4 100 /* 73 */ {6,3,16,0xffa6},
va009039 0:7121d9fb45f4 101 /* 74 */ {6,4,16,0xffa7},
va009039 0:7121d9fb45f4 102 /* 75 */ {6,5,16,0xffa8},
va009039 0:7121d9fb45f4 103 /* 76 */ {6,6,16,0xffa9},
va009039 0:7121d9fb45f4 104 /* 77 */ {6,7,16,0xffaa},
va009039 0:7121d9fb45f4 105 /* 78 */ {6,8,16,0xffab},
va009039 0:7121d9fb45f4 106 /* 79 */ {6,9,16,0xffac},
va009039 0:7121d9fb45f4 107 /* 80 */ {6,10,16,0xffad},
va009039 0:7121d9fb45f4 108 /* 81 */ {7,3,16,0xffae},
va009039 0:7121d9fb45f4 109 /* 82 */ {7,4,16,0xffaf},
va009039 0:7121d9fb45f4 110 /* 83 */ {7,5,16,0xffb0},
va009039 0:7121d9fb45f4 111 /* 84 */ {7,6,16,0xffb1},
va009039 0:7121d9fb45f4 112 /* 85 */ {7,7,16,0xffb2},
va009039 0:7121d9fb45f4 113 /* 86 */ {7,8,16,0xffb3},
va009039 0:7121d9fb45f4 114 /* 87 */ {7,9,16,0xffb4},
va009039 0:7121d9fb45f4 115 /* 88 */ {7,10,16,0xffb5},
va009039 0:7121d9fb45f4 116 /* 89 */ {8,3,16,0xffb6},
va009039 0:7121d9fb45f4 117 /* 90 */ {8,4,16,0xffb7},
va009039 0:7121d9fb45f4 118 /* 91 */ {8,5,16,0xffb8},
va009039 0:7121d9fb45f4 119 /* 92 */ {8,6,16,0xffb9},
va009039 0:7121d9fb45f4 120 /* 93 */ {8,7,16,0xffba},
va009039 0:7121d9fb45f4 121 /* 94 */ {8,8,16,0xffbb},
va009039 0:7121d9fb45f4 122 /* 95 */ {8,9,16,0xffbc},
va009039 0:7121d9fb45f4 123 /* 96 */ {8,10,16,0xffbd},
va009039 0:7121d9fb45f4 124 /* 97 */ {9,2,16,0xffbe},
va009039 0:7121d9fb45f4 125 /* 98 */ {9,3,16,0xffbf},
va009039 0:7121d9fb45f4 126 /* 99 */ {9,4,16,0xffc0},
va009039 0:7121d9fb45f4 127 /* 100 */ {9,5,16,0xffc1},
va009039 0:7121d9fb45f4 128 /* 101 */ {9,6,16,0xffc2},
va009039 0:7121d9fb45f4 129 /* 102 */ {9,7,16,0xffc3},
va009039 0:7121d9fb45f4 130 /* 103 */ {9,8,16,0xffc4},
va009039 0:7121d9fb45f4 131 /* 104 */ {9,9,16,0xffc5},
va009039 0:7121d9fb45f4 132 /* 105 */ {9,10,16,0xffc6},
va009039 0:7121d9fb45f4 133 /* 106 */ {10,2,16,0xffc7},
va009039 0:7121d9fb45f4 134 /* 107 */ {10,3,16,0xffc8},
va009039 0:7121d9fb45f4 135 /* 108 */ {10,4,16,0xffc9},
va009039 0:7121d9fb45f4 136 /* 109 */ {10,5,16,0xffca},
va009039 0:7121d9fb45f4 137 /* 110 */ {10,6,16,0xffcb},
va009039 0:7121d9fb45f4 138 /* 111 */ {10,7,16,0xffcc},
va009039 0:7121d9fb45f4 139 /* 112 */ {10,8,16,0xffcd},
va009039 0:7121d9fb45f4 140 /* 113 */ {10,9,16,0xffce},
va009039 0:7121d9fb45f4 141 /* 114 */ {10,10,16,0xffcf},
va009039 0:7121d9fb45f4 142 /* 115 */ {11,2,16,0xffd0},
va009039 0:7121d9fb45f4 143 /* 116 */ {11,3,16,0xffd1},
va009039 0:7121d9fb45f4 144 /* 117 */ {11,4,16,0xffd2},
va009039 0:7121d9fb45f4 145 /* 118 */ {11,5,16,0xffd3},
va009039 0:7121d9fb45f4 146 /* 119 */ {11,6,16,0xffd4},
va009039 0:7121d9fb45f4 147 /* 120 */ {11,7,16,0xffd5},
va009039 0:7121d9fb45f4 148 /* 121 */ {11,8,16,0xffd6},
va009039 0:7121d9fb45f4 149 /* 122 */ {11,9,16,0xffd7},
va009039 0:7121d9fb45f4 150 /* 123 */ {11,10,16,0xffd8},
va009039 0:7121d9fb45f4 151 /* 124 */ {12,2,16,0xffd9},
va009039 0:7121d9fb45f4 152 /* 125 */ {12,3,16,0xffda},
va009039 0:7121d9fb45f4 153 /* 126 */ {12,4,16,0xffdb},
va009039 0:7121d9fb45f4 154 /* 127 */ {12,5,16,0xffdc},
va009039 0:7121d9fb45f4 155 /* 128 */ {12,6,16,0xffdd},
va009039 0:7121d9fb45f4 156 /* 129 */ {12,7,16,0xffde},
va009039 0:7121d9fb45f4 157 /* 130 */ {12,8,16,0xffdf},
va009039 0:7121d9fb45f4 158 /* 131 */ {12,9,16,0xffe0},
va009039 0:7121d9fb45f4 159 /* 132 */ {12,10,16,0xffe1},
va009039 0:7121d9fb45f4 160 /* 133 */ {13,2,16,0xffe2},
va009039 0:7121d9fb45f4 161 /* 134 */ {13,3,16,0xffe3},
va009039 0:7121d9fb45f4 162 /* 135 */ {13,4,16,0xffe4},
va009039 0:7121d9fb45f4 163 /* 136 */ {13,5,16,0xffe5},
va009039 0:7121d9fb45f4 164 /* 137 */ {13,6,16,0xffe6},
va009039 0:7121d9fb45f4 165 /* 138 */ {13,7,16,0xffe7},
va009039 0:7121d9fb45f4 166 /* 139 */ {13,8,16,0xffe8},
va009039 0:7121d9fb45f4 167 /* 140 */ {13,9,16,0xffe9},
va009039 0:7121d9fb45f4 168 /* 141 */ {13,10,16,0xffea},
va009039 0:7121d9fb45f4 169 /* 142 */ {14,1,16,0xffeb},
va009039 0:7121d9fb45f4 170 /* 143 */ {14,2,16,0xffec},
va009039 0:7121d9fb45f4 171 /* 144 */ {14,3,16,0xffed},
va009039 0:7121d9fb45f4 172 /* 145 */ {14,4,16,0xffee},
va009039 0:7121d9fb45f4 173 /* 146 */ {14,5,16,0xffef},
va009039 0:7121d9fb45f4 174 /* 147 */ {14,6,16,0xfff0},
va009039 0:7121d9fb45f4 175 /* 148 */ {14,7,16,0xfff1},
va009039 0:7121d9fb45f4 176 /* 149 */ {14,8,16,0xfff2},
va009039 0:7121d9fb45f4 177 /* 150 */ {14,9,16,0xfff3},
va009039 0:7121d9fb45f4 178 /* 151 */ {14,10,16,0xfff4},
va009039 0:7121d9fb45f4 179 /* 152 */ {15,1,16,0xfff5},
va009039 0:7121d9fb45f4 180 /* 153 */ {15,2,16,0xfff6},
va009039 0:7121d9fb45f4 181 /* 154 */ {15,3,16,0xfff7},
va009039 0:7121d9fb45f4 182 /* 155 */ {15,4,16,0xfff8},
va009039 0:7121d9fb45f4 183 /* 156 */ {15,5,16,0xfff9},
va009039 0:7121d9fb45f4 184 /* 157 */ {15,6,16,0xfffa},
va009039 0:7121d9fb45f4 185 /* 158 */ {15,7,16,0xfffb},
va009039 0:7121d9fb45f4 186 /* 159 */ {15,8,16,0xfffc},
va009039 0:7121d9fb45f4 187 /* 160 */ {15,9,16,0xfffd},
va009039 0:7121d9fb45f4 188 /* 161 */ {15,10,16,0xfffe},
va009039 0:7121d9fb45f4 189 };
va009039 0:7121d9fb45f4 190 const Huff HT_DC_1[] = {
va009039 0:7121d9fb45f4 191 /* 0 */ {0,0,2,0x0},
va009039 0:7121d9fb45f4 192 /* 1 */ {0,1,2,0x1},
va009039 0:7121d9fb45f4 193 /* 2 */ {0,2,2,0x2},
va009039 0:7121d9fb45f4 194 /* 3 */ {0,3,3,0x6},
va009039 0:7121d9fb45f4 195 /* 4 */ {0,4,4,0xe},
va009039 0:7121d9fb45f4 196 /* 5 */ {0,5,5,0x1e},
va009039 0:7121d9fb45f4 197 /* 6 */ {0,6,6,0x3e},
va009039 0:7121d9fb45f4 198 /* 7 */ {0,7,7,0x7e},
va009039 0:7121d9fb45f4 199 /* 8 */ {0,8,8,0xfe},
va009039 0:7121d9fb45f4 200 /* 9 */ {0,9,9,0x1fe},
va009039 0:7121d9fb45f4 201 /* 10 */ {0,10,10,0x3fe},
va009039 0:7121d9fb45f4 202 /* 11 */ {0,11,11,0x7fe},
va009039 0:7121d9fb45f4 203 };
va009039 0:7121d9fb45f4 204 const Huff HT_AC_1[] = {
va009039 0:7121d9fb45f4 205 /* 0 */ {0,0,2,0x0},
va009039 0:7121d9fb45f4 206 /* 1 */ {0,1,2,0x1},
va009039 0:7121d9fb45f4 207 /* 2 */ {0,2,3,0x4},
va009039 0:7121d9fb45f4 208 /* 3 */ {0,3,4,0xa},
va009039 0:7121d9fb45f4 209 /* 4 */ {1,1,4,0xb},
va009039 0:7121d9fb45f4 210 /* 5 */ {0,4,5,0x18},
va009039 0:7121d9fb45f4 211 /* 6 */ {0,5,5,0x19},
va009039 0:7121d9fb45f4 212 /* 7 */ {2,1,5,0x1a},
va009039 0:7121d9fb45f4 213 /* 8 */ {3,1,5,0x1b},
va009039 0:7121d9fb45f4 214 /* 9 */ {0,6,6,0x38},
va009039 0:7121d9fb45f4 215 /* 10 */ {1,2,6,0x39},
va009039 0:7121d9fb45f4 216 /* 11 */ {4,1,6,0x3a},
va009039 0:7121d9fb45f4 217 /* 12 */ {5,1,6,0x3b},
va009039 0:7121d9fb45f4 218 /* 13 */ {0,7,7,0x78},
va009039 0:7121d9fb45f4 219 /* 14 */ {6,1,7,0x79},
va009039 0:7121d9fb45f4 220 /* 15 */ {7,1,7,0x7a},
va009039 0:7121d9fb45f4 221 /* 16 */ {1,3,8,0xf6},
va009039 0:7121d9fb45f4 222 /* 17 */ {2,2,8,0xf7},
va009039 0:7121d9fb45f4 223 /* 18 */ {3,2,8,0xf8},
va009039 0:7121d9fb45f4 224 /* 19 */ {8,1,8,0xf9},
va009039 0:7121d9fb45f4 225 /* 20 */ {0,8,9,0x1f4},
va009039 0:7121d9fb45f4 226 /* 21 */ {1,4,9,0x1f5},
va009039 0:7121d9fb45f4 227 /* 22 */ {4,2,9,0x1f6},
va009039 0:7121d9fb45f4 228 /* 23 */ {9,1,9,0x1f7},
va009039 0:7121d9fb45f4 229 /* 24 */ {10,1,9,0x1f8},
va009039 0:7121d9fb45f4 230 /* 25 */ {11,1,9,0x1f9},
va009039 0:7121d9fb45f4 231 /* 26 */ {12,1,9,0x1fa},
va009039 0:7121d9fb45f4 232 /* 27 */ {0,9,10,0x3f6},
va009039 0:7121d9fb45f4 233 /* 28 */ {2,3,10,0x3f7},
va009039 0:7121d9fb45f4 234 /* 29 */ {3,3,10,0x3f8},
va009039 0:7121d9fb45f4 235 /* 30 */ {5,2,10,0x3f9},
va009039 0:7121d9fb45f4 236 /* 31 */ {15,0,10,0x3fa},
va009039 0:7121d9fb45f4 237 /* 32 */ {1,5,11,0x7f6},
va009039 0:7121d9fb45f4 238 /* 33 */ {6,2,11,0x7f7},
va009039 0:7121d9fb45f4 239 /* 34 */ {7,2,11,0x7f8},
va009039 0:7121d9fb45f4 240 /* 35 */ {13,1,11,0x7f9},
va009039 0:7121d9fb45f4 241 /* 36 */ {0,10,12,0xff4},
va009039 0:7121d9fb45f4 242 /* 37 */ {1,6,12,0xff5},
va009039 0:7121d9fb45f4 243 /* 38 */ {2,4,12,0xff6},
va009039 0:7121d9fb45f4 244 /* 39 */ {3,4,12,0xff7},
va009039 0:7121d9fb45f4 245 /* 40 */ {14,1,14,0x3fe0},
va009039 0:7121d9fb45f4 246 /* 41 */ {2,5,15,0x7fc2},
va009039 0:7121d9fb45f4 247 /* 42 */ {15,1,15,0x7fc3},
va009039 0:7121d9fb45f4 248 /* 43 */ {1,7,16,0xff88},
va009039 0:7121d9fb45f4 249 /* 44 */ {1,8,16,0xff89},
va009039 0:7121d9fb45f4 250 /* 45 */ {1,9,16,0xff8a},
va009039 0:7121d9fb45f4 251 /* 46 */ {1,10,16,0xff8b},
va009039 0:7121d9fb45f4 252 /* 47 */ {2,6,16,0xff8c},
va009039 0:7121d9fb45f4 253 /* 48 */ {2,7,16,0xff8d},
va009039 0:7121d9fb45f4 254 /* 49 */ {2,8,16,0xff8e},
va009039 0:7121d9fb45f4 255 /* 50 */ {2,9,16,0xff8f},
va009039 0:7121d9fb45f4 256 /* 51 */ {2,10,16,0xff90},
va009039 0:7121d9fb45f4 257 /* 52 */ {3,5,16,0xff91},
va009039 0:7121d9fb45f4 258 /* 53 */ {3,6,16,0xff92},
va009039 0:7121d9fb45f4 259 /* 54 */ {3,7,16,0xff93},
va009039 0:7121d9fb45f4 260 /* 55 */ {3,8,16,0xff94},
va009039 0:7121d9fb45f4 261 /* 56 */ {3,9,16,0xff95},
va009039 0:7121d9fb45f4 262 /* 57 */ {3,10,16,0xff96},
va009039 0:7121d9fb45f4 263 /* 58 */ {4,3,16,0xff97},
va009039 0:7121d9fb45f4 264 /* 59 */ {4,4,16,0xff98},
va009039 0:7121d9fb45f4 265 /* 60 */ {4,5,16,0xff99},
va009039 0:7121d9fb45f4 266 /* 61 */ {4,6,16,0xff9a},
va009039 0:7121d9fb45f4 267 /* 62 */ {4,7,16,0xff9b},
va009039 0:7121d9fb45f4 268 /* 63 */ {4,8,16,0xff9c},
va009039 0:7121d9fb45f4 269 /* 64 */ {4,9,16,0xff9d},
va009039 0:7121d9fb45f4 270 /* 65 */ {4,10,16,0xff9e},
va009039 0:7121d9fb45f4 271 /* 66 */ {5,3,16,0xff9f},
va009039 0:7121d9fb45f4 272 /* 67 */ {5,4,16,0xffa0},
va009039 0:7121d9fb45f4 273 /* 68 */ {5,5,16,0xffa1},
va009039 0:7121d9fb45f4 274 /* 69 */ {5,6,16,0xffa2},
va009039 0:7121d9fb45f4 275 /* 70 */ {5,7,16,0xffa3},
va009039 0:7121d9fb45f4 276 /* 71 */ {5,8,16,0xffa4},
va009039 0:7121d9fb45f4 277 /* 72 */ {5,9,16,0xffa5},
va009039 0:7121d9fb45f4 278 /* 73 */ {5,10,16,0xffa6},
va009039 0:7121d9fb45f4 279 /* 74 */ {6,3,16,0xffa7},
va009039 0:7121d9fb45f4 280 /* 75 */ {6,4,16,0xffa8},
va009039 0:7121d9fb45f4 281 /* 76 */ {6,5,16,0xffa9},
va009039 0:7121d9fb45f4 282 /* 77 */ {6,6,16,0xffaa},
va009039 0:7121d9fb45f4 283 /* 78 */ {6,7,16,0xffab},
va009039 0:7121d9fb45f4 284 /* 79 */ {6,8,16,0xffac},
va009039 0:7121d9fb45f4 285 /* 80 */ {6,9,16,0xffad},
va009039 0:7121d9fb45f4 286 /* 81 */ {6,10,16,0xffae},
va009039 0:7121d9fb45f4 287 /* 82 */ {7,3,16,0xffaf},
va009039 0:7121d9fb45f4 288 /* 83 */ {7,4,16,0xffb0},
va009039 0:7121d9fb45f4 289 /* 84 */ {7,5,16,0xffb1},
va009039 0:7121d9fb45f4 290 /* 85 */ {7,6,16,0xffb2},
va009039 0:7121d9fb45f4 291 /* 86 */ {7,7,16,0xffb3},
va009039 0:7121d9fb45f4 292 /* 87 */ {7,8,16,0xffb4},
va009039 0:7121d9fb45f4 293 /* 88 */ {7,9,16,0xffb5},
va009039 0:7121d9fb45f4 294 /* 89 */ {7,10,16,0xffb6},
va009039 0:7121d9fb45f4 295 /* 90 */ {8,2,16,0xffb7},
va009039 0:7121d9fb45f4 296 /* 91 */ {8,3,16,0xffb8},
va009039 0:7121d9fb45f4 297 /* 92 */ {8,4,16,0xffb9},
va009039 0:7121d9fb45f4 298 /* 93 */ {8,5,16,0xffba},
va009039 0:7121d9fb45f4 299 /* 94 */ {8,6,16,0xffbb},
va009039 0:7121d9fb45f4 300 /* 95 */ {8,7,16,0xffbc},
va009039 0:7121d9fb45f4 301 /* 96 */ {8,8,16,0xffbd},
va009039 0:7121d9fb45f4 302 /* 97 */ {8,9,16,0xffbe},
va009039 0:7121d9fb45f4 303 /* 98 */ {8,10,16,0xffbf},
va009039 0:7121d9fb45f4 304 /* 99 */ {9,2,16,0xffc0},
va009039 0:7121d9fb45f4 305 /* 100 */ {9,3,16,0xffc1},
va009039 0:7121d9fb45f4 306 /* 101 */ {9,4,16,0xffc2},
va009039 0:7121d9fb45f4 307 /* 102 */ {9,5,16,0xffc3},
va009039 0:7121d9fb45f4 308 /* 103 */ {9,6,16,0xffc4},
va009039 0:7121d9fb45f4 309 /* 104 */ {9,7,16,0xffc5},
va009039 0:7121d9fb45f4 310 /* 105 */ {9,8,16,0xffc6},
va009039 0:7121d9fb45f4 311 /* 106 */ {9,9,16,0xffc7},
va009039 0:7121d9fb45f4 312 /* 107 */ {9,10,16,0xffc8},
va009039 0:7121d9fb45f4 313 /* 108 */ {10,2,16,0xffc9},
va009039 0:7121d9fb45f4 314 /* 109 */ {10,3,16,0xffca},
va009039 0:7121d9fb45f4 315 /* 110 */ {10,4,16,0xffcb},
va009039 0:7121d9fb45f4 316 /* 111 */ {10,5,16,0xffcc},
va009039 0:7121d9fb45f4 317 /* 112 */ {10,6,16,0xffcd},
va009039 0:7121d9fb45f4 318 /* 113 */ {10,7,16,0xffce},
va009039 0:7121d9fb45f4 319 /* 114 */ {10,8,16,0xffcf},
va009039 0:7121d9fb45f4 320 /* 115 */ {10,9,16,0xffd0},
va009039 0:7121d9fb45f4 321 /* 116 */ {10,10,16,0xffd1},
va009039 0:7121d9fb45f4 322 /* 117 */ {11,2,16,0xffd2},
va009039 0:7121d9fb45f4 323 /* 118 */ {11,3,16,0xffd3},
va009039 0:7121d9fb45f4 324 /* 119 */ {11,4,16,0xffd4},
va009039 0:7121d9fb45f4 325 /* 120 */ {11,5,16,0xffd5},
va009039 0:7121d9fb45f4 326 /* 121 */ {11,6,16,0xffd6},
va009039 0:7121d9fb45f4 327 /* 122 */ {11,7,16,0xffd7},
va009039 0:7121d9fb45f4 328 /* 123 */ {11,8,16,0xffd8},
va009039 0:7121d9fb45f4 329 /* 124 */ {11,9,16,0xffd9},
va009039 0:7121d9fb45f4 330 /* 125 */ {11,10,16,0xffda},
va009039 0:7121d9fb45f4 331 /* 126 */ {12,2,16,0xffdb},
va009039 0:7121d9fb45f4 332 /* 127 */ {12,3,16,0xffdc},
va009039 0:7121d9fb45f4 333 /* 128 */ {12,4,16,0xffdd},
va009039 0:7121d9fb45f4 334 /* 129 */ {12,5,16,0xffde},
va009039 0:7121d9fb45f4 335 /* 130 */ {12,6,16,0xffdf},
va009039 0:7121d9fb45f4 336 /* 131 */ {12,7,16,0xffe0},
va009039 0:7121d9fb45f4 337 /* 132 */ {12,8,16,0xffe1},
va009039 0:7121d9fb45f4 338 /* 133 */ {12,9,16,0xffe2},
va009039 0:7121d9fb45f4 339 /* 134 */ {12,10,16,0xffe3},
va009039 0:7121d9fb45f4 340 /* 135 */ {13,2,16,0xffe4},
va009039 0:7121d9fb45f4 341 /* 136 */ {13,3,16,0xffe5},
va009039 0:7121d9fb45f4 342 /* 137 */ {13,4,16,0xffe6},
va009039 0:7121d9fb45f4 343 /* 138 */ {13,5,16,0xffe7},
va009039 0:7121d9fb45f4 344 /* 139 */ {13,6,16,0xffe8},
va009039 0:7121d9fb45f4 345 /* 140 */ {13,7,16,0xffe9},
va009039 0:7121d9fb45f4 346 /* 141 */ {13,8,16,0xffea},
va009039 0:7121d9fb45f4 347 /* 142 */ {13,9,16,0xffeb},
va009039 0:7121d9fb45f4 348 /* 143 */ {13,10,16,0xffec},
va009039 0:7121d9fb45f4 349 /* 144 */ {14,2,16,0xffed},
va009039 0:7121d9fb45f4 350 /* 145 */ {14,3,16,0xffee},
va009039 0:7121d9fb45f4 351 /* 146 */ {14,4,16,0xffef},
va009039 0:7121d9fb45f4 352 /* 147 */ {14,5,16,0xfff0},
va009039 0:7121d9fb45f4 353 /* 148 */ {14,6,16,0xfff1},
va009039 0:7121d9fb45f4 354 /* 149 */ {14,7,16,0xfff2},
va009039 0:7121d9fb45f4 355 /* 150 */ {14,8,16,0xfff3},
va009039 0:7121d9fb45f4 356 /* 151 */ {14,9,16,0xfff4},
va009039 0:7121d9fb45f4 357 /* 152 */ {14,10,16,0xfff5},
va009039 0:7121d9fb45f4 358 /* 153 */ {15,2,16,0xfff6},
va009039 0:7121d9fb45f4 359 /* 154 */ {15,3,16,0xfff7},
va009039 0:7121d9fb45f4 360 /* 155 */ {15,4,16,0xfff8},
va009039 0:7121d9fb45f4 361 /* 156 */ {15,5,16,0xfff9},
va009039 0:7121d9fb45f4 362 /* 157 */ {15,6,16,0xfffa},
va009039 0:7121d9fb45f4 363 /* 158 */ {15,7,16,0xfffb},
va009039 0:7121d9fb45f4 364 /* 159 */ {15,8,16,0xfffc},
va009039 0:7121d9fb45f4 365 /* 160 */ {15,9,16,0xfffd},
va009039 0:7121d9fb45f4 366 /* 161 */ {15,10,16,0xfffe},
va009039 0:7121d9fb45f4 367 };
va009039 0:7121d9fb45f4 368
va009039 0:7121d9fb45f4 369 Huff* HuffmanDecode::Lookup(int tc, int th, BitPattern* bitpat)
va009039 0:7121d9fb45f4 370 {
va009039 0:7121d9fb45f4 371 Huff* huff;
va009039 0:7121d9fb45f4 372 int size;
va009039 0:7121d9fb45f4 373
va009039 0:7121d9fb45f4 374 if (tc == 0) {
va009039 0:7121d9fb45f4 375 if (th == 0) {
va009039 0:7121d9fb45f4 376 huff = (Huff*)HT_DC_0;
va009039 0:7121d9fb45f4 377 size = sizeof(HT_DC_0) / sizeof(Huff);
va009039 0:7121d9fb45f4 378 } else {
va009039 0:7121d9fb45f4 379 huff = (Huff*)HT_DC_1;
va009039 0:7121d9fb45f4 380 size = sizeof(HT_DC_1) / sizeof(Huff);
va009039 0:7121d9fb45f4 381 }
va009039 0:7121d9fb45f4 382 } else {
va009039 0:7121d9fb45f4 383 if (th == 0) {
va009039 0:7121d9fb45f4 384 huff = (Huff*)HT_AC_0;
va009039 0:7121d9fb45f4 385 size = sizeof(HT_AC_0) / sizeof(Huff);
va009039 0:7121d9fb45f4 386 } else {
va009039 0:7121d9fb45f4 387 huff = (Huff*)HT_AC_1;
va009039 0:7121d9fb45f4 388 size = sizeof(HT_AC_1) / sizeof(Huff);
va009039 0:7121d9fb45f4 389 }
va009039 0:7121d9fb45f4 390 }
va009039 0:7121d9fb45f4 391
va009039 0:7121d9fb45f4 392 for(int i = 0; i < size; i++) {
va009039 0:7121d9fb45f4 393 //DBG("%d %p\n", i, huff);
va009039 0:7121d9fb45f4 394 if (huff->code_size > bitpat->size()) {
va009039 0:7121d9fb45f4 395 return NULL;
va009039 0:7121d9fb45f4 396 }
va009039 0:7121d9fb45f4 397 BitPattern tmp(huff->code, huff->code_size);
va009039 0:7121d9fb45f4 398 if (bitpat->match(tmp)) {
va009039 0:7121d9fb45f4 399 return huff;
va009039 0:7121d9fb45f4 400 }
va009039 0:7121d9fb45f4 401 huff++;
va009039 0:7121d9fb45f4 402 }
va009039 0:7121d9fb45f4 403 return NULL;
va009039 0:7121d9fb45f4 404 }
va009039 0:7121d9fb45f4 405
va009039 1:58dfd5386a92 406 struct sthtinfo {
va009039 1:58dfd5386a92 407 const Huff* huff_table;
va009039 1:58dfd5386a92 408 const uint8_t* index_table;
va009039 1:58dfd5386a92 409 int max_code_size;
va009039 1:58dfd5386a92 410 };
va009039 1:58dfd5386a92 411
va009039 1:58dfd5386a92 412 const struct sthtinfo htinfo[2][2] = {
va009039 1:58dfd5386a92 413 {{HT_DC_0, HT_DC_0_index, 9}, {HT_DC_1, HT_DC_1_index, 11}},
va009039 1:58dfd5386a92 414 {{HT_AC_0, HT_AC_0_index, 16}, {HT_AC_1, HT_AC_1_index, 16}},
va009039 1:58dfd5386a92 415 };
va009039 1:58dfd5386a92 416
va009039 1:58dfd5386a92 417 Huff* HuffmanDecode::Lookup2(int tc, int th, BitPattern* bitpat)
va009039 1:58dfd5386a92 418 {
va009039 1:58dfd5386a92 419 const struct sthtinfo* info = &htinfo[tc][th];
va009039 1:58dfd5386a92 420
va009039 1:58dfd5386a92 421 int pat_size = bitpat->size();
va009039 1:58dfd5386a92 422 uint32_t pat = bitpat->peek(pat_size);
va009039 1:58dfd5386a92 423 if (pat_size > info->max_code_size) {
va009039 1:58dfd5386a92 424 pat >>= (pat_size-info->max_code_size);
va009039 1:58dfd5386a92 425 } else if (pat_size < info->max_code_size) {
va009039 1:58dfd5386a92 426 pat <<= (info->max_code_size-pat_size);
va009039 1:58dfd5386a92 427 }
va009039 1:58dfd5386a92 428 int index = info->index_table[pat];
va009039 1:58dfd5386a92 429 if (index == 0xff) {
va009039 1:58dfd5386a92 430 return NULL;
va009039 1:58dfd5386a92 431 }
va009039 1:58dfd5386a92 432 Huff* huff = (Huff*)&(info->huff_table[index]);
va009039 1:58dfd5386a92 433 if (huff->code_size > pat_size) {
va009039 1:58dfd5386a92 434 return NULL;
va009039 1:58dfd5386a92 435 }
va009039 1:58dfd5386a92 436 return huff;
va009039 1:58dfd5386a92 437 }
va009039 1:58dfd5386a92 438
va009039 0:7121d9fb45f4 439 int HuffmanDecode::getValue(Huff* huff, BitPattern* bitpat)
va009039 0:7121d9fb45f4 440 {
va009039 0:7121d9fb45f4 441 int value = bitpat->get(huff->value_size);
va009039 0:7121d9fb45f4 442 if (huff->value_size == 0) {
va009039 0:7121d9fb45f4 443 return 0;
va009039 0:7121d9fb45f4 444 }
va009039 0:7121d9fb45f4 445 if (value & (1<<(huff->value_size-1))) {
va009039 0:7121d9fb45f4 446 return value;
va009039 0:7121d9fb45f4 447 }
va009039 0:7121d9fb45f4 448 value -= (1<<huff->value_size)-1;
va009039 0:7121d9fb45f4 449 return value;
va009039 0:7121d9fb45f4 450 }