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