[cvs] / xvidcore / src / bitstream / mbcoding.c Repository:
ViewVC logotype

Diff of /xvidcore/src/bitstream/mbcoding.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.42, Sat Feb 15 15:22:18 2003 UTC revision 1.44.2.9, Sat May 17 13:33:01 2003 UTC
# Line 51  Line 51 
51    
52  #include <stdio.h>  #include <stdio.h>
53  #include <stdlib.h>  #include <stdlib.h>
54    #include <string.h>
55    
56  #include "../portab.h"  #include "../portab.h"
57  #include "../global.h"  #include "../global.h"
58  #include "bitstream.h"  #include "bitstream.h"
# Line 212  Line 214 
214                                                                          = (ESCAPE3 << 21) | (last << 20) | (run << 14) | (1 << 13) | ((level & 0xfff) << 1) | 1;                                                                          = (ESCAPE3 << 21) | (last << 20) | (run << 14) | (1 << 13) | ((level & 0xfff) << 1) | 1;
215                                                                  coeff_VLC[intra][last][level + offset][run].len = 30;                                                                  coeff_VLC[intra][last][level + offset][run].len = 30;
216                                                                          coeff_VLC[intra][last][offset - level][run].code                                                                          coeff_VLC[intra][last][offset - level][run].code
217                                                                          = (ESCAPE3 << 21) | (last << 20) | (run << 14) | (1 << 13) | ((-level & 0xfff) << 1) | 1;                                                                          = (ESCAPE3 << 21) | (last << 20) | (run << 14) | (1 << 13) | ((-(int32_t)level & 0xfff) << 1) | 1;
218                                                                  coeff_VLC[intra][last][offset - level][run].len = 30;                                                                  coeff_VLC[intra][last][offset - level][run].len = 30;
219                                                          }                                                          }
220                                                          continue;                                                          continue;
# Line 498  Line 500 
500          {          {
501                  if ((level = qcoeff[zigzag[i++]]) != 0)                  if ((level = qcoeff[zigzag[i++]]) != 0)
502                  {                  {
503                          abs_level = ABS(prev_level);                          abs_level = abs(prev_level);
504                          abs_level = abs_level < 64 ? abs_level : 0;                          abs_level = abs_level < 64 ? abs_level : 0;
505                          code      = coeff_VLC[1][0][abs_level][prev_run].code;                          code      = coeff_VLC[1][0][abs_level][prev_run].code;
506                          len               = coeff_VLC[1][0][abs_level][prev_run].len;                          len               = coeff_VLC[1][0][abs_level][prev_run].len;
# Line 518  Line 520 
520                          run++;                          run++;
521          }          }
522    
523          abs_level = ABS(prev_level);          abs_level = abs(prev_level);
524          abs_level = abs_level < 64 ? abs_level : 0;          abs_level = abs_level < 64 ? abs_level : 0;
525          code      = coeff_VLC[1][1][abs_level][prev_run].code;          code      = coeff_VLC[1][1][abs_level][prev_run].code;
526          len               = coeff_VLC[1][1][abs_level][prev_run].len;          len               = coeff_VLC[1][1][abs_level][prev_run].len;
# Line 559  Line 561 
561          {          {
562                  if ((level = qcoeff[zigzag[i++]]) != 0)                  if ((level = qcoeff[zigzag[i++]]) != 0)
563                  {                  {
564                          abs_level = ABS(prev_level);                          abs_level = abs(prev_level);
565                          abs_level = abs_level < 64 ? abs_level : 0;                          abs_level = abs_level < 64 ? abs_level : 0;
566                          len               = coeff_VLC[1][0][abs_level][prev_run].len;                          len               = coeff_VLC[1][0][abs_level][prev_run].len;
567                          bits      += len!=128 ? len : 30;                          bits      += len!=128 ? len : 30;
# Line 572  Line 574 
574                          run++;                          run++;
575          }          }
576    
577          abs_level = ABS(prev_level);          abs_level = abs(prev_level);
578          abs_level = abs_level < 64 ? abs_level : 0;          abs_level = abs_level < 64 ? abs_level : 0;
579          len               = coeff_VLC[1][1][abs_level][prev_run].len;          len               = coeff_VLC[1][1][abs_level][prev_run].len;
580          bits      += len!=128 ? len : 30;          bits      += len!=128 ? len : 30;
# Line 627  Line 629 
629    
630  #endif  #endif
631    
632    
633    static int iDQtab[5] = {
634            1, 0, -1 /* no change */, 2, 3
635    };
636    #define DQ_VALUE2INDEX(value)  iDQtab[(value)+2]
637    
638    
639  static __inline void  static __inline void
640  CodeBlockIntra(const FRAMEINFO * const frame,  CodeBlockIntra(const FRAMEINFO * const frame,
641                             const MACROBLOCK * pMB,                             const MACROBLOCK * pMB,
# Line 657  Line 666 
666                  BitstreamPutBits(bs, 0, 1);                  BitstreamPutBits(bs, 0, 1);
667    
668          // write cbpy          // write cbpy
669          BitstreamPutBits(bs, cbpy_tab[cbpy].code, cbpy_tab[cbpy].len);          BitstreamPutBits(bs, xvid_cbpy_tab[cbpy].code, xvid_cbpy_tab[cbpy].len);
670    
671          // write dquant          // write dquant
672          if (pMB->mode == MODE_INTRA_Q)          if (pMB->mode == MODE_INTRA_Q)
673                  BitstreamPutBits(bs, pMB->dquant, 2);                  BitstreamPutBits(bs, DQ_VALUE2INDEX(pMB->dquant), 2);
674    
675          // write interlacing          // write interlacing
676          if (frame->global_flags & XVID_INTERLACING) {          if (frame->vol_flags & XVID_VOL_INTERLACING) {
677                  BitstreamPutBit(bs, pMB->field_dct);                  BitstreamPutBit(bs, pMB->field_dct);
678          }          }
679          // code block coeffs          // code block coeffs
# Line 678  Line 687 
687    
688                  if (pMB->cbp & (1 << (5 - i))) {                  if (pMB->cbp & (1 << (5 - i))) {
689                          const uint16_t *scan_table =                          const uint16_t *scan_table =
690                                  frame->global_flags & XVID_ALTERNATESCAN ?                                  frame->vop_flags & XVID_VOP_ALTERNATESCAN ?
691                                  scan_tables[2] : scan_tables[pMB->acpred_directions[i]];                                  scan_tables[2] : scan_tables[pMB->acpred_directions[i]];
692    
693                          bits = BitstreamPos(bs);                          bits = BitstreamPos(bs);
# Line 719  Line 728 
728                  BitstreamPutBit(bs, pMB->mcsel);                // mcsel: '0'=local motion, '1'=GMC                  BitstreamPutBit(bs, pMB->mcsel);                // mcsel: '0'=local motion, '1'=GMC
729    
730          // write cbpy          // write cbpy
731          BitstreamPutBits(bs, cbpy_tab[cbpy].code, cbpy_tab[cbpy].len);          BitstreamPutBits(bs, xvid_cbpy_tab[cbpy].code, xvid_cbpy_tab[cbpy].len);
732    
733          // write dquant          // write dquant
734          if (pMB->mode == MODE_INTER_Q)          if (pMB->mode == MODE_INTER_Q)
735                  BitstreamPutBits(bs, pMB->dquant, 2);                  BitstreamPutBits(bs, DQ_VALUE2INDEX(pMB->dquant), 2);
736    
737          // interlacing          // interlacing
738          if (frame->global_flags & XVID_INTERLACING) {          if (frame->vol_flags & XVID_VOL_INTERLACING) {
739                  if (pMB->cbp) {                  if (pMB->cbp) {
740                          BitstreamPutBit(bs, pMB->field_dct);                          BitstreamPutBit(bs, pMB->field_dct);
741                          DPRINTF(DPRINTF_MB,"codep: field_dct: %i", pMB->field_dct);                          DPRINTF(XVID_DEBUG_MB,"codep: field_dct: %i", pMB->field_dct);
742                  }                  }
743    
744                  // if inter block, write field ME flag                  // if inter block, write field ME flag
745                  if (pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q) {                  if (pMB->mode == MODE_INTER || pMB->mode == MODE_INTER_Q) {
746                          BitstreamPutBit(bs, pMB->field_pred);                          BitstreamPutBit(bs, pMB->field_pred);
747                          DPRINTF(DPRINTF_MB,"codep: field_pred: %i", pMB->field_pred);                          DPRINTF(XVID_DEBUG_MB,"codep: field_pred: %i", pMB->field_pred);
748    
749                          // write field prediction references                          // write field prediction references
750                          if (pMB->field_pred) {                          if (pMB->field_pred) {
# Line 758  Line 767 
767                  if (pMB->cbp & (1 << (5 - i)))                  if (pMB->cbp & (1 << (5 - i)))
768                  {                  {
769                          const uint16_t *scan_table =                          const uint16_t *scan_table =
770                                  frame->global_flags & XVID_ALTERNATESCAN ?                                  frame->vop_flags & XVID_VOP_ALTERNATESCAN ?
771                                  scan_tables[2] : scan_tables[0];                                  scan_tables[2] : scan_tables[0];
772    
773  #ifdef BIGLUT  #ifdef BIGLUT
# Line 1052  Line 1061 
1061                  return data;                  return data;
1062    
1063          res = BitstreamGetBits(bs, fcode - 1);          res = BitstreamGetBits(bs, fcode - 1);
1064          mv = ((ABS(data) - 1) * scale_fac) + res + 1;          mv = ((abs(data) - 1) * scale_fac) + res + 1;
1065    
1066          return data < 0 ? -mv : mv;          return data < 0 ? -mv : mv;
1067    
# Line 1153  Line 1162 
1162                  level = BitstreamGetBits(bs, 8);                  level = BitstreamGetBits(bs, 8);
1163    
1164                  if (level == 0 || level == 128)                  if (level == 0 || level == 128)
1165                          DPRINTF(DPRINTF_ERROR, "Illegal LEVEL for ESCAPE mode 4: %d", level);                          DPRINTF(XVID_DEBUG_ERROR, "Illegal LEVEL for ESCAPE mode 4: %d", level);
1166    
1167                  return (level << 24) >> 24;                  return (level << 24) >> 24;
1168          }          }
# Line 1209  Line 1218 
1218          do {          do {
1219                  level = get_coeff(bs, &run, &last, 1, 0);                  level = get_coeff(bs, &run, &last, 1, 0);
1220                  if (run == -1) {                  if (run == -1) {
1221                          DPRINTF(DPRINTF_ERROR,"fatal: invalid run");                          DPRINTF(XVID_DEBUG_ERROR,"fatal: invalid run");
1222                          break;                          break;
1223                  }                  }
1224                  coeff += run;                  coeff += run;
1225                  block[scan[coeff]] = level;                  block[scan[coeff]] = level;
1226    
1227                  DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[coeff], level);                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i", scan[coeff], level);
1228                  //DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[coeff], level, BitstreamShowBits(bs, 32));                  //DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i %08x", scan[coeff], level, BitstreamShowBits(bs, 32));
1229    
1230                  if (level < -2047 || level > 2047) {                  if (level < -2047 || level > 2047) {
1231                          DPRINTF(DPRINTF_ERROR,"warning: intra_overflow %i", level);                          DPRINTF(XVID_DEBUG_ERROR,"warning: intra_overflow %i", level);
1232                  }                  }
1233                  coeff++;                  coeff++;
1234          } while (!last);          } while (!last);
# Line 1242  Line 1251 
1251          do {          do {
1252                  level = get_coeff(bs, &run, &last, 0, 0);                  level = get_coeff(bs, &run, &last, 0, 0);
1253                  if (run == -1) {                  if (run == -1) {
1254                          DPRINTF(DPRINTF_ERROR,"fatal: invalid run");                          DPRINTF(XVID_DEBUG_ERROR,"fatal: invalid run");
1255                          break;                          break;
1256                  }                  }
1257                  p += run;                  p += run;
1258    
1259                  block[scan[p]] = level;                  block[scan[p]] = level;
1260    
1261                  DPRINTF(DPRINTF_COEFF,"block[%i] %i", scan[p], level);                  DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i", scan[p], level);
1262                  // DPRINTF(DPRINTF_COEFF,"block[%i] %i %08x", scan[p], level, BitstreamShowBits(bs, 32));                  // DPRINTF(XVID_DEBUG_COEFF,"block[%i] %i %08x", scan[p], level, BitstreamShowBits(bs, 32));
1263    
1264                  if (level < -2047 || level > 2047) {                  if (level < -2047 || level > 2047) {
1265                          DPRINTF(DPRINTF_ERROR,"warning: inter overflow %i", level);                          DPRINTF(XVID_DEBUG_ERROR,"warning: inter overflow %i", level);
1266                  }                  }
1267                  p++;                  p++;
1268          } while (!last);          } while (!last);
1269    
1270  }  }
1271    
1272    
1273    /*****************************************************************************
1274     * VLC tables and other constant arrays
1275     ****************************************************************************/
1276    
1277    VLC_TABLE const coeff_tab[2][102] =
1278    {
1279            /* intra = 0 */
1280            {
1281                    {{ 2,  2}, {0, 0, 1}},
1282                    {{15,  4}, {0, 0, 2}},
1283                    {{21,  6}, {0, 0, 3}},
1284                    {{23,  7}, {0, 0, 4}},
1285                    {{31,  8}, {0, 0, 5}},
1286                    {{37,  9}, {0, 0, 6}},
1287                    {{36,  9}, {0, 0, 7}},
1288                    {{33, 10}, {0, 0, 8}},
1289                    {{32, 10}, {0, 0, 9}},
1290                    {{ 7, 11}, {0, 0, 10}},
1291                    {{ 6, 11}, {0, 0, 11}},
1292                    {{32, 11}, {0, 0, 12}},
1293                    {{ 6,  3}, {0, 1, 1}},
1294                    {{20,  6}, {0, 1, 2}},
1295                    {{30,  8}, {0, 1, 3}},
1296                    {{15, 10}, {0, 1, 4}},
1297                    {{33, 11}, {0, 1, 5}},
1298                    {{80, 12}, {0, 1, 6}},
1299                    {{14,  4}, {0, 2, 1}},
1300                    {{29,  8}, {0, 2, 2}},
1301                    {{14, 10}, {0, 2, 3}},
1302                    {{81, 12}, {0, 2, 4}},
1303                    {{13,  5}, {0, 3, 1}},
1304                    {{35,  9}, {0, 3, 2}},
1305                    {{13, 10}, {0, 3, 3}},
1306                    {{12,  5}, {0, 4, 1}},
1307                    {{34,  9}, {0, 4, 2}},
1308                    {{82, 12}, {0, 4, 3}},
1309                    {{11,  5}, {0, 5, 1}},
1310                    {{12, 10}, {0, 5, 2}},
1311                    {{83, 12}, {0, 5, 3}},
1312                    {{19,  6}, {0, 6, 1}},
1313                    {{11, 10}, {0, 6, 2}},
1314                    {{84, 12}, {0, 6, 3}},
1315                    {{18,  6}, {0, 7, 1}},
1316                    {{10, 10}, {0, 7, 2}},
1317                    {{17,  6}, {0, 8, 1}},
1318                    {{ 9, 10}, {0, 8, 2}},
1319                    {{16,  6}, {0, 9, 1}},
1320                    {{ 8, 10}, {0, 9, 2}},
1321                    {{22,  7}, {0, 10, 1}},
1322                    {{85, 12}, {0, 10, 2}},
1323                    {{21,  7}, {0, 11, 1}},
1324                    {{20,  7}, {0, 12, 1}},
1325                    {{28,  8}, {0, 13, 1}},
1326                    {{27,  8}, {0, 14, 1}},
1327                    {{33,  9}, {0, 15, 1}},
1328                    {{32,  9}, {0, 16, 1}},
1329                    {{31,  9}, {0, 17, 1}},
1330                    {{30,  9}, {0, 18, 1}},
1331                    {{29,  9}, {0, 19, 1}},
1332                    {{28,  9}, {0, 20, 1}},
1333                    {{27,  9}, {0, 21, 1}},
1334                    {{26,  9}, {0, 22, 1}},
1335                    {{34, 11}, {0, 23, 1}},
1336                    {{35, 11}, {0, 24, 1}},
1337                    {{86, 12}, {0, 25, 1}},
1338                    {{87, 12}, {0, 26, 1}},
1339                    {{ 7,  4}, {1, 0, 1}},
1340                    {{25,  9}, {1, 0, 2}},
1341                    {{ 5, 11}, {1, 0, 3}},
1342                    {{15,  6}, {1, 1, 1}},
1343                    {{ 4, 11}, {1, 1, 2}},
1344                    {{14,  6}, {1, 2, 1}},
1345                    {{13,  6}, {1, 3, 1}},
1346                    {{12,  6}, {1, 4, 1}},
1347                    {{19,  7}, {1, 5, 1}},
1348                    {{18,  7}, {1, 6, 1}},
1349                    {{17,  7}, {1, 7, 1}},
1350                    {{16,  7}, {1, 8, 1}},
1351                    {{26,  8}, {1, 9, 1}},
1352                    {{25,  8}, {1, 10, 1}},
1353                    {{24,  8}, {1, 11, 1}},
1354                    {{23,  8}, {1, 12, 1}},
1355                    {{22,  8}, {1, 13, 1}},
1356                    {{21,  8}, {1, 14, 1}},
1357                    {{20,  8}, {1, 15, 1}},
1358                    {{19,  8}, {1, 16, 1}},
1359                    {{24,  9}, {1, 17, 1}},
1360                    {{23,  9}, {1, 18, 1}},
1361                    {{22,  9}, {1, 19, 1}},
1362                    {{21,  9}, {1, 20, 1}},
1363                    {{20,  9}, {1, 21, 1}},
1364                    {{19,  9}, {1, 22, 1}},
1365                    {{18,  9}, {1, 23, 1}},
1366                    {{17,  9}, {1, 24, 1}},
1367                    {{ 7, 10}, {1, 25, 1}},
1368                    {{ 6, 10}, {1, 26, 1}},
1369                    {{ 5, 10}, {1, 27, 1}},
1370                    {{ 4, 10}, {1, 28, 1}},
1371                    {{36, 11}, {1, 29, 1}},
1372                    {{37, 11}, {1, 30, 1}},
1373                    {{38, 11}, {1, 31, 1}},
1374                    {{39, 11}, {1, 32, 1}},
1375                    {{88, 12}, {1, 33, 1}},
1376                    {{89, 12}, {1, 34, 1}},
1377                    {{90, 12}, {1, 35, 1}},
1378                    {{91, 12}, {1, 36, 1}},
1379                    {{92, 12}, {1, 37, 1}},
1380                    {{93, 12}, {1, 38, 1}},
1381                    {{94, 12}, {1, 39, 1}},
1382                    {{95, 12}, {1, 40, 1}}
1383            },
1384            /* intra = 1 */
1385            {
1386                    {{ 2,  2}, {0, 0, 1}},
1387                    {{15,  4}, {0, 0, 3}},
1388                    {{21,  6}, {0, 0, 6}},
1389                    {{23,  7}, {0, 0, 9}},
1390                    {{31,  8}, {0, 0, 10}},
1391                    {{37,  9}, {0, 0, 13}},
1392                    {{36,  9}, {0, 0, 14}},
1393                    {{33, 10}, {0, 0, 17}},
1394                    {{32, 10}, {0, 0, 18}},
1395                    {{ 7, 11}, {0, 0, 21}},
1396                    {{ 6, 11}, {0, 0, 22}},
1397                    {{32, 11}, {0, 0, 23}},
1398                    {{ 6,  3}, {0, 0, 2}},
1399                    {{20,  6}, {0, 1, 2}},
1400                    {{30,  8}, {0, 0, 11}},
1401                    {{15, 10}, {0, 0, 19}},
1402                    {{33, 11}, {0, 0, 24}},
1403                    {{80, 12}, {0, 0, 25}},
1404                    {{14,  4}, {0, 1, 1}},
1405                    {{29,  8}, {0, 0, 12}},
1406                    {{14, 10}, {0, 0, 20}},
1407                    {{81, 12}, {0, 0, 26}},
1408                    {{13,  5}, {0, 0, 4}},
1409                    {{35,  9}, {0, 0, 15}},
1410                    {{13, 10}, {0, 1, 7}},
1411                    {{12,  5}, {0, 0, 5}},
1412                    {{34,  9}, {0, 4, 2}},
1413                    {{82, 12}, {0, 0, 27}},
1414                    {{11,  5}, {0, 2, 1}},
1415                    {{12, 10}, {0, 2, 4}},
1416                    {{83, 12}, {0, 1, 9}},
1417                    {{19,  6}, {0, 0, 7}},
1418                    {{11, 10}, {0, 3, 4}},
1419                    {{84, 12}, {0, 6, 3}},
1420                    {{18,  6}, {0, 0, 8}},
1421                    {{10, 10}, {0, 4, 3}},
1422                    {{17,  6}, {0, 3, 1}},
1423                    {{ 9, 10}, {0, 8, 2}},
1424                    {{16,  6}, {0, 4, 1}},
1425                    {{ 8, 10}, {0, 5, 3}},
1426                    {{22,  7}, {0, 1, 3}},
1427                    {{85, 12}, {0, 1, 10}},
1428                    {{21,  7}, {0, 2, 2}},
1429                    {{20,  7}, {0, 7, 1}},
1430                    {{28,  8}, {0, 1, 4}},
1431                    {{27,  8}, {0, 3, 2}},
1432                    {{33,  9}, {0, 0, 16}},
1433                    {{32,  9}, {0, 1, 5}},
1434                    {{31,  9}, {0, 1, 6}},
1435                    {{30,  9}, {0, 2, 3}},
1436                    {{29,  9}, {0, 3, 3}},
1437                    {{28,  9}, {0, 5, 2}},
1438                    {{27,  9}, {0, 6, 2}},
1439                    {{26,  9}, {0, 7, 2}},
1440                    {{34, 11}, {0, 1, 8}},
1441                    {{35, 11}, {0, 9, 2}},
1442                    {{86, 12}, {0, 2, 5}},
1443                    {{87, 12}, {0, 7, 3}},
1444                    {{ 7,  4}, {1, 0, 1}},
1445                    {{25,  9}, {0, 11, 1}},
1446                    {{ 5, 11}, {1, 0, 6}},
1447                    {{15,  6}, {1, 1, 1}},
1448                    {{ 4, 11}, {1, 0, 7}},
1449                    {{14,  6}, {1, 2, 1}},
1450                    {{13,  6}, {0, 5, 1}},
1451                    {{12,  6}, {1, 0, 2}},
1452                    {{19,  7}, {1, 5, 1}},
1453                    {{18,  7}, {0, 6, 1}},
1454                    {{17,  7}, {1, 3, 1}},
1455                    {{16,  7}, {1, 4, 1}},
1456                    {{26,  8}, {1, 9, 1}},
1457                    {{25,  8}, {0, 8, 1}},
1458                    {{24,  8}, {0, 9, 1}},
1459                    {{23,  8}, {0, 10, 1}},
1460                    {{22,  8}, {1, 0, 3}},
1461                    {{21,  8}, {1, 6, 1}},
1462                    {{20,  8}, {1, 7, 1}},
1463                    {{19,  8}, {1, 8, 1}},
1464                    {{24,  9}, {0, 12, 1}},
1465                    {{23,  9}, {1, 0, 4}},
1466                    {{22,  9}, {1, 1, 2}},
1467                    {{21,  9}, {1, 10, 1}},
1468                    {{20,  9}, {1, 11, 1}},
1469                    {{19,  9}, {1, 12, 1}},
1470                    {{18,  9}, {1, 13, 1}},
1471                    {{17,  9}, {1, 14, 1}},
1472                    {{ 7, 10}, {0, 13, 1}},
1473                    {{ 6, 10}, {1, 0, 5}},
1474                    {{ 5, 10}, {1, 1, 3}},
1475                    {{ 4, 10}, {1, 2, 2}},
1476                    {{36, 11}, {1, 3, 2}},
1477                    {{37, 11}, {1, 4, 2}},
1478                    {{38, 11}, {1, 15, 1}},
1479                    {{39, 11}, {1, 16, 1}},
1480                    {{88, 12}, {0, 14, 1}},
1481                    {{89, 12}, {1, 0, 8}},
1482                    {{90, 12}, {1, 5, 2}},
1483                    {{91, 12}, {1, 6, 2}},
1484                    {{92, 12}, {1, 17, 1}},
1485                    {{93, 12}, {1, 18, 1}},
1486                    {{94, 12}, {1, 19, 1}},
1487                    {{95, 12}, {1, 20, 1}}
1488            }
1489    };
1490    
1491    /* constants taken from momusys/vm_common/inlcude/max_level.h */
1492    uint8_t const max_level[2][2][64] = {
1493            {
1494                    /* intra = 0, last = 0 */
1495                    {
1496                            12, 6, 4, 3, 3, 3, 3, 2,
1497                            2, 2, 2, 1, 1, 1, 1, 1,
1498                            1, 1, 1, 1, 1, 1, 1, 1,
1499                            1, 1, 1, 0, 0, 0, 0, 0,
1500                            0, 0, 0, 0, 0, 0, 0, 0,
1501                            0, 0, 0, 0, 0, 0, 0, 0,
1502                            0, 0, 0, 0, 0, 0, 0, 0,
1503                            0, 0, 0, 0, 0, 0, 0, 0
1504                    },
1505                    /* intra = 0, last = 1 */
1506                    {
1507                            3, 2, 1, 1, 1, 1, 1, 1,
1508                            1, 1, 1, 1, 1, 1, 1, 1,
1509                            1, 1, 1, 1, 1, 1, 1, 1,
1510                            1, 1, 1, 1, 1, 1, 1, 1,
1511                            1, 1, 1, 1, 1, 1, 1, 1,
1512                            1, 0, 0, 0, 0, 0, 0, 0,
1513                            0, 0, 0, 0, 0, 0, 0, 0,
1514                            0, 0, 0, 0, 0, 0, 0, 0
1515                    }
1516            },
1517            {
1518                    /* intra = 1, last = 0 */
1519                    {
1520                            27, 10, 5, 4, 3, 3, 3, 3,
1521                            2, 2, 1, 1, 1, 1, 1, 0,
1522                            0, 0, 0, 0, 0, 0, 0, 0,
1523                            0, 0, 0, 0, 0, 0, 0, 0,
1524                            0, 0, 0, 0, 0, 0, 0, 0,
1525                            0, 0, 0, 0, 0, 0, 0, 0,
1526                            0, 0, 0, 0, 0, 0, 0, 0,
1527                            0, 0, 0, 0, 0, 0, 0, 0
1528                    },
1529                    /* intra = 1, last = 1 */
1530                    {
1531                            8, 3, 2, 2, 2, 2, 2, 1,
1532                            1, 1, 1, 1, 1, 1, 1, 1,
1533                            1, 1, 1, 1, 1, 0, 0, 0,
1534                            0, 0, 0, 0, 0, 0, 0, 0,
1535                            0, 0, 0, 0, 0, 0, 0, 0,
1536                            0, 0, 0, 0, 0, 0, 0, 0,
1537                            0, 0, 0, 0, 0, 0, 0, 0,
1538                            0, 0, 0, 0, 0, 0, 0, 0
1539                    }
1540            }
1541    };
1542    
1543    uint8_t const max_run[2][2][64] = {
1544            {
1545                    /* intra = 0, last = 0 */
1546                    {
1547                            0, 26, 10, 6, 2, 1, 1, 0,
1548                            0, 0, 0, 0, 0, 0, 0, 0,
1549                            0, 0, 0, 0, 0, 0, 0, 0,
1550                            0, 0, 0, 0, 0, 0, 0, 0,
1551                            0, 0, 0, 0, 0, 0, 0, 0,
1552                            0, 0, 0, 0, 0, 0, 0, 0,
1553                            0, 0, 0, 0, 0, 0, 0, 0,
1554                            0, 0, 0, 0, 0, 0, 0, 0,
1555                    },
1556                    /* intra = 0, last = 1 */
1557                    {
1558                            0, 40, 1, 0, 0, 0, 0, 0,
1559                            0, 0, 0, 0, 0, 0, 0, 0,
1560                            0, 0, 0, 0, 0, 0, 0, 0,
1561                            0, 0, 0, 0, 0, 0, 0, 0,
1562                            0, 0, 0, 0, 0, 0, 0, 0,
1563                            0, 0, 0, 0, 0, 0, 0, 0,
1564                            0, 0, 0, 0, 0, 0, 0, 0,
1565                            0, 0, 0, 0, 0, 0, 0, 0,
1566                    }
1567            },
1568            {
1569                    /* intra = 1, last = 0 */
1570                    {
1571                            0, 14, 9, 7, 3, 2, 1, 1,
1572                            1, 1, 1, 0, 0, 0, 0, 0,
1573                            0, 0, 0, 0, 0, 0, 0, 0,
1574                            0, 0, 0, 0, 0, 0, 0, 0,
1575                            0, 0, 0, 0, 0, 0, 0, 0,
1576                            0, 0, 0, 0, 0, 0, 0, 0,
1577                            0, 0, 0, 0, 0, 0, 0, 0,
1578                            0, 0, 0, 0, 0, 0, 0, 0,
1579                    },
1580                    /* intra = 1, last = 1 */
1581                    {
1582                            0, 20, 6, 1, 0, 0, 0, 0,
1583                            0, 0, 0, 0, 0, 0, 0, 0,
1584                            0, 0, 0, 0, 0, 0, 0, 0,
1585                            0, 0, 0, 0, 0, 0, 0, 0,
1586                            0, 0, 0, 0, 0, 0, 0, 0,
1587                            0, 0, 0, 0, 0, 0, 0, 0,
1588                            0, 0, 0, 0, 0, 0, 0, 0,
1589                            0, 0, 0, 0, 0, 0, 0, 0,
1590                    }
1591            }
1592    };
1593    
1594    /******************************************************************
1595     * encoder tables                                                 *
1596     ******************************************************************/
1597    
1598    VLC sprite_trajectory_code[32768];
1599    
1600    VLC sprite_trajectory_len[15] = {
1601            { 0x00 , 2},
1602            { 0x02 , 3}, { 0x03, 3}, { 0x04, 3}, { 0x05, 3}, { 0x06, 3},
1603            { 0x0E , 4}, { 0x1E, 5}, { 0x3E, 6}, { 0x7F, 7}, { 0xFE, 8},
1604            { 0x1FE, 9}, {0x3FE,10}, {0x7FE,11}, {0xFFE,12} };
1605    
1606    
1607    /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
1608       the sign bit must be added afterwards. */
1609    
1610    /* MCBPC Indexing by cbpc in first two bits, mode in last two.
1611     CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10.
1612     Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */
1613    
1614    VLC mcbpc_intra_tab[15] = {
1615            {0x01, 9}, {0x01, 1}, {0x01, 4}, {0x00, 0},
1616            {0x00, 0}, {0x01, 3}, {0x01, 6}, {0x00, 0},
1617            {0x00, 0}, {0x02, 3}, {0x02, 6}, {0x00, 0},
1618            {0x00, 0}, {0x03, 3}, {0x03, 6}
1619    };
1620    
1621    /* MCBPC inter.
1622       Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */
1623    
1624    VLC mcbpc_inter_tab[29] = {
1625            {1, 1}, {3, 3}, {2, 3}, {3, 5}, {4, 6}, {1, 9}, {0, 0}, {0, 0},
1626            {3, 4}, {7, 7}, {5, 7}, {4, 8}, {4, 9}, {0, 0}, {0, 0}, {0, 0},
1627            {2, 4}, {6, 7}, {4, 7}, {3, 8}, {3, 9}, {0, 0}, {0, 0}, {0, 0},
1628            {5, 6}, {5, 9}, {5, 8}, {3, 7}, {2, 9}
1629    };
1630    
1631    const VLC xvid_cbpy_tab[16] = {
1632            {3, 4}, {5, 5}, {4, 5}, {9, 4}, {3, 5}, {7, 4}, {2, 6}, {11, 4},
1633            {2, 5}, {3, 6}, {5, 4}, {10, 4}, {4, 4}, {8, 4}, {6, 4}, {3, 2}
1634    };
1635    
1636    const VLC dcy_tab[511] = {
1637            {0x100, 15}, {0x101, 15}, {0x102, 15}, {0x103, 15},
1638            {0x104, 15}, {0x105, 15}, {0x106, 15}, {0x107, 15},
1639            {0x108, 15}, {0x109, 15}, {0x10a, 15}, {0x10b, 15},
1640            {0x10c, 15}, {0x10d, 15}, {0x10e, 15}, {0x10f, 15},
1641            {0x110, 15}, {0x111, 15}, {0x112, 15}, {0x113, 15},
1642            {0x114, 15}, {0x115, 15}, {0x116, 15}, {0x117, 15},
1643            {0x118, 15}, {0x119, 15}, {0x11a, 15}, {0x11b, 15},
1644            {0x11c, 15}, {0x11d, 15}, {0x11e, 15}, {0x11f, 15},
1645            {0x120, 15}, {0x121, 15}, {0x122, 15}, {0x123, 15},
1646            {0x124, 15}, {0x125, 15}, {0x126, 15}, {0x127, 15},
1647            {0x128, 15}, {0x129, 15}, {0x12a, 15}, {0x12b, 15},
1648            {0x12c, 15}, {0x12d, 15}, {0x12e, 15}, {0x12f, 15},
1649            {0x130, 15}, {0x131, 15}, {0x132, 15}, {0x133, 15},
1650            {0x134, 15}, {0x135, 15}, {0x136, 15}, {0x137, 15},
1651            {0x138, 15}, {0x139, 15}, {0x13a, 15}, {0x13b, 15},
1652            {0x13c, 15}, {0x13d, 15}, {0x13e, 15}, {0x13f, 15},
1653            {0x140, 15}, {0x141, 15}, {0x142, 15}, {0x143, 15},
1654            {0x144, 15}, {0x145, 15}, {0x146, 15}, {0x147, 15},
1655            {0x148, 15}, {0x149, 15}, {0x14a, 15}, {0x14b, 15},
1656            {0x14c, 15}, {0x14d, 15}, {0x14e, 15}, {0x14f, 15},
1657            {0x150, 15}, {0x151, 15}, {0x152, 15}, {0x153, 15},
1658            {0x154, 15}, {0x155, 15}, {0x156, 15}, {0x157, 15},
1659            {0x158, 15}, {0x159, 15}, {0x15a, 15}, {0x15b, 15},
1660            {0x15c, 15}, {0x15d, 15}, {0x15e, 15}, {0x15f, 15},
1661            {0x160, 15}, {0x161, 15}, {0x162, 15}, {0x163, 15},
1662            {0x164, 15}, {0x165, 15}, {0x166, 15}, {0x167, 15},
1663            {0x168, 15}, {0x169, 15}, {0x16a, 15}, {0x16b, 15},
1664            {0x16c, 15}, {0x16d, 15}, {0x16e, 15}, {0x16f, 15},
1665            {0x170, 15}, {0x171, 15}, {0x172, 15}, {0x173, 15},
1666            {0x174, 15}, {0x175, 15}, {0x176, 15}, {0x177, 15},
1667            {0x178, 15}, {0x179, 15}, {0x17a, 15}, {0x17b, 15},
1668            {0x17c, 15}, {0x17d, 15}, {0x17e, 15}, {0x17f, 15},
1669            {0x80, 13}, {0x81, 13}, {0x82, 13}, {0x83, 13},
1670            {0x84, 13}, {0x85, 13}, {0x86, 13}, {0x87, 13},
1671            {0x88, 13}, {0x89, 13}, {0x8a, 13}, {0x8b, 13},
1672            {0x8c, 13}, {0x8d, 13}, {0x8e, 13}, {0x8f, 13},
1673            {0x90, 13}, {0x91, 13}, {0x92, 13}, {0x93, 13},
1674            {0x94, 13}, {0x95, 13}, {0x96, 13}, {0x97, 13},
1675            {0x98, 13}, {0x99, 13}, {0x9a, 13}, {0x9b, 13},
1676            {0x9c, 13}, {0x9d, 13}, {0x9e, 13}, {0x9f, 13},
1677            {0xa0, 13}, {0xa1, 13}, {0xa2, 13}, {0xa3, 13},
1678            {0xa4, 13}, {0xa5, 13}, {0xa6, 13}, {0xa7, 13},
1679            {0xa8, 13}, {0xa9, 13}, {0xaa, 13}, {0xab, 13},
1680            {0xac, 13}, {0xad, 13}, {0xae, 13}, {0xaf, 13},
1681            {0xb0, 13}, {0xb1, 13}, {0xb2, 13}, {0xb3, 13},
1682            {0xb4, 13}, {0xb5, 13}, {0xb6, 13}, {0xb7, 13},
1683            {0xb8, 13}, {0xb9, 13}, {0xba, 13}, {0xbb, 13},
1684            {0xbc, 13}, {0xbd, 13}, {0xbe, 13}, {0xbf, 13},
1685            {0x40, 11}, {0x41, 11}, {0x42, 11}, {0x43, 11},
1686            {0x44, 11}, {0x45, 11}, {0x46, 11}, {0x47, 11},
1687            {0x48, 11}, {0x49, 11}, {0x4a, 11}, {0x4b, 11},
1688            {0x4c, 11}, {0x4d, 11}, {0x4e, 11}, {0x4f, 11},
1689            {0x50, 11}, {0x51, 11}, {0x52, 11}, {0x53, 11},
1690            {0x54, 11}, {0x55, 11}, {0x56, 11}, {0x57, 11},
1691            {0x58, 11}, {0x59, 11}, {0x5a, 11}, {0x5b, 11},
1692            {0x5c, 11}, {0x5d, 11}, {0x5e, 11}, {0x5f, 11},
1693            {0x20, 9}, {0x21, 9}, {0x22, 9}, {0x23, 9},
1694            {0x24, 9}, {0x25, 9}, {0x26, 9}, {0x27, 9},
1695            {0x28, 9}, {0x29, 9}, {0x2a, 9}, {0x2b, 9},
1696            {0x2c, 9}, {0x2d, 9}, {0x2e, 9}, {0x2f, 9},
1697            {0x10, 7}, {0x11, 7}, {0x12, 7}, {0x13, 7},
1698            {0x14, 7}, {0x15, 7}, {0x16, 7}, {0x17, 7},
1699            {0x10, 6}, {0x11, 6}, {0x12, 6}, {0x13, 6},
1700            {0x08, 4}, {0x09, 4}, {0x06, 3}, {0x03, 3},
1701            {0x07, 3}, {0x0a, 4}, {0x0b, 4}, {0x14, 6},
1702            {0x15, 6}, {0x16, 6}, {0x17, 6}, {0x18, 7},
1703            {0x19, 7}, {0x1a, 7}, {0x1b, 7}, {0x1c, 7},
1704            {0x1d, 7}, {0x1e, 7}, {0x1f, 7}, {0x30, 9},
1705            {0x31, 9}, {0x32, 9}, {0x33, 9}, {0x34, 9},
1706            {0x35, 9}, {0x36, 9}, {0x37, 9}, {0x38, 9},
1707            {0x39, 9}, {0x3a, 9}, {0x3b, 9}, {0x3c, 9},
1708            {0x3d, 9}, {0x3e, 9}, {0x3f, 9}, {0x60, 11},
1709            {0x61, 11}, {0x62, 11}, {0x63, 11}, {0x64, 11},
1710            {0x65, 11}, {0x66, 11}, {0x67, 11}, {0x68, 11},
1711            {0x69, 11}, {0x6a, 11}, {0x6b, 11}, {0x6c, 11},
1712            {0x6d, 11}, {0x6e, 11}, {0x6f, 11}, {0x70, 11},
1713            {0x71, 11}, {0x72, 11}, {0x73, 11}, {0x74, 11},
1714            {0x75, 11}, {0x76, 11}, {0x77, 11}, {0x78, 11},
1715            {0x79, 11}, {0x7a, 11}, {0x7b, 11}, {0x7c, 11},
1716            {0x7d, 11}, {0x7e, 11}, {0x7f, 11}, {0xc0, 13},
1717            {0xc1, 13}, {0xc2, 13}, {0xc3, 13}, {0xc4, 13},
1718            {0xc5, 13}, {0xc6, 13}, {0xc7, 13}, {0xc8, 13},
1719            {0xc9, 13}, {0xca, 13}, {0xcb, 13}, {0xcc, 13},
1720            {0xcd, 13}, {0xce, 13}, {0xcf, 13}, {0xd0, 13},
1721            {0xd1, 13}, {0xd2, 13}, {0xd3, 13}, {0xd4, 13},
1722            {0xd5, 13}, {0xd6, 13}, {0xd7, 13}, {0xd8, 13},
1723            {0xd9, 13}, {0xda, 13}, {0xdb, 13}, {0xdc, 13},
1724            {0xdd, 13}, {0xde, 13}, {0xdf, 13}, {0xe0, 13},
1725            {0xe1, 13}, {0xe2, 13}, {0xe3, 13}, {0xe4, 13},
1726            {0xe5, 13}, {0xe6, 13}, {0xe7, 13}, {0xe8, 13},
1727            {0xe9, 13}, {0xea, 13}, {0xeb, 13}, {0xec, 13},
1728            {0xed, 13}, {0xee, 13}, {0xef, 13}, {0xf0, 13},
1729            {0xf1, 13}, {0xf2, 13}, {0xf3, 13}, {0xf4, 13},
1730            {0xf5, 13}, {0xf6, 13}, {0xf7, 13}, {0xf8, 13},
1731            {0xf9, 13}, {0xfa, 13}, {0xfb, 13}, {0xfc, 13},
1732            {0xfd, 13}, {0xfe, 13}, {0xff, 13}, {0x180, 15},
1733            {0x181, 15}, {0x182, 15}, {0x183, 15}, {0x184, 15},
1734            {0x185, 15}, {0x186, 15}, {0x187, 15}, {0x188, 15},
1735            {0x189, 15}, {0x18a, 15}, {0x18b, 15}, {0x18c, 15},
1736            {0x18d, 15}, {0x18e, 15}, {0x18f, 15}, {0x190, 15},
1737            {0x191, 15}, {0x192, 15}, {0x193, 15}, {0x194, 15},
1738            {0x195, 15}, {0x196, 15}, {0x197, 15}, {0x198, 15},
1739            {0x199, 15}, {0x19a, 15}, {0x19b, 15}, {0x19c, 15},
1740            {0x19d, 15}, {0x19e, 15}, {0x19f, 15}, {0x1a0, 15},
1741            {0x1a1, 15}, {0x1a2, 15}, {0x1a3, 15}, {0x1a4, 15},
1742            {0x1a5, 15}, {0x1a6, 15}, {0x1a7, 15}, {0x1a8, 15},
1743            {0x1a9, 15}, {0x1aa, 15}, {0x1ab, 15}, {0x1ac, 15},
1744            {0x1ad, 15}, {0x1ae, 15}, {0x1af, 15}, {0x1b0, 15},
1745            {0x1b1, 15}, {0x1b2, 15}, {0x1b3, 15}, {0x1b4, 15},
1746            {0x1b5, 15}, {0x1b6, 15}, {0x1b7, 15}, {0x1b8, 15},
1747            {0x1b9, 15}, {0x1ba, 15}, {0x1bb, 15}, {0x1bc, 15},
1748            {0x1bd, 15}, {0x1be, 15}, {0x1bf, 15}, {0x1c0, 15},
1749            {0x1c1, 15}, {0x1c2, 15}, {0x1c3, 15}, {0x1c4, 15},
1750            {0x1c5, 15}, {0x1c6, 15}, {0x1c7, 15}, {0x1c8, 15},
1751            {0x1c9, 15}, {0x1ca, 15}, {0x1cb, 15}, {0x1cc, 15},
1752            {0x1cd, 15}, {0x1ce, 15}, {0x1cf, 15}, {0x1d0, 15},
1753            {0x1d1, 15}, {0x1d2, 15}, {0x1d3, 15}, {0x1d4, 15},
1754            {0x1d5, 15}, {0x1d6, 15}, {0x1d7, 15}, {0x1d8, 15},
1755            {0x1d9, 15}, {0x1da, 15}, {0x1db, 15}, {0x1dc, 15},
1756            {0x1dd, 15}, {0x1de, 15}, {0x1df, 15}, {0x1e0, 15},
1757            {0x1e1, 15}, {0x1e2, 15}, {0x1e3, 15}, {0x1e4, 15},
1758            {0x1e5, 15}, {0x1e6, 15}, {0x1e7, 15}, {0x1e8, 15},
1759            {0x1e9, 15}, {0x1ea, 15}, {0x1eb, 15}, {0x1ec, 15},
1760            {0x1ed, 15}, {0x1ee, 15}, {0x1ef, 15}, {0x1f0, 15},
1761            {0x1f1, 15}, {0x1f2, 15}, {0x1f3, 15}, {0x1f4, 15},
1762            {0x1f5, 15}, {0x1f6, 15}, {0x1f7, 15}, {0x1f8, 15},
1763            {0x1f9, 15}, {0x1fa, 15}, {0x1fb, 15}, {0x1fc, 15},
1764            {0x1fd, 15}, {0x1fe, 15}, {0x1ff, 15},
1765    };
1766    
1767    const VLC dcc_tab[511] = {
1768            {0x100, 16}, {0x101, 16}, {0x102, 16}, {0x103, 16},
1769            {0x104, 16}, {0x105, 16}, {0x106, 16}, {0x107, 16},
1770            {0x108, 16}, {0x109, 16}, {0x10a, 16}, {0x10b, 16},
1771            {0x10c, 16}, {0x10d, 16}, {0x10e, 16}, {0x10f, 16},
1772            {0x110, 16}, {0x111, 16}, {0x112, 16}, {0x113, 16},
1773            {0x114, 16}, {0x115, 16}, {0x116, 16}, {0x117, 16},
1774            {0x118, 16}, {0x119, 16}, {0x11a, 16}, {0x11b, 16},
1775            {0x11c, 16}, {0x11d, 16}, {0x11e, 16}, {0x11f, 16},
1776            {0x120, 16}, {0x121, 16}, {0x122, 16}, {0x123, 16},
1777            {0x124, 16}, {0x125, 16}, {0x126, 16}, {0x127, 16},
1778            {0x128, 16}, {0x129, 16}, {0x12a, 16}, {0x12b, 16},
1779            {0x12c, 16}, {0x12d, 16}, {0x12e, 16}, {0x12f, 16},
1780            {0x130, 16}, {0x131, 16}, {0x132, 16}, {0x133, 16},
1781            {0x134, 16}, {0x135, 16}, {0x136, 16}, {0x137, 16},
1782            {0x138, 16}, {0x139, 16}, {0x13a, 16}, {0x13b, 16},
1783            {0x13c, 16}, {0x13d, 16}, {0x13e, 16}, {0x13f, 16},
1784            {0x140, 16}, {0x141, 16}, {0x142, 16}, {0x143, 16},
1785            {0x144, 16}, {0x145, 16}, {0x146, 16}, {0x147, 16},
1786            {0x148, 16}, {0x149, 16}, {0x14a, 16}, {0x14b, 16},
1787            {0x14c, 16}, {0x14d, 16}, {0x14e, 16}, {0x14f, 16},
1788            {0x150, 16}, {0x151, 16}, {0x152, 16}, {0x153, 16},
1789            {0x154, 16}, {0x155, 16}, {0x156, 16}, {0x157, 16},
1790            {0x158, 16}, {0x159, 16}, {0x15a, 16}, {0x15b, 16},
1791            {0x15c, 16}, {0x15d, 16}, {0x15e, 16}, {0x15f, 16},
1792            {0x160, 16}, {0x161, 16}, {0x162, 16}, {0x163, 16},
1793            {0x164, 16}, {0x165, 16}, {0x166, 16}, {0x167, 16},
1794            {0x168, 16}, {0x169, 16}, {0x16a, 16}, {0x16b, 16},
1795            {0x16c, 16}, {0x16d, 16}, {0x16e, 16}, {0x16f, 16},
1796            {0x170, 16}, {0x171, 16}, {0x172, 16}, {0x173, 16},
1797            {0x174, 16}, {0x175, 16}, {0x176, 16}, {0x177, 16},
1798            {0x178, 16}, {0x179, 16}, {0x17a, 16}, {0x17b, 16},
1799            {0x17c, 16}, {0x17d, 16}, {0x17e, 16}, {0x17f, 16},
1800            {0x80, 14}, {0x81, 14}, {0x82, 14}, {0x83, 14},
1801            {0x84, 14}, {0x85, 14}, {0x86, 14}, {0x87, 14},
1802            {0x88, 14}, {0x89, 14}, {0x8a, 14}, {0x8b, 14},
1803            {0x8c, 14}, {0x8d, 14}, {0x8e, 14}, {0x8f, 14},
1804            {0x90, 14}, {0x91, 14}, {0x92, 14}, {0x93, 14},
1805            {0x94, 14}, {0x95, 14}, {0x96, 14}, {0x97, 14},
1806            {0x98, 14}, {0x99, 14}, {0x9a, 14}, {0x9b, 14},
1807            {0x9c, 14}, {0x9d, 14}, {0x9e, 14}, {0x9f, 14},
1808            {0xa0, 14}, {0xa1, 14}, {0xa2, 14}, {0xa3, 14},
1809            {0xa4, 14}, {0xa5, 14}, {0xa6, 14}, {0xa7, 14},
1810            {0xa8, 14}, {0xa9, 14}, {0xaa, 14}, {0xab, 14},
1811            {0xac, 14}, {0xad, 14}, {0xae, 14}, {0xaf, 14},
1812            {0xb0, 14}, {0xb1, 14}, {0xb2, 14}, {0xb3, 14},
1813            {0xb4, 14}, {0xb5, 14}, {0xb6, 14}, {0xb7, 14},
1814            {0xb8, 14}, {0xb9, 14}, {0xba, 14}, {0xbb, 14},
1815            {0xbc, 14}, {0xbd, 14}, {0xbe, 14}, {0xbf, 14},
1816            {0x40, 12}, {0x41, 12}, {0x42, 12}, {0x43, 12},
1817            {0x44, 12}, {0x45, 12}, {0x46, 12}, {0x47, 12},
1818            {0x48, 12}, {0x49, 12}, {0x4a, 12}, {0x4b, 12},
1819            {0x4c, 12}, {0x4d, 12}, {0x4e, 12}, {0x4f, 12},
1820            {0x50, 12}, {0x51, 12}, {0x52, 12}, {0x53, 12},
1821            {0x54, 12}, {0x55, 12}, {0x56, 12}, {0x57, 12},
1822            {0x58, 12}, {0x59, 12}, {0x5a, 12}, {0x5b, 12},
1823            {0x5c, 12}, {0x5d, 12}, {0x5e, 12}, {0x5f, 12},
1824            {0x20, 10}, {0x21, 10}, {0x22, 10}, {0x23, 10},
1825            {0x24, 10}, {0x25, 10}, {0x26, 10}, {0x27, 10},
1826            {0x28, 10}, {0x29, 10}, {0x2a, 10}, {0x2b, 10},
1827            {0x2c, 10}, {0x2d, 10}, {0x2e, 10}, {0x2f, 10},
1828            {0x10, 8}, {0x11, 8}, {0x12, 8}, {0x13, 8},
1829            {0x14, 8}, {0x15, 8}, {0x16, 8}, {0x17, 8},
1830            {0x08, 6}, {0x09, 6}, {0x0a, 6}, {0x0b, 6},
1831            {0x04, 4}, {0x05, 4}, {0x04, 3}, {0x03, 2},
1832            {0x05, 3}, {0x06, 4}, {0x07, 4}, {0x0c, 6},
1833            {0x0d, 6}, {0x0e, 6}, {0x0f, 6}, {0x18, 8},
1834            {0x19, 8}, {0x1a, 8}, {0x1b, 8}, {0x1c, 8},
1835            {0x1d, 8}, {0x1e, 8}, {0x1f, 8}, {0x30, 10},
1836            {0x31, 10}, {0x32, 10}, {0x33, 10}, {0x34, 10},
1837            {0x35, 10}, {0x36, 10}, {0x37, 10}, {0x38, 10},
1838            {0x39, 10}, {0x3a, 10}, {0x3b, 10}, {0x3c, 10},
1839            {0x3d, 10}, {0x3e, 10}, {0x3f, 10}, {0x60, 12},
1840            {0x61, 12}, {0x62, 12}, {0x63, 12}, {0x64, 12},
1841            {0x65, 12}, {0x66, 12}, {0x67, 12}, {0x68, 12},
1842            {0x69, 12}, {0x6a, 12}, {0x6b, 12}, {0x6c, 12},
1843            {0x6d, 12}, {0x6e, 12}, {0x6f, 12}, {0x70, 12},
1844            {0x71, 12}, {0x72, 12}, {0x73, 12}, {0x74, 12},
1845            {0x75, 12}, {0x76, 12}, {0x77, 12}, {0x78, 12},
1846            {0x79, 12}, {0x7a, 12}, {0x7b, 12}, {0x7c, 12},
1847            {0x7d, 12}, {0x7e, 12}, {0x7f, 12}, {0xc0, 14},
1848            {0xc1, 14}, {0xc2, 14}, {0xc3, 14}, {0xc4, 14},
1849            {0xc5, 14}, {0xc6, 14}, {0xc7, 14}, {0xc8, 14},
1850            {0xc9, 14}, {0xca, 14}, {0xcb, 14}, {0xcc, 14},
1851            {0xcd, 14}, {0xce, 14}, {0xcf, 14}, {0xd0, 14},
1852            {0xd1, 14}, {0xd2, 14}, {0xd3, 14}, {0xd4, 14},
1853            {0xd5, 14}, {0xd6, 14}, {0xd7, 14}, {0xd8, 14},
1854            {0xd9, 14}, {0xda, 14}, {0xdb, 14}, {0xdc, 14},
1855            {0xdd, 14}, {0xde, 14}, {0xdf, 14}, {0xe0, 14},
1856            {0xe1, 14}, {0xe2, 14}, {0xe3, 14}, {0xe4, 14},
1857            {0xe5, 14}, {0xe6, 14}, {0xe7, 14}, {0xe8, 14},
1858            {0xe9, 14}, {0xea, 14}, {0xeb, 14}, {0xec, 14},
1859            {0xed, 14}, {0xee, 14}, {0xef, 14}, {0xf0, 14},
1860            {0xf1, 14}, {0xf2, 14}, {0xf3, 14}, {0xf4, 14},
1861            {0xf5, 14}, {0xf6, 14}, {0xf7, 14}, {0xf8, 14},
1862            {0xf9, 14}, {0xfa, 14}, {0xfb, 14}, {0xfc, 14},
1863            {0xfd, 14}, {0xfe, 14}, {0xff, 14}, {0x180, 16},
1864            {0x181, 16}, {0x182, 16}, {0x183, 16}, {0x184, 16},
1865            {0x185, 16}, {0x186, 16}, {0x187, 16}, {0x188, 16},
1866            {0x189, 16}, {0x18a, 16}, {0x18b, 16}, {0x18c, 16},
1867            {0x18d, 16}, {0x18e, 16}, {0x18f, 16}, {0x190, 16},
1868            {0x191, 16}, {0x192, 16}, {0x193, 16}, {0x194, 16},
1869            {0x195, 16}, {0x196, 16}, {0x197, 16}, {0x198, 16},
1870            {0x199, 16}, {0x19a, 16}, {0x19b, 16}, {0x19c, 16},
1871            {0x19d, 16}, {0x19e, 16}, {0x19f, 16}, {0x1a0, 16},
1872            {0x1a1, 16}, {0x1a2, 16}, {0x1a3, 16}, {0x1a4, 16},
1873            {0x1a5, 16}, {0x1a6, 16}, {0x1a7, 16}, {0x1a8, 16},
1874            {0x1a9, 16}, {0x1aa, 16}, {0x1ab, 16}, {0x1ac, 16},
1875            {0x1ad, 16}, {0x1ae, 16}, {0x1af, 16}, {0x1b0, 16},
1876            {0x1b1, 16}, {0x1b2, 16}, {0x1b3, 16}, {0x1b4, 16},
1877            {0x1b5, 16}, {0x1b6, 16}, {0x1b7, 16}, {0x1b8, 16},
1878            {0x1b9, 16}, {0x1ba, 16}, {0x1bb, 16}, {0x1bc, 16},
1879            {0x1bd, 16}, {0x1be, 16}, {0x1bf, 16}, {0x1c0, 16},
1880            {0x1c1, 16}, {0x1c2, 16}, {0x1c3, 16}, {0x1c4, 16},
1881            {0x1c5, 16}, {0x1c6, 16}, {0x1c7, 16}, {0x1c8, 16},
1882            {0x1c9, 16}, {0x1ca, 16}, {0x1cb, 16}, {0x1cc, 16},
1883            {0x1cd, 16}, {0x1ce, 16}, {0x1cf, 16}, {0x1d0, 16},
1884            {0x1d1, 16}, {0x1d2, 16}, {0x1d3, 16}, {0x1d4, 16},
1885            {0x1d5, 16}, {0x1d6, 16}, {0x1d7, 16}, {0x1d8, 16},
1886            {0x1d9, 16}, {0x1da, 16}, {0x1db, 16}, {0x1dc, 16},
1887            {0x1dd, 16}, {0x1de, 16}, {0x1df, 16}, {0x1e0, 16},
1888            {0x1e1, 16}, {0x1e2, 16}, {0x1e3, 16}, {0x1e4, 16},
1889            {0x1e5, 16}, {0x1e6, 16}, {0x1e7, 16}, {0x1e8, 16},
1890            {0x1e9, 16}, {0x1ea, 16}, {0x1eb, 16}, {0x1ec, 16},
1891            {0x1ed, 16}, {0x1ee, 16}, {0x1ef, 16}, {0x1f0, 16},
1892            {0x1f1, 16}, {0x1f2, 16}, {0x1f3, 16}, {0x1f4, 16},
1893            {0x1f5, 16}, {0x1f6, 16}, {0x1f7, 16}, {0x1f8, 16},
1894            {0x1f9, 16}, {0x1fa, 16}, {0x1fb, 16}, {0x1fc, 16},
1895            {0x1fd, 16}, {0x1fe, 16}, {0x1ff, 16},
1896    };
1897    
1898    
1899    const VLC mb_motion_table[65] = {
1900            {0x05, 13}, {0x07, 13}, {0x05, 12}, {0x07, 12},
1901            {0x09, 12}, {0x0b, 12}, {0x0d, 12}, {0x0f, 12},
1902            {0x09, 11}, {0x0b, 11}, {0x0d, 11}, {0x0f, 11},
1903            {0x11, 11}, {0x13, 11}, {0x15, 11}, {0x17, 11},
1904            {0x19, 11}, {0x1b, 11}, {0x1d, 11}, {0x1f, 11},
1905            {0x21, 11}, {0x23, 11}, {0x13, 10}, {0x15, 10},
1906            {0x17, 10}, {0x07, 8}, {0x09, 8}, {0x0b, 8},
1907            {0x07, 7}, {0x03, 5}, {0x03, 4}, {0x03, 3},
1908            {0x01, 1}, {0x02, 3}, {0x02, 4}, {0x02, 5},
1909            {0x06, 7}, {0x0a, 8}, {0x08, 8}, {0x06, 8},
1910            {0x16, 10}, {0x14, 10}, {0x12, 10}, {0x22, 11},
1911            {0x20, 11}, {0x1e, 11}, {0x1c, 11}, {0x1a, 11},
1912            {0x18, 11}, {0x16, 11}, {0x14, 11}, {0x12, 11},
1913            {0x10, 11}, {0x0e, 11}, {0x0c, 11}, {0x0a, 11},
1914            {0x08, 11}, {0x0e, 12}, {0x0c, 12}, {0x0a, 12},
1915            {0x08, 12}, {0x06, 12}, {0x04, 12}, {0x06, 13},
1916            {0x04, 13}
1917    };
1918    
1919    
1920    /******************************************************************
1921     * decoder tables                                                 *
1922     ******************************************************************/
1923    
1924    VLC const mcbpc_intra_table[64] = {
1925            {-1, 0}, {20, 6}, {36, 6}, {52, 6}, {4, 4},  {4, 4},  {4, 4},  {4, 4},
1926            {19, 3}, {19, 3}, {19, 3}, {19, 3}, {19, 3}, {19, 3}, {19, 3}, {19, 3},
1927            {35, 3}, {35, 3}, {35, 3}, {35, 3}, {35, 3}, {35, 3}, {35, 3}, {35, 3},
1928            {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3}, {51, 3},
1929            {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},
1930            {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},
1931            {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},
1932            {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1},  {3, 1}
1933    };
1934    
1935    VLC const mcbpc_inter_table[257] = {
1936            {VLC_ERROR, 0}, {255, 9}, {52, 9}, {36, 9}, {20, 9}, {49, 9}, {35, 8}, {35, 8},
1937            {19, 8}, {19, 8}, {50, 8}, {50, 8}, {51, 7}, {51, 7}, {51, 7}, {51, 7},
1938            {34, 7}, {34, 7}, {34, 7}, {34, 7}, {18, 7}, {18, 7}, {18, 7}, {18, 7},
1939            {33, 7}, {33, 7}, {33, 7}, {33, 7}, {17, 7}, {17, 7}, {17, 7}, {17, 7},
1940            {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6}, {4, 6},
1941            {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6}, {48, 6},
1942            {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5},
1943            {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5}, {3, 5},
1944            {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
1945            {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
1946            {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
1947            {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4}, {32, 4},
1948            {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
1949            {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
1950            {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
1951            {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4}, {16, 4},
1952            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1953            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1954            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1955            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1956            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1957            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1958            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1959            {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3}, {2, 3},
1960            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1961            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1962            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1963            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1964            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1965            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1966            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1967            {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3}, {1, 3},
1968            {0, 1}
1969    };
1970    
1971    VLC const cbpy_table[64] = {
1972            {-1, 0}, {-1, 0}, {6, 6},  {9, 6},  {8, 5},  {8, 5},  {4, 5},  {4, 5},
1973            {2, 5},  {2, 5},  {1, 5},  {1, 5},  {0, 4},  {0, 4},  {0, 4},  {0, 4},
1974            {12, 4}, {12, 4}, {12, 4}, {12, 4}, {10, 4}, {10, 4}, {10, 4}, {10, 4},
1975            {14, 4}, {14, 4}, {14, 4}, {14, 4}, {5, 4},  {5, 4},  {5, 4},  {5, 4},
1976            {13, 4}, {13, 4}, {13, 4}, {13, 4}, {3, 4},  {3, 4},  {3, 4},  {3, 4},
1977            {11, 4}, {11, 4}, {11, 4}, {11, 4}, {7, 4},  {7, 4},  {7, 4},  {7, 4},
1978            {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2},
1979            {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}, {15, 2}
1980    };
1981    
1982    VLC const TMNMVtab0[] = {
1983            {3, 4}, {-3, 4}, {2, 3}, {2, 3}, {-2, 3}, {-2, 3}, {1, 2},
1984            {1, 2}, {1, 2}, {1, 2}, {-1, 2}, {-1, 2}, {-1, 2}, {-1, 2}
1985    };
1986    
1987    VLC const TMNMVtab1[] = {
1988            {12, 10}, {-12, 10}, {11, 10}, {-11, 10},
1989            {10, 9}, {10, 9}, {-10, 9}, {-10, 9},
1990            {9, 9}, {9, 9}, {-9, 9}, {-9, 9},
1991            {8, 9}, {8, 9}, {-8, 9}, {-8, 9},
1992            {7, 7}, {7, 7}, {7, 7}, {7, 7},
1993            {7, 7}, {7, 7}, {7, 7}, {7, 7},
1994            {-7, 7}, {-7, 7}, {-7, 7}, {-7, 7},
1995            {-7, 7}, {-7, 7}, {-7, 7}, {-7, 7},
1996            {6, 7}, {6, 7}, {6, 7}, {6, 7},
1997            {6, 7}, {6, 7}, {6, 7}, {6, 7},
1998            {-6, 7}, {-6, 7}, {-6, 7}, {-6, 7},
1999            {-6, 7}, {-6, 7}, {-6, 7}, {-6, 7},
2000            {5, 7}, {5, 7}, {5, 7}, {5, 7},
2001            {5, 7}, {5, 7}, {5, 7}, {5, 7},
2002            {-5, 7}, {-5, 7}, {-5, 7}, {-5, 7},
2003            {-5, 7}, {-5, 7}, {-5, 7}, {-5, 7},
2004            {4, 6}, {4, 6}, {4, 6}, {4, 6},
2005            {4, 6}, {4, 6}, {4, 6}, {4, 6},
2006            {4, 6}, {4, 6}, {4, 6}, {4, 6},
2007            {4, 6}, {4, 6}, {4, 6}, {4, 6},
2008            {-4, 6}, {-4, 6}, {-4, 6}, {-4, 6},
2009            {-4, 6}, {-4, 6}, {-4, 6}, {-4, 6},
2010            {-4, 6}, {-4, 6}, {-4, 6}, {-4, 6},
2011            {-4, 6}, {-4, 6}, {-4, 6}, {-4, 6}
2012    };
2013    
2014    VLC const TMNMVtab2[] = {
2015            {32, 12}, {-32, 12}, {31, 12}, {-31, 12},
2016            {30, 11}, {30, 11}, {-30, 11}, {-30, 11},
2017            {29, 11}, {29, 11}, {-29, 11}, {-29, 11},
2018            {28, 11}, {28, 11}, {-28, 11}, {-28, 11},
2019            {27, 11}, {27, 11}, {-27, 11}, {-27, 11},
2020            {26, 11}, {26, 11}, {-26, 11}, {-26, 11},
2021            {25, 11}, {25, 11}, {-25, 11}, {-25, 11},
2022            {24, 10}, {24, 10}, {24, 10}, {24, 10},
2023            {-24, 10}, {-24, 10}, {-24, 10}, {-24, 10},
2024            {23, 10}, {23, 10}, {23, 10}, {23, 10},
2025            {-23, 10}, {-23, 10}, {-23, 10}, {-23, 10},
2026            {22, 10}, {22, 10}, {22, 10}, {22, 10},
2027            {-22, 10}, {-22, 10}, {-22, 10}, {-22, 10},
2028            {21, 10}, {21, 10}, {21, 10}, {21, 10},
2029            {-21, 10}, {-21, 10}, {-21, 10}, {-21, 10},
2030            {20, 10}, {20, 10}, {20, 10}, {20, 10},
2031            {-20, 10}, {-20, 10}, {-20, 10}, {-20, 10},
2032            {19, 10}, {19, 10}, {19, 10}, {19, 10},
2033            {-19, 10}, {-19, 10}, {-19, 10}, {-19, 10},
2034            {18, 10}, {18, 10}, {18, 10}, {18, 10},
2035            {-18, 10}, {-18, 10}, {-18, 10}, {-18, 10},
2036            {17, 10}, {17, 10}, {17, 10}, {17, 10},
2037            {-17, 10}, {-17, 10}, {-17, 10}, {-17, 10},
2038            {16, 10}, {16, 10}, {16, 10}, {16, 10},
2039            {-16, 10}, {-16, 10}, {-16, 10}, {-16, 10},
2040            {15, 10}, {15, 10}, {15, 10}, {15, 10},
2041            {-15, 10}, {-15, 10}, {-15, 10}, {-15, 10},
2042            {14, 10}, {14, 10}, {14, 10}, {14, 10},
2043            {-14, 10}, {-14, 10}, {-14, 10}, {-14, 10},
2044            {13, 10}, {13, 10}, {13, 10}, {13, 10},
2045            {-13, 10}, {-13, 10}, {-13, 10}, {-13, 10}
2046    };
2047    
2048    short const dc_threshold[] = {
2049            21514, 26984,  8307, 28531, 29798, 24951, 25970, 26912,
2050             8307, 25956, 26994, 25974,  8292, 29286, 28015, 29728,
2051            25960, 18208, 21838, 18208, 19536, 22560, 26998,  8260,
2052            28515, 25956,  8291, 25640, 30309, 27749, 11817, 22794,
2053            30063,  8306, 28531, 29798, 24951, 25970, 25632, 29545,
2054            29300, 25193, 29813, 29295, 26656, 29537, 29728,  8303,
2055            26983, 25974, 24864, 25443, 29541,  8307, 28532, 26912,
2056            29556, 29472, 30063, 25458,  8293, 28515, 25956,  2606
2057    };
2058    
2059    VLC const dc_lum_tab[] = {
2060            {0, 0}, {4, 3}, {3, 3}, {0, 3},
2061            {2, 2}, {2, 2}, {1, 2}, {1, 2},
2062    };

Legend:
Removed from v.1.42  
changed lines
  Added in v.1.44.2.9

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4