00001
00007
00008 const uint8_t intra_MCBPC_code[9] = { 1, 1, 2, 3, 1, 1, 2, 3, 1 };
00009 const uint8_t intra_MCBPC_bits[9] = { 1, 3, 3, 3, 4, 6, 6, 6, 9 };
00010
00011
00012
00013 const uint8_t inter_MCBPC_code[28] = {
00014 1, 3, 2, 5,
00015 3, 4, 3, 3,
00016 3, 7, 6, 5,
00017 4, 4, 3, 2,
00018 2, 5, 4, 5,
00019 1, 0, 0, 0,
00020 2, 12, 14, 15,
00021 };
00022 const uint8_t inter_MCBPC_bits[28] = {
00023 1, 4, 4, 6,
00024 5, 8, 8, 7,
00025 3, 7, 7, 9,
00026 6, 9, 9, 9,
00027 3, 7, 7, 8,
00028 9, 0, 0, 0,
00029 11, 13, 13, 13,
00030 };
00031
00032 static const uint8_t h263_mbtype_b_tab[15][2] = {
00033 {1, 1},
00034 {3, 3},
00035 {1, 5},
00036 {4, 4},
00037 {5, 4},
00038 {6, 6},
00039 {2, 4},
00040 {3, 4},
00041 {7, 6},
00042 {4, 6},
00043 {5, 6},
00044 {1, 6},
00045 {1,10},
00046 {1, 7},
00047 {1, 8},
00048 };
00049
00050 static const int h263_mb_type_b_map[15]= {
00051 MB_TYPE_DIRECT2 | MB_TYPE_L0L1,
00052 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP,
00053 MB_TYPE_DIRECT2 | MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT,
00054 MB_TYPE_L0 | MB_TYPE_16x16,
00055 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_16x16,
00056 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00057 MB_TYPE_L1 | MB_TYPE_16x16,
00058 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_16x16,
00059 MB_TYPE_L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00060 MB_TYPE_L0L1 | MB_TYPE_16x16,
00061 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_16x16,
00062 MB_TYPE_L0L1 | MB_TYPE_CBP | MB_TYPE_QUANT | MB_TYPE_16x16,
00063 0,
00064 MB_TYPE_INTRA4x4 | MB_TYPE_CBP,
00065 MB_TYPE_INTRA4x4 | MB_TYPE_CBP | MB_TYPE_QUANT,
00066 };
00067
00068 const uint8_t cbpc_b_tab[4][2] = {
00069 {0, 1},
00070 {2, 2},
00071 {7, 3},
00072 {6, 3},
00073 };
00074
00075 const uint8_t cbpy_tab[16][2] =
00076 {
00077 {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
00078 {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
00079 };
00080
00081 const uint8_t mvtab[33][2] =
00082 {
00083 {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
00084 {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
00085 {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
00086 {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
00087 {2,12}
00088 };
00089
00090
00091 const uint16_t inter_vlc[103][2] = {
00092 { 0x2, 2 },{ 0xf, 4 },{ 0x15, 6 },{ 0x17, 7 },
00093 { 0x1f, 8 },{ 0x25, 9 },{ 0x24, 9 },{ 0x21, 10 },
00094 { 0x20, 10 },{ 0x7, 11 },{ 0x6, 11 },{ 0x20, 11 },
00095 { 0x6, 3 },{ 0x14, 6 },{ 0x1e, 8 },{ 0xf, 10 },
00096 { 0x21, 11 },{ 0x50, 12 },{ 0xe, 4 },{ 0x1d, 8 },
00097 { 0xe, 10 },{ 0x51, 12 },{ 0xd, 5 },{ 0x23, 9 },
00098 { 0xd, 10 },{ 0xc, 5 },{ 0x22, 9 },{ 0x52, 12 },
00099 { 0xb, 5 },{ 0xc, 10 },{ 0x53, 12 },{ 0x13, 6 },
00100 { 0xb, 10 },{ 0x54, 12 },{ 0x12, 6 },{ 0xa, 10 },
00101 { 0x11, 6 },{ 0x9, 10 },{ 0x10, 6 },{ 0x8, 10 },
00102 { 0x16, 7 },{ 0x55, 12 },{ 0x15, 7 },{ 0x14, 7 },
00103 { 0x1c, 8 },{ 0x1b, 8 },{ 0x21, 9 },{ 0x20, 9 },
00104 { 0x1f, 9 },{ 0x1e, 9 },{ 0x1d, 9 },{ 0x1c, 9 },
00105 { 0x1b, 9 },{ 0x1a, 9 },{ 0x22, 11 },{ 0x23, 11 },
00106 { 0x56, 12 },{ 0x57, 12 },{ 0x7, 4 },{ 0x19, 9 },
00107 { 0x5, 11 },{ 0xf, 6 },{ 0x4, 11 },{ 0xe, 6 },
00108 { 0xd, 6 },{ 0xc, 6 },{ 0x13, 7 },{ 0x12, 7 },
00109 { 0x11, 7 },{ 0x10, 7 },{ 0x1a, 8 },{ 0x19, 8 },
00110 { 0x18, 8 },{ 0x17, 8 },{ 0x16, 8 },{ 0x15, 8 },
00111 { 0x14, 8 },{ 0x13, 8 },{ 0x18, 9 },{ 0x17, 9 },
00112 { 0x16, 9 },{ 0x15, 9 },{ 0x14, 9 },{ 0x13, 9 },
00113 { 0x12, 9 },{ 0x11, 9 },{ 0x7, 10 },{ 0x6, 10 },
00114 { 0x5, 10 },{ 0x4, 10 },{ 0x24, 11 },{ 0x25, 11 },
00115 { 0x26, 11 },{ 0x27, 11 },{ 0x58, 12 },{ 0x59, 12 },
00116 { 0x5a, 12 },{ 0x5b, 12 },{ 0x5c, 12 },{ 0x5d, 12 },
00117 { 0x5e, 12 },{ 0x5f, 12 },{ 0x3, 7 },
00118 };
00119
00120 const int8_t inter_level[102] = {
00121 1, 2, 3, 4, 5, 6, 7, 8,
00122 9, 10, 11, 12, 1, 2, 3, 4,
00123 5, 6, 1, 2, 3, 4, 1, 2,
00124 3, 1, 2, 3, 1, 2, 3, 1,
00125 2, 3, 1, 2, 1, 2, 1, 2,
00126 1, 2, 1, 1, 1, 1, 1, 1,
00127 1, 1, 1, 1, 1, 1, 1, 1,
00128 1, 1, 1, 2, 3, 1, 2, 1,
00129 1, 1, 1, 1, 1, 1, 1, 1,
00130 1, 1, 1, 1, 1, 1, 1, 1,
00131 1, 1, 1, 1, 1, 1, 1, 1,
00132 1, 1, 1, 1, 1, 1, 1, 1,
00133 1, 1, 1, 1, 1, 1,
00134 };
00135
00136 const int8_t inter_run[102] = {
00137 0, 0, 0, 0, 0, 0, 0, 0,
00138 0, 0, 0, 0, 1, 1, 1, 1,
00139 1, 1, 2, 2, 2, 2, 3, 3,
00140 3, 4, 4, 4, 5, 5, 5, 6,
00141 6, 6, 7, 7, 8, 8, 9, 9,
00142 10, 10, 11, 12, 13, 14, 15, 16,
00143 17, 18, 19, 20, 21, 22, 23, 24,
00144 25, 26, 0, 0, 0, 1, 1, 2,
00145 3, 4, 5, 6, 7, 8, 9, 10,
00146 11, 12, 13, 14, 15, 16, 17, 18,
00147 19, 20, 21, 22, 23, 24, 25, 26,
00148 27, 28, 29, 30, 31, 32, 33, 34,
00149 35, 36, 37, 38, 39, 40,
00150 };
00151
00152 static RLTable rl_inter = {
00153 102,
00154 58,
00155 inter_vlc,
00156 inter_run,
00157 inter_level,
00158 };
00159
00160 const uint16_t intra_vlc_aic[103][2] = {
00161 { 0x2, 2 }, { 0x6, 3 }, { 0xe, 4 }, { 0xc, 5 },
00162 { 0xd, 5 }, { 0x10, 6 }, { 0x11, 6 }, { 0x12, 6 },
00163 { 0x16, 7 }, { 0x1b, 8 }, { 0x20, 9 }, { 0x21, 9 },
00164 { 0x1a, 9 }, { 0x1b, 9 }, { 0x1c, 9 }, { 0x1d, 9 },
00165 { 0x1e, 9 }, { 0x1f, 9 }, { 0x23, 11 }, { 0x22, 11 },
00166 { 0x57, 12 }, { 0x56, 12 }, { 0x55, 12 }, { 0x54, 12 },
00167 { 0x53, 12 }, { 0xf, 4 }, { 0x14, 6 }, { 0x14, 7 },
00168 { 0x1e, 8 }, { 0xf, 10 }, { 0x21, 11 }, { 0x50, 12 },
00169 { 0xb, 5 }, { 0x15, 7 }, { 0xe, 10 }, { 0x9, 10 },
00170 { 0x15, 6 }, { 0x1d, 8 }, { 0xd, 10 }, { 0x51, 12 },
00171 { 0x13, 6 }, { 0x23, 9 }, { 0x7, 11 }, { 0x17, 7 },
00172 { 0x22, 9 }, { 0x52, 12 }, { 0x1c, 8 }, { 0xc, 10 },
00173 { 0x1f, 8 }, { 0xb, 10 }, { 0x25, 9 }, { 0xa, 10 },
00174 { 0x24, 9 }, { 0x6, 11 }, { 0x21, 10 }, { 0x20, 10 },
00175 { 0x8, 10 }, { 0x20, 11 }, { 0x7, 4 }, { 0xc, 6 },
00176 { 0x10, 7 }, { 0x13, 8 }, { 0x11, 9 }, { 0x12, 9 },
00177 { 0x4, 10 }, { 0x27, 11 }, { 0x26, 11 }, { 0x5f, 12 },
00178 { 0xf, 6 }, { 0x13, 9 }, { 0x5, 10 }, { 0x25, 11 },
00179 { 0xe, 6 }, { 0x14, 9 }, { 0x24, 11 }, { 0xd, 6 },
00180 { 0x6, 10 }, { 0x5e, 12 }, { 0x11, 7 }, { 0x7, 10 },
00181 { 0x13, 7 }, { 0x5d, 12 }, { 0x12, 7 }, { 0x5c, 12 },
00182 { 0x14, 8 }, { 0x5b, 12 }, { 0x15, 8 }, { 0x1a, 8 },
00183 { 0x19, 8 }, { 0x18, 8 }, { 0x17, 8 }, { 0x16, 8 },
00184 { 0x19, 9 }, { 0x15, 9 }, { 0x16, 9 }, { 0x18, 9 },
00185 { 0x17, 9 }, { 0x4, 11 }, { 0x5, 11 }, { 0x58, 12 },
00186 { 0x59, 12 }, { 0x5a, 12 }, { 0x3, 7 },
00187 };
00188
00189 const int8_t intra_run_aic[102] = {
00190 0, 0, 0, 0, 0, 0, 0, 0,
00191 0, 0, 0, 0, 0, 0, 0, 0,
00192 0, 0, 0, 0, 0, 0, 0, 0,
00193 0, 1, 1, 1, 1, 1, 1, 1,
00194 2, 2, 2, 2, 3, 3, 3, 3,
00195 4, 4, 4, 5, 5, 5, 6, 6,
00196 7, 7, 8, 8, 9, 9, 10, 11,
00197 12, 13, 0, 0, 0, 0, 0, 0,
00198 0, 0, 0, 0, 1, 1, 1, 1,
00199 2, 2, 2, 3, 3, 3, 4, 4,
00200 5, 5, 6, 6, 7, 7, 8, 9,
00201 10, 11, 12, 13, 14, 15, 16, 17,
00202 18, 19, 20, 21, 22, 23,
00203 };
00204
00205 const int8_t intra_level_aic[102] = {
00206 1, 2, 3, 4, 5, 6, 7, 8,
00207 9, 10, 11, 12, 13, 14, 15, 16,
00208 17, 18, 19, 20, 21, 22, 23, 24,
00209 25, 1, 2, 3, 4, 5, 6, 7,
00210 1, 2, 3, 4, 1, 2, 3, 4,
00211 1, 2, 3, 1, 2, 3, 1, 2,
00212 1, 2, 1, 2, 1, 2, 1, 1,
00213 1, 1, 1, 2, 3, 4, 5, 6,
00214 7, 8, 9, 10, 1, 2, 3, 4,
00215 1, 2, 3, 1, 2, 3, 1, 2,
00216 1, 2, 1, 2, 1, 2, 1, 1,
00217 1, 1, 1, 1, 1, 1, 1, 1,
00218 1, 1, 1, 1, 1, 1,
00219 };
00220
00221 static RLTable rl_intra_aic = {
00222 102,
00223 58,
00224 intra_vlc_aic,
00225 intra_run_aic,
00226 intra_level_aic,
00227 };
00228
00229 static const uint8_t wrong_run[102] = {
00230 1, 2, 3, 5, 4, 10, 9, 8,
00231 11, 15, 17, 16, 23, 22, 21, 20,
00232 19, 18, 25, 24, 27, 26, 11, 7,
00233 6, 1, 2, 13, 2, 2, 2, 2,
00234 6, 12, 3, 9, 1, 3, 4, 3,
00235 7, 4, 1, 1, 5, 5, 14, 6,
00236 1, 7, 1, 8, 1, 1, 1, 1,
00237 10, 1, 1, 5, 9, 17, 25, 24,
00238 29, 33, 32, 41, 2, 23, 28, 31,
00239 3, 22, 30, 4, 27, 40, 8, 26,
00240 6, 39, 7, 38, 16, 37, 15, 10,
00241 11, 12, 13, 14, 1, 21, 20, 18,
00242 19, 2, 1, 34, 35, 36
00243 };
00244
00245 static const uint16_t h263_format[8][2] = {
00246 { 0, 0 },
00247 { 128, 96 },
00248 { 176, 144 },
00249 { 352, 288 },
00250 { 704, 576 },
00251 { 1408, 1152 },
00252 };
00253
00254 const uint8_t ff_aic_dc_scale_table[32]={
00255
00256 0, 2, 4, 6, 8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,46,48,50,52,54,56,58,60,62
00257 };
00258
00259 static const uint8_t modified_quant_tab[2][32]={
00260
00261 {
00262 0, 3, 1, 2, 3, 4, 5, 6, 7, 8, 9, 9,10,11,12,13,14,15,16,17,18,18,19,20,21,22,23,24,25,26,27,28
00263 },{
00264 0, 2, 3, 4, 5, 6, 7, 8, 9,10,11,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,31,31,26
00265 }
00266 };
00267
00268 const uint8_t ff_h263_chroma_qscale_table[32]={
00269
00270 0, 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 9,10,10,11,11,12,12,12,13,13,13,14,14,14,14,14,15,15,15,15,15
00271 };
00272
00273 const uint16_t ff_mba_max[6]={
00274 47, 98, 395,1583,6335,9215
00275 };
00276
00277 const uint8_t ff_mba_length[6]={
00278 6, 7, 9, 11, 13, 14
00279 };
00280
00281 const uint8_t ff_h263_loop_filter_strength[32]={
00282
00283 0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,11,12,12,12
00284 };
00285