00001
00006 const int16_t ff_mpeg1_default_intra_matrix[64] = {
00007 8, 16, 19, 22, 26, 27, 29, 34,
00008 16, 16, 22, 24, 27, 29, 34, 37,
00009 19, 22, 26, 27, 29, 34, 34, 38,
00010 22, 22, 26, 27, 29, 34, 37, 40,
00011 22, 26, 27, 29, 32, 35, 40, 48,
00012 26, 27, 29, 32, 35, 40, 48, 58,
00013 26, 27, 29, 34, 38, 46, 56, 69,
00014 27, 29, 35, 38, 46, 56, 69, 83
00015 };
00016
00017 const int16_t ff_mpeg1_default_non_intra_matrix[64] = {
00018 16, 16, 16, 16, 16, 16, 16, 16,
00019 16, 16, 16, 16, 16, 16, 16, 16,
00020 16, 16, 16, 16, 16, 16, 16, 16,
00021 16, 16, 16, 16, 16, 16, 16, 16,
00022 16, 16, 16, 16, 16, 16, 16, 16,
00023 16, 16, 16, 16, 16, 16, 16, 16,
00024 16, 16, 16, 16, 16, 16, 16, 16,
00025 16, 16, 16, 16, 16, 16, 16, 16,
00026 };
00027
00028 static const uint16_t vlc_dc_lum_code[12] = {
00029 0x4, 0x0, 0x1, 0x5, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x1ff,
00030 };
00031 static const unsigned char vlc_dc_lum_bits[12] = {
00032 3, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 9,
00033 };
00034
00035 const uint16_t vlc_dc_chroma_code[12] = {
00036 0x0, 0x1, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe, 0x1fe, 0x3fe, 0x3ff,
00037 };
00038 const unsigned char vlc_dc_chroma_bits[12] = {
00039 2, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10,
00040 };
00041
00042 static const uint16_t mpeg1_vlc[113][2] = {
00043 { 0x3, 2 }, { 0x4, 4 }, { 0x5, 5 }, { 0x6, 7 },
00044 { 0x26, 8 }, { 0x21, 8 }, { 0xa, 10 }, { 0x1d, 12 },
00045 { 0x18, 12 }, { 0x13, 12 }, { 0x10, 12 }, { 0x1a, 13 },
00046 { 0x19, 13 }, { 0x18, 13 }, { 0x17, 13 }, { 0x1f, 14 },
00047 { 0x1e, 14 }, { 0x1d, 14 }, { 0x1c, 14 }, { 0x1b, 14 },
00048 { 0x1a, 14 }, { 0x19, 14 }, { 0x18, 14 }, { 0x17, 14 },
00049 { 0x16, 14 }, { 0x15, 14 }, { 0x14, 14 }, { 0x13, 14 },
00050 { 0x12, 14 }, { 0x11, 14 }, { 0x10, 14 }, { 0x18, 15 },
00051 { 0x17, 15 }, { 0x16, 15 }, { 0x15, 15 }, { 0x14, 15 },
00052 { 0x13, 15 }, { 0x12, 15 }, { 0x11, 15 }, { 0x10, 15 },
00053 { 0x3, 3 }, { 0x6, 6 }, { 0x25, 8 }, { 0xc, 10 },
00054 { 0x1b, 12 }, { 0x16, 13 }, { 0x15, 13 }, { 0x1f, 15 },
00055 { 0x1e, 15 }, { 0x1d, 15 }, { 0x1c, 15 }, { 0x1b, 15 },
00056 { 0x1a, 15 }, { 0x19, 15 }, { 0x13, 16 }, { 0x12, 16 },
00057 { 0x11, 16 }, { 0x10, 16 }, { 0x5, 4 }, { 0x4, 7 },
00058 { 0xb, 10 }, { 0x14, 12 }, { 0x14, 13 }, { 0x7, 5 },
00059 { 0x24, 8 }, { 0x1c, 12 }, { 0x13, 13 }, { 0x6, 5 },
00060 { 0xf, 10 }, { 0x12, 12 }, { 0x7, 6 }, { 0x9, 10 },
00061 { 0x12, 13 }, { 0x5, 6 }, { 0x1e, 12 }, { 0x14, 16 },
00062 { 0x4, 6 }, { 0x15, 12 }, { 0x7, 7 }, { 0x11, 12 },
00063 { 0x5, 7 }, { 0x11, 13 }, { 0x27, 8 }, { 0x10, 13 },
00064 { 0x23, 8 }, { 0x1a, 16 }, { 0x22, 8 }, { 0x19, 16 },
00065 { 0x20, 8 }, { 0x18, 16 }, { 0xe, 10 }, { 0x17, 16 },
00066 { 0xd, 10 }, { 0x16, 16 }, { 0x8, 10 }, { 0x15, 16 },
00067 { 0x1f, 12 }, { 0x1a, 12 }, { 0x19, 12 }, { 0x17, 12 },
00068 { 0x16, 12 }, { 0x1f, 13 }, { 0x1e, 13 }, { 0x1d, 13 },
00069 { 0x1c, 13 }, { 0x1b, 13 }, { 0x1f, 16 }, { 0x1e, 16 },
00070 { 0x1d, 16 }, { 0x1c, 16 }, { 0x1b, 16 },
00071 { 0x1, 6 },
00072 { 0x2, 2 },
00073 };
00074
00075 static const uint16_t mpeg2_vlc[113][2] = {
00076 {0x02, 2}, {0x06, 3}, {0x07, 4}, {0x1c, 5},
00077 {0x1d, 5}, {0x05, 6}, {0x04, 6}, {0x7b, 7},
00078 {0x7c, 7}, {0x23, 8}, {0x22, 8}, {0xfa, 8},
00079 {0xfb, 8}, {0xfe, 8}, {0xff, 8}, {0x1f,14},
00080 {0x1e,14}, {0x1d,14}, {0x1c,14}, {0x1b,14},
00081 {0x1a,14}, {0x19,14}, {0x18,14}, {0x17,14},
00082 {0x16,14}, {0x15,14}, {0x14,14}, {0x13,14},
00083 {0x12,14}, {0x11,14}, {0x10,14}, {0x18,15},
00084 {0x17,15}, {0x16,15}, {0x15,15}, {0x14,15},
00085 {0x13,15}, {0x12,15}, {0x11,15}, {0x10,15},
00086 {0x02, 3}, {0x06, 5}, {0x79, 7}, {0x27, 8},
00087 {0x20, 8}, {0x16,13}, {0x15,13}, {0x1f,15},
00088 {0x1e,15}, {0x1d,15}, {0x1c,15}, {0x1b,15},
00089 {0x1a,15}, {0x19,15}, {0x13,16}, {0x12,16},
00090 {0x11,16}, {0x10,16}, {0x05, 5}, {0x07, 7},
00091 {0xfc, 8}, {0x0c,10}, {0x14,13}, {0x07, 5},
00092 {0x26, 8}, {0x1c,12}, {0x13,13}, {0x06, 6},
00093 {0xfd, 8}, {0x12,12}, {0x07, 6}, {0x04, 9},
00094 {0x12,13}, {0x06, 7}, {0x1e,12}, {0x14,16},
00095 {0x04, 7}, {0x15,12}, {0x05, 7}, {0x11,12},
00096 {0x78, 7}, {0x11,13}, {0x7a, 7}, {0x10,13},
00097 {0x21, 8}, {0x1a,16}, {0x25, 8}, {0x19,16},
00098 {0x24, 8}, {0x18,16}, {0x05, 9}, {0x17,16},
00099 {0x07, 9}, {0x16,16}, {0x0d,10}, {0x15,16},
00100 {0x1f,12}, {0x1a,12}, {0x19,12}, {0x17,12},
00101 {0x16,12}, {0x1f,13}, {0x1e,13}, {0x1d,13},
00102 {0x1c,13}, {0x1b,13}, {0x1f,16}, {0x1e,16},
00103 {0x1d,16}, {0x1c,16}, {0x1b,16},
00104 {0x01,6},
00105 {0x06,4},
00106 };
00107
00108 static const int8_t mpeg1_level[111] = {
00109 1, 2, 3, 4, 5, 6, 7, 8,
00110 9, 10, 11, 12, 13, 14, 15, 16,
00111 17, 18, 19, 20, 21, 22, 23, 24,
00112 25, 26, 27, 28, 29, 30, 31, 32,
00113 33, 34, 35, 36, 37, 38, 39, 40,
00114 1, 2, 3, 4, 5, 6, 7, 8,
00115 9, 10, 11, 12, 13, 14, 15, 16,
00116 17, 18, 1, 2, 3, 4, 5, 1,
00117 2, 3, 4, 1, 2, 3, 1, 2,
00118 3, 1, 2, 3, 1, 2, 1, 2,
00119 1, 2, 1, 2, 1, 2, 1, 2,
00120 1, 2, 1, 2, 1, 2, 1, 2,
00121 1, 1, 1, 1, 1, 1, 1, 1,
00122 1, 1, 1, 1, 1, 1, 1,
00123 };
00124
00125 static const int8_t mpeg1_run[111] = {
00126 0, 0, 0, 0, 0, 0, 0, 0,
00127 0, 0, 0, 0, 0, 0, 0, 0,
00128 0, 0, 0, 0, 0, 0, 0, 0,
00129 0, 0, 0, 0, 0, 0, 0, 0,
00130 0, 0, 0, 0, 0, 0, 0, 0,
00131 1, 1, 1, 1, 1, 1, 1, 1,
00132 1, 1, 1, 1, 1, 1, 1, 1,
00133 1, 1, 2, 2, 2, 2, 2, 3,
00134 3, 3, 3, 4, 4, 4, 5, 5,
00135 5, 6, 6, 6, 7, 7, 8, 8,
00136 9, 9, 10, 10, 11, 11, 12, 12,
00137 13, 13, 14, 14, 15, 15, 16, 16,
00138 17, 18, 19, 20, 21, 22, 23, 24,
00139 25, 26, 27, 28, 29, 30, 31,
00140 };
00141
00142 static RLTable rl_mpeg1 = {
00143 111,
00144 111,
00145 mpeg1_vlc,
00146 mpeg1_run,
00147 mpeg1_level,
00148 };
00149
00150 static RLTable rl_mpeg2 = {
00151 111,
00152 111,
00153 mpeg2_vlc,
00154 mpeg1_run,
00155 mpeg1_level,
00156 };
00157
00158 static const uint8_t mbAddrIncrTable[36][2] = {
00159 {0x1, 1},
00160 {0x3, 3},
00161 {0x2, 3},
00162 {0x3, 4},
00163 {0x2, 4},
00164 {0x3, 5},
00165 {0x2, 5},
00166 {0x7, 7},
00167 {0x6, 7},
00168 {0xb, 8},
00169 {0xa, 8},
00170 {0x9, 8},
00171 {0x8, 8},
00172 {0x7, 8},
00173 {0x6, 8},
00174 {0x17, 10},
00175 {0x16, 10},
00176 {0x15, 10},
00177 {0x14, 10},
00178 {0x13, 10},
00179 {0x12, 10},
00180 {0x23, 11},
00181 {0x22, 11},
00182 {0x21, 11},
00183 {0x20, 11},
00184 {0x1f, 11},
00185 {0x1e, 11},
00186 {0x1d, 11},
00187 {0x1c, 11},
00188 {0x1b, 11},
00189 {0x1a, 11},
00190 {0x19, 11},
00191 {0x18, 11},
00192 {0x8, 11},
00193 {0xf, 11},
00194 {0x0, 8},
00195 };
00196
00197 static const uint8_t mbPatTable[64][2] = {
00198 {0x1, 9},
00199 {0xb, 5},
00200 {0x9, 5},
00201 {0xd, 6},
00202 {0xd, 4},
00203 {0x17, 7},
00204 {0x13, 7},
00205 {0x1f, 8},
00206 {0xc, 4},
00207 {0x16, 7},
00208 {0x12, 7},
00209 {0x1e, 8},
00210 {0x13, 5},
00211 {0x1b, 8},
00212 {0x17, 8},
00213 {0x13, 8},
00214 {0xb, 4},
00215 {0x15, 7},
00216 {0x11, 7},
00217 {0x1d, 8},
00218 {0x11, 5},
00219 {0x19, 8},
00220 {0x15, 8},
00221 {0x11, 8},
00222 {0xf, 6},
00223 {0xf, 8},
00224 {0xd, 8},
00225 {0x3, 9},
00226 {0xf, 5},
00227 {0xb, 8},
00228 {0x7, 8},
00229 {0x7, 9},
00230 {0xa, 4},
00231 {0x14, 7},
00232 {0x10, 7},
00233 {0x1c, 8},
00234 {0xe, 6},
00235 {0xe, 8},
00236 {0xc, 8},
00237 {0x2, 9},
00238 {0x10, 5},
00239 {0x18, 8},
00240 {0x14, 8},
00241 {0x10, 8},
00242 {0xe, 5},
00243 {0xa, 8},
00244 {0x6, 8},
00245 {0x6, 9},
00246 {0x12, 5},
00247 {0x1a, 8},
00248 {0x16, 8},
00249 {0x12, 8},
00250 {0xd, 5},
00251 {0x9, 8},
00252 {0x5, 8},
00253 {0x5, 9},
00254 {0xc, 5},
00255 {0x8, 8},
00256 {0x4, 8},
00257 {0x4, 9},
00258 {0x7, 3},
00259 {0xa, 5},
00260 {0x8, 5},
00261 {0xc, 6}
00262 };
00263
00264 #define MB_TYPE_ZERO_MV 0x20000000
00265 #define IS_ZERO_MV(a) ((a)&MB_TYPE_ZERO_MV)
00266
00267 static const uint8_t table_mb_ptype[7][2] = {
00268 { 3, 5 },
00269 { 1, 2 },
00270 { 1, 3 },
00271 { 1, 1 },
00272 { 1, 6 },
00273 { 1, 5 },
00274 { 2, 5 },
00275 };
00276
00277 static const uint32_t ptype2mb_type[7] = {
00278 MB_TYPE_INTRA,
00279 MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
00280 MB_TYPE_L0,
00281 MB_TYPE_L0 | MB_TYPE_CBP,
00282 MB_TYPE_QUANT | MB_TYPE_INTRA,
00283 MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP | MB_TYPE_ZERO_MV | MB_TYPE_16x16,
00284 MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP,
00285 };
00286
00287 static const uint8_t table_mb_btype[11][2] = {
00288 { 3, 5 },
00289 { 2, 3 },
00290 { 3, 3 },
00291 { 2, 4 },
00292 { 3, 4 },
00293 { 2, 2 },
00294 { 3, 2 },
00295 { 1, 6 },
00296 { 2, 6 },
00297 { 3, 6 },
00298 { 2, 5 },
00299 };
00300
00301 static const uint32_t btype2mb_type[11] = {
00302 MB_TYPE_INTRA,
00303 MB_TYPE_L1,
00304 MB_TYPE_L1 | MB_TYPE_CBP,
00305 MB_TYPE_L0,
00306 MB_TYPE_L0 | MB_TYPE_CBP,
00307 MB_TYPE_L0L1,
00308 MB_TYPE_L0L1 | MB_TYPE_CBP,
00309 MB_TYPE_QUANT | MB_TYPE_INTRA,
00310 MB_TYPE_QUANT | MB_TYPE_L1 | MB_TYPE_CBP,
00311 MB_TYPE_QUANT | MB_TYPE_L0 | MB_TYPE_CBP,
00312 MB_TYPE_QUANT | MB_TYPE_L0L1 | MB_TYPE_CBP,
00313 };
00314
00315 static const uint8_t mbMotionVectorTable[17][2] = {
00316 { 0x1, 1 },
00317 { 0x1, 2 },
00318 { 0x1, 3 },
00319 { 0x1, 4 },
00320 { 0x3, 6 },
00321 { 0x5, 7 },
00322 { 0x4, 7 },
00323 { 0x3, 7 },
00324 { 0xb, 9 },
00325 { 0xa, 9 },
00326 { 0x9, 9 },
00327 { 0x11, 10 },
00328 { 0x10, 10 },
00329 { 0xf, 10 },
00330 { 0xe, 10 },
00331 { 0xd, 10 },
00332 { 0xc, 10 },
00333 };
00334
00335 static const AVRational frame_rate_tab[] = {
00336 { 0, 0},
00337 {24000, 1001},
00338 { 24, 1},
00339 { 25, 1},
00340 {30000, 1001},
00341 { 30, 1},
00342 { 50, 1},
00343 {60000, 1001},
00344 { 60, 1},
00345
00346 { 15, 1},
00347
00348 { 5, 1},
00349 { 10, 1},
00350 { 12, 1},
00351 { 15, 1},
00352 { 0, 0},
00353 };
00354
00355 static const uint8_t non_linear_qscale[32] = {
00356 0, 1, 2, 3, 4, 5, 6, 7,
00357 8,10,12,14,16,18,20,22,
00358 24,28,32,36,40,44,48,52,
00359 56,64,72,80,88,96,104,112,
00360 };
00361
00362 const uint8_t ff_mpeg1_dc_scale_table[128]={
00363
00364 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
00365 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
00366 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
00367 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
00368 };
00369
00370 const static uint8_t mpeg2_dc_scale_table1[128]={
00371
00372 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00373 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00374 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00375 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
00376 };
00377
00378 static const uint8_t mpeg2_dc_scale_table2[128]={
00379
00380 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00381 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00382 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00383 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
00384 };
00385
00386 static const uint8_t mpeg2_dc_scale_table3[128]={
00387
00388 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00389 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00390 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00391 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
00392 };
00393
00394 static const uint8_t *mpeg2_dc_scale_table[4]={
00395 ff_mpeg1_dc_scale_table,
00396 mpeg2_dc_scale_table1,
00397 mpeg2_dc_scale_table2,
00398 mpeg2_dc_scale_table3,
00399 };
00400
00401 static const float mpeg1_aspect[16]={
00402 0.0000,
00403 1.0000,
00404 0.6735,
00405 0.7031,
00406
00407 0.7615,
00408 0.8055,
00409 0.8437,
00410 0.8935,
00411
00412 0.9157,
00413 0.9815,
00414 1.0255,
00415 1.0695,
00416
00417 1.0950,
00418 1.1575,
00419 1.2015,
00420 };
00421
00422 static const AVRational mpeg2_aspect[16]={
00423 {0,1},
00424 {1,1},
00425 {4,3},
00426 {16,9},
00427 {221,100},
00428 {0,1},
00429 {0,1},
00430 {0,1},
00431 {0,1},
00432 {0,1},
00433 {0,1},
00434 {0,1},
00435 {0,1},
00436 {0,1},
00437 {0,1},
00438 {0,1},
00439 };
00440
00441 static const uint8_t svcd_scan_offset_placeholder[14]={
00442 0x10, 0x0E,
00443 0x00, 0x80, 0x81,
00444 0x00, 0x80, 0x81,
00445 0xff, 0xff, 0xff,
00446 0xff, 0xff, 0xff,
00447 };