vld.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:58k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _INC_VLD
  36. #define _INC_VLD 1
  37.  
  38. /*  DECTABENTRY - Description of each entry in the decode tables
  39.  *  An entry in the decode table contains the following information:
  40.  *  sym  -      a)  If bits > 0, sym contains decoded symbol
  41.  *              If sym.type = SYM_EXIT, we find the reason in sym.value
  42.  *              b)  bits < 0 indicates that long codeword was encountered.
  43.  *              We continue decoding using table indicated by sym.value.
  44.  *              sym.type is not defined.
  45.  *  statechange Add to state to get the new state
  46.  *  bits  -     abs(bits) is # of parsed bits.  bits < 0 indicates code > 8 bits
  47.  */
  48. typedef struct {
  49.     SYMBOL sym;
  50.     S8 statechange;
  51.     S8 bits;
  52. } DECTABENTRY;
  53. #define DECTABBITS          8       /* Look up DECTABBITS bits at a time */
  54. #define DECTABSIZE          256     /* 2 ** DECTABBITS */
  55. DECTABENTRY dectable[NUMTABS][DECTABSIZE];
  56. U8 selectdectab[NUMSTATES] = {
  57.     TAB_ILLEGAL_STATE,                      /* State 0 is not used */
  58.     TAB_MVD,                TAB_MVD,        /* ST_MC_NOCBP_MVD */
  59.     TAB_MBA_STARTCODE,
  60.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 6 */
  61.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 5 */
  62.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 4 */
  63.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 3 */
  64.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 2 */
  65.     TAB_DCT_NEXT,           TAB_DCT_FIRST,  /* Block 1 */
  66.     TAB_LAST_INTRA_DC,                      /* INTRA Block 6 */
  67.     TAB_DCT_NEXT,           TAB_INTRA_DC,   /* INTRA Block 5 */
  68.     TAB_DCT_NEXT,           TAB_INTRA_DC,   /* INTRA Block 4 */
  69.     TAB_DCT_NEXT,           TAB_INTRA_DC,   /* INTRA Block 3 */
  70.     TAB_DCT_NEXT,           TAB_INTRA_DC,   /* INTRA Block 2 */
  71.     TAB_DCT_NEXT,           TAB_INTRA_DC,   /* INTRA Block 1 */
  72.     TAB_MVD,                TAB_MVD,        /* ST_MC_CBP_MVD */
  73.     TAB_CBP,
  74.     TAB_QUANT_TR,                           /* ST_INTRA_MQUANT */
  75.     TAB_QUANT_TR,                           /* ST_MC_CBP_MQUANT */
  76.     TAB_ESCAPE_LEVEL,
  77.     TAB_QUANT_TR,                           /* ST_INTER_MQUANT */
  78.     TAB_ESCAPE_LEVEL,
  79.     TAB_MTYPE,
  80.     TAB_ESCAPE_LEVEL,
  81.     TAB_GEI_PEI,
  82.     TAB_ESCAPE_LEVEL,
  83.     TAB_PTYPE,
  84.     TAB_ESCAPE_LEVEL,
  85.     TAB_QUANT_TR,                           /* ST_GQUANT */
  86.     TAB_ESCAPE_LEVEL,
  87.     TAB_QUANT_TR,                           /* ST_TR */
  88.     TAB_GN,                                 /* ST_AFTER_STARTCODE */
  89.     TAB_ESCAPE_LEVEL,
  90.     TAB_ILLEGAL_STATE,                      /* State 46 is not used */
  91.     TAB_ESCAPE_LEVEL,
  92.     TAB_ILLEGAL_STATE,                      /* State 48 is not used */
  93.     TAB_ESCAPE_LEVEL,
  94.     TAB_ILLEGAL_STATE,                      /* State 50 is not used */
  95.     TAB_ESCAPE_LEVEL,
  96.     TAB_ILLEGAL_STATE,                      /* State 52 is not used */
  97.     TAB_ESCAPE_LEVEL,
  98.     
  99.     // H.263 states start at item 54
  100.     TAB263_FINISHED,                        // Done with last block
  101.     TAB263_ESCAPE_LEVEL,                    // ESCAPE-RUN-LEVEL as last TCOEF of last block
  102.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 6
  103.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 5
  104.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 4
  105.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 3
  106.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 2
  107.     TAB263_TCOEF,   TAB263_ESCAPE_LEVEL,    // Block 1
  108.     TAB263_INTRA_DC,                        // INTRA-DC only
  109.     TAB_ILLEGAL_STATE,                      // State 69 is not used
  110.     TAB263_INTRA_DC                         // INTRA-DC followed by AC coefficients
  111. #ifdef DO_H263_PLUS
  112.     ,
  113.     TAB263_FINISHED,                            // Done with last block
  114.     TAB263_ESCAPE_LEVEL,                        // ESCAPE-RUN-LEVEL as last TCOEF of last block
  115.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL,  // Block 6
  116.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL,  // Block 5
  117.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL,  // Block 4
  118.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL,  // Block 3
  119.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL,  // Block 2
  120.     TAB263PLUS_TCOEF, TAB263_ESCAPE_LEVEL   // Block 1
  121. #endif
  122. };
  123. #define MAX_STRING_VLD          (DECTABBITS + 4)
  124. struct vlc_entry {
  125.     char    vlc[MAX_STRING_VLD]; /* Flawfinder: ignore */
  126.     int     type;
  127.     int     value;
  128.     int     statechange;
  129.     int     last_value; /* Only used for fixed-length codes */
  130. };
  131. ////////////////  Tables for H.261  //////////////////
  132. static  struct vlc_entry dct_next[] = {
  133.     {"0000 01",     SYM_ESCAPE, TAB_ESCAPE_RUN,    0},
  134.     {"0010 0",      SYM_ESCAPE, TAB_DCT_00100,     0},
  135.     {"0000 00",     SYM_ESCAPE, TAB_DCT_000000,    0},
  136.     {"10",          SYM_EOB,    0,      (ST_FIRST_BLK_2 - ST_NEXT_BLK_1)},
  137.     {"110",         0,      1,      0},
  138.     {"111",         0,      -1,     0},
  139.     {"0110",        1,      1,      0},
  140.     {"0111",        1,      -1,     0},
  141.     {"0100 0",      0,      2,      0},
  142.     {"0100 1",      0,      -2,     0},
  143.     {"0101 0",      2,      1,      0},
  144.     {"0101 1",      2,      -1,     0},
  145.     {"0010 10",     0,      3,      0},
  146.     {"0010 11",     0,      -3,     0},
  147.     {"0011 10",     3,      1,      0},
  148.     {"0011 11",     3,      -1,     0},
  149.     {"0011 00",     4,      1,      0},
  150.     {"0011 01",     4,      -1,     0},
  151.     {"0001 100",    1,      2,      0},
  152.     {"0001 101",    1,      -2,     0},
  153.     {"0001 110",    5,      1,      0},
  154.     {"0001 111",    5,      -1,     0},
  155.     {"0001 010",    6,      1,      0},
  156.     {"0001 011",    6,      -1,     0},
  157.     {"0001 000",    7,      1,      0},
  158.     {"0001 001",    7,      -1,     0},
  159.     {"0000 1100",   0,      4,      0},
  160.     {"0000 1101",   0,      -4,     0},
  161.     {"0000 1000",   2,      2,      0},
  162.     {"0000 1001",   2,      -2,     0},
  163.     {"0000 1110",   8,      1,      0},
  164.     {"0000 1111",   8,      -1,     0},
  165.     {"0000 1010",   9,      1,      0},
  166.     {"0000 1011",   9,      -1,     0},
  167.     {"End"}
  168. };
  169. static  struct vlc_entry dct_first[] = {
  170.     {"0000 01",     SYM_ESCAPE, TAB_ESCAPE_RUN, (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  171.     {"0010 0",      SYM_ESCAPE, TAB_DCT_00100,  (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  172.     {"0000 00",     SYM_ESCAPE, TAB_DCT_000000, (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  173.     {"10",          0,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  174.     {"11",          0,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  175.     {"0110",        1,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  176.     {"0111",        1,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  177.     {"0100 0",      0,      2,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  178.     {"0100 1",      0,      -2,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  179.     {"0101 0",      2,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  180.     {"0101 1",      2,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  181.     {"0010 10",     0,      3,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  182.     {"0010 11",     0,      -3,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  183.     {"0011 10",     3,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  184.     {"0011 11",     3,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  185.     {"0011 00",     4,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  186.     {"0011 01",     4,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  187.     {"0001 100",    1,      2,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  188.     {"0001 101",    1,      -2,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  189.     {"0001 110",    5,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  190.     {"0001 111",    5,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  191.     {"0001 010",    6,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  192.     {"0001 011",    6,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  193.     {"0001 000",    7,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  194.     {"0001 001",    7,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  195.     {"0000 1100",   0,      4,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  196.     {"0000 1101",   0,      -4,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  197.     {"0000 1000",   2,      2,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  198.     {"0000 1001",   2,      -2,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  199.     {"0000 1110",   8,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  200.     {"0000 1111",   8,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  201.     {"0000 1010",   9,      1,      (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  202.     {"0000 1011",   9,      -1,     (ST_NEXT_BLK_1 - ST_FIRST_BLK_1)},
  203.     {"End"}
  204. };
  205. static  struct vlc_entry dct_00100[] = {
  206.     {"110 0",       0,      5,      0},
  207.     {"110 1",       0,      -5,     0},
  208.     {"001 0",       0,      6,      0},
  209.     {"001 1",       0,      -6,     0},
  210.     {"101 0",       1,      3,      0},
  211.     {"101 1",       1,      -3,     0},
  212.     {"100 0",       3,      2,      0},
  213.     {"100 1",       3,      -2,     0},
  214.     {"111 0",       10,     1,      0},
  215.     {"111 1",       10,     -1,     0},
  216.     {"011 0",       11,     1,      0},
  217.     {"011 1",       11,     -1,     0},
  218.     {"010 0",       12,     1,      0},
  219.     {"010 1",       12,     -1,     0},
  220.     {"000 0",       13,     1,      0},
  221.     {"000 1",       13,     -1,     0},
  222.     {"End"}
  223. };
  224. static  struct vlc_entry dct_000000[] = {
  225.     {"10 100",      0,      7,      0},
  226.     {"10 101",      0,      -7,     0},
  227.     {"11 000",      1,      4,      0},
  228.     {"11 001",      1,      -4,     0},
  229.     {"10 110",      2,      3,      0},
  230.     {"10 111",      2,      -3,     0},
  231.     {"11 110",      4,      2,      0},
  232.     {"11 111",      4,      -2,     0},
  233.     {"10 010",      5,      2,      0},
  234.     {"10 011",      5,      -2,     0},
  235.     {"11 100",      14,     1,      0},
  236.     {"11 101",      14,     -1,     0},
  237.     {"11 010",      15,     1,      0},
  238.     {"11 011",      15,     -1,     0},
  239.     {"10 000",      16,     1,      0},
  240.     {"10 001",      16,     -1,     0},
  241.     {"01 1101 0",   0,      8,      0},
  242.     {"01 1101 1",   0,      -8,     0},
  243.     {"01 1000 0",   0,      9,      0},
  244.     {"01 1000 1",   0,      -9,     0},
  245.     {"01 0011 0",   0,      10,     0},
  246.     {"01 0011 1",   0,      -10,    0},
  247.     {"01 0000 0",   0,      11,     0},
  248.     {"01 0000 1",   0,      -11,    0},
  249.     {"01 1011 0",   1,      5,      0},
  250.     {"01 1011 1",   1,      -5,     0},
  251.     {"01 0100 0",   2,      4,      0},
  252.     {"01 0100 1",   2,      -4,     0},
  253.     {"01 1100 0",   3,      3,      0},
  254.     {"01 1100 1",   3,      -3,     0},
  255.     {"01 0010 0",   4,      3,      0},
  256.     {"01 0010 1",   4,      -3,     0},
  257.     {"01 1110 0",   6,      2,      0},
  258.     {"01 1110 1",   6,      -2,     0},
  259.     {"01 0101 0",   7,      2,      0},
  260.     {"01 0101 1",   7,      -2,     0},
  261.     {"01 0001 0",   8,      2,      0},
  262.     {"01 0001 1",   8,      -2,     0},
  263.     {"01 1111 0",   17,     1,      0},
  264.     {"01 1111 1",   17,     -1,     0},
  265.     {"01 1010 0",   18,     1,      0},
  266.     {"01 1010 1",   18,     -1,     0},
  267.     {"01 1001 0",   19,     1,      0},
  268.     {"01 1001 1",   19,     -1,     0},
  269.     {"01 0111 0",   20,     1,      0},
  270.     {"01 0111 1",   20,     -1,     0},
  271.     {"01 0110 0",   21,     1,      0},
  272.     {"01 0110 1",   21,     -1,     0},
  273.     {"00 1101 00",  0,      12,     0},
  274.     {"00 1101 01",  0,      -12,    0},
  275.     {"00 1100 10",  0,      13,     0},
  276.     {"00 1100 11",  0,      -13,    0},
  277.     {"00 1100 00",  0,      14,     0},
  278.     {"00 1100 01",  0,      -14,    0},
  279.     {"00 1011 10",  0,      15,     0},
  280.     {"00 1011 11",  0,      -15,    0},
  281.     {"00 1011 00",  1,      6,      0},
  282.     {"00 1011 01",  1,      -6,     0},
  283.     {"00 1010 10",  1,      7,      0},
  284.     {"00 1010 11",  1,      -7,     0},
  285.     {"00 1010 00",  2,      5,      0},
  286.     {"00 1010 01",  2,      -5,     0},
  287.     {"00 1001 10",  3,      4,      0},
  288.     {"00 1001 11",  3,      -4,     0},
  289.     {"00 1001 00",  5,      3,      0},
  290.     {"00 1001 01",  5,      -3,     0},
  291.     {"00 1000 10",  9,      2,      0},
  292.     {"00 1000 11",  9,      -2,     0},
  293.     {"00 1000 00",  10,     2,      0},
  294.     {"00 1000 01",  10,     -2,     0},
  295.     {"00 1111 10",  22,     1,      0},
  296.     {"00 1111 11",  22,     -1,     0},
  297.     {"00 1111 00",  23,     1,      0},
  298.     {"00 1111 01",  23,     -1,     0},
  299.     {"00 1110 10",  24,     1,      0},
  300.     {"00 1110 11",  24,     -1,     0},
  301.     {"00 1110 00",  25,     1,      0},
  302.     {"00 1110 01",  25,     -1,     0},
  303.     {"00 1101 10",  26,     1,      0},
  304.     {"00 1101 11",  26,     -1,     0},
  305.     {"End"}
  306. };
  307. static  struct vlc_entry escape_run[] = {
  308.     {"FLC"},
  309.     {"00 0000",     SYM_ESC_RUN,    0,  -ST_DIFF_ESC_LEVEL,     63},
  310.     {"End"}
  311. };
  312. /* ESC_LEVEL: Levels 0 and -128 are not allowed */
  313. static  struct vlc_entry escape_level[] = {
  314.     {"FLC"},
  315.     {"0000 0001",   SYM_ESC_LEVEL,      1,  ST_DIFF_ESC_LEVEL,  127},
  316.     {"1000 0001",   SYM_ESC_LEVEL,   -127,  ST_DIFF_ESC_LEVEL,  -1},
  317.     {"End"}
  318. };
  319. /* INTRA DC coeff:  Levels 0 and 255 not allowed; level 128 repr. by 255 */
  320. static  struct vlc_entry intra_dc[] = {
  321.     {"FLC"},
  322.     {"0000 0001", SYM_INTRA_DC,   1,    -1,     127},
  323.     {"1111 1111", SYM_INTRA_DC, 128,    -1,     128},
  324.     {"1000 0001", SYM_INTRA_DC, 129,    -1,     254},
  325.     {"End"}
  326. };
  327. /* INTRA DC coeff:  Levels 0 and 255 not allowed; level 128 repr. by 255 */
  328. static  struct vlc_entry last_intra_dc[] = {
  329.     {"FLC"},
  330.     {"0000 0001", SYM_INTRA_DC,   1, (ST_NEXT_BLK_6 - ST_INTRA_DC_BLK_6), 127},
  331.     {"1111 1111", SYM_INTRA_DC, 128, (ST_NEXT_BLK_6 - ST_INTRA_DC_BLK_6), 128},
  332.     {"1000 0001", SYM_INTRA_DC, 129, (ST_NEXT_BLK_6 - ST_INTRA_DC_BLK_6), 254},
  333.     {"End"}
  334. };
  335. static  struct vlc_entry mba_startcode[] = {
  336.     {"1",           SYM_MBA,        1,  (ST_MTYPE - ST_MBA_STARTCODE)},
  337.     {"011",         SYM_MBA,        2,  (ST_MTYPE - ST_MBA_STARTCODE)},
  338.     {"010",         SYM_MBA,        3,  (ST_MTYPE - ST_MBA_STARTCODE)},
  339.     {"0011",        SYM_MBA,        4,  (ST_MTYPE - ST_MBA_STARTCODE)},
  340.     {"0010",        SYM_MBA,        5,  (ST_MTYPE - ST_MBA_STARTCODE)},
  341.     {"0001 1",      SYM_MBA,        6,  (ST_MTYPE - ST_MBA_STARTCODE)},
  342.     {"0001 0",      SYM_MBA,        7,  (ST_MTYPE - ST_MBA_STARTCODE)},
  343.     {"0000 111",    SYM_MBA,        8,  (ST_MTYPE - ST_MBA_STARTCODE)},
  344.     {"0000 110",    SYM_MBA,        9,  (ST_MTYPE - ST_MBA_STARTCODE)},
  345.     {"0000 1011",   SYM_MBA,       10,  (ST_MTYPE - ST_MBA_STARTCODE)},
  346.     {"0000 1010",   SYM_MBA,       11,  (ST_MTYPE - ST_MBA_STARTCODE)},
  347.     {"0000 1001",   SYM_MBA,       12,  (ST_MTYPE - ST_MBA_STARTCODE)},
  348.     {"0000 1000",   SYM_MBA,       13,  (ST_MTYPE - ST_MBA_STARTCODE)},
  349.     {"0000 0",      SYM_ESCAPE, TAB_LONG_MBA,   0},
  350.     {"End"}
  351. };
  352. static  struct vlc_entry long_mba[] = {
  353.     {"111",         SYM_MBA,       14,  (ST_MTYPE - ST_MBA_STARTCODE)},
  354.     {"110",         SYM_MBA,       15,  (ST_MTYPE - ST_MBA_STARTCODE)},
  355.     
  356.     {"101 11",      SYM_MBA,       16,  (ST_MTYPE - ST_MBA_STARTCODE)},
  357.     {"101 10",      SYM_MBA,       17,  (ST_MTYPE - ST_MBA_STARTCODE)},
  358.     {"101 01",      SYM_MBA,       18,  (ST_MTYPE - ST_MBA_STARTCODE)},
  359.     {"101 00",      SYM_MBA,       19,  (ST_MTYPE - ST_MBA_STARTCODE)},
  360.     {"100 11",      SYM_MBA,       20,  (ST_MTYPE - ST_MBA_STARTCODE)},
  361.     {"100 10",      SYM_MBA,       21,  (ST_MTYPE - ST_MBA_STARTCODE)},
  362.     {"100 011",     SYM_MBA,       22,  (ST_MTYPE - ST_MBA_STARTCODE)},
  363.     {"100 010",     SYM_MBA,       23,  (ST_MTYPE - ST_MBA_STARTCODE)},
  364.     {"100 001",     SYM_MBA,       24,  (ST_MTYPE - ST_MBA_STARTCODE)},
  365.     {"100 000",     SYM_MBA,       25,  (ST_MTYPE - ST_MBA_STARTCODE)},
  366.     {"011 111",     SYM_MBA,       26,  (ST_MTYPE - ST_MBA_STARTCODE)},
  367.     {"011 110",     SYM_MBA,       27,  (ST_MTYPE - ST_MBA_STARTCODE)},
  368.     {"011 101",     SYM_MBA,       28,  (ST_MTYPE - ST_MBA_STARTCODE)},
  369.     {"011 100",     SYM_MBA,       29,  (ST_MTYPE - ST_MBA_STARTCODE)},
  370.     {"011 011",     SYM_MBA,       30,  (ST_MTYPE - ST_MBA_STARTCODE)},
  371.     {"011 010",     SYM_MBA,       31,  (ST_MTYPE - ST_MBA_STARTCODE)},
  372.     {"011 001",     SYM_MBA,       32,  (ST_MTYPE - ST_MBA_STARTCODE)},
  373.     {"011 000",     SYM_MBA,       33,  (ST_MTYPE - ST_MBA_STARTCODE)},
  374.     {"001 111",     SYM_MBA_STUFFING,   0,  0},
  375.     {"000 0000 0",  SYM_ESCAPE, TAB_LONG_STARTCODE, 0},
  376.     {"End"}
  377. };
  378. static  struct vlc_entry long_startcode[] = {
  379.     {"001",     SYM_STARTCODE, 0, (ST_AFTER_STARTCODE - ST_MBA_STARTCODE)},
  380.     {"End"}
  381. };
  382. static  struct vlc_entry mtype[] = {
  383.     {"0001",    SYM_MTYPE,  MTYPE_INTRA,        (ST_INTRA_DC_BLK_1 - ST_MTYPE)},
  384.     {"0000 001",SYM_MTYPE,  MTYPE_INTRA_MQUANT, (ST_INTRA_MQUANT - ST_MTYPE)},
  385.     {"1",       SYM_MTYPE,  MTYPE_INTER,        (ST_CBP - ST_MTYPE)},
  386.     {"0000 1",  SYM_MTYPE,  MTYPE_INTER_MQUANT, (ST_INTER_MQUANT - ST_MTYPE)},
  387.     {"0000 0001",SYM_MTYPE, MTYPE_MC_CBP,       (ST_MC_CBP_MVDX - ST_MTYPE)},
  388.     {"001",     SYM_MTYPE,  MTYPE_MCFILT_NOCBP, (ST_MC_NOCBP_MVDX - ST_MTYPE)},
  389.     {"01",      SYM_MTYPE,  MTYPE_MCFILT_CBP,   (ST_MC_CBP_MVDX - ST_MTYPE)},
  390.     {"0000 01", SYM_MTYPE,  MTYPE_MCFILT_MQUANT,(ST_MC_CBP_MQUANT - ST_MTYPE)},
  391.     {"0000 0000", SYM_ESCAPE,   TAB_LONG_MTYPE, 0},
  392.     {"End"}
  393. };
  394. static  struct vlc_entry long_mtype[] = {
  395.     {"1",       SYM_MTYPE,  MTYPE_MC_NOCBP,     (ST_MC_NOCBP_MVDX - ST_MTYPE)},
  396.     {"01",      SYM_MTYPE,  MTYPE_MC_MQUANT,    (ST_MC_CBP_MQUANT - ST_MTYPE)},
  397.     {"End"}
  398. };
  399. static  struct vlc_entry mvd[] = {
  400.     {"1",           SYM_MVD,    0,      1},
  401.     {"010",         SYM_MVD,    1,      1},
  402.     {"011",         SYM_MVD,    -1,     1},
  403.     {"0010",        SYM_MVD,    2,      1},
  404.     {"0011",        SYM_MVD,    -2,     1},
  405.     {"0001 0",      SYM_MVD,    3,      1},
  406.     {"0001 1",      SYM_MVD,    -3,     1},
  407.     {"0000 110",    SYM_MVD,    4,      1},
  408.     {"0000 111",    SYM_MVD,    -4,     1},
  409.     {"0000 1010",   SYM_MVD,    5,      1},
  410.     {"0000 1011",   SYM_MVD,    -5,     1},
  411.     {"0000 1000",   SYM_MVD,    6,      1},
  412.     {"0000 1001",   SYM_MVD,    -6,     1},
  413.     {"0000 0",      SYM_ESCAPE, TAB_LONG_MVD,   1},
  414.     {"End"}
  415. };
  416. static  struct vlc_entry long_mvd[] = {
  417.     {"110",         SYM_MVD,    7,      0},
  418.     {"111",         SYM_MVD,    -7,     0},
  419.     {"101 10",      SYM_MVD,    8,      0},
  420.     {"101 11",      SYM_MVD,    -8,     0},
  421.     {"101 00",      SYM_MVD,    9,      0},
  422.     {"101 01",      SYM_MVD,    -9,     0},
  423.     {"100 10",      SYM_MVD,    10,     0},
  424.     {"100 11",      SYM_MVD,    -10,    0},
  425.     {"100 010",     SYM_MVD,    11,     0},
  426.     {"100 011",     SYM_MVD,    -11,    0},
  427.     {"100 000",     SYM_MVD,    12,     0},
  428.     {"100 001",     SYM_MVD,    -12,    0},
  429.     {"011 110",     SYM_MVD,    13,     0},
  430.     {"011 111",     SYM_MVD,    -13,    0},
  431.     {"011 100",     SYM_MVD,    14,     0},
  432.     {"011 101",     SYM_MVD,    -14,    0},
  433.     {"011 010",     SYM_MVD,    15,     0},
  434.     {"011 011",     SYM_MVD,    -15,    0},
  435.     {"011 001",     SYM_MVD,    -16,    0},
  436.     {"End"}
  437. };
  438. static  struct vlc_entry cbp[] = {
  439.     {"111",         SYM_CBP,    0x3c,   (ST_FIRST_BLK_3 - ST_CBP)},
  440.     {"1101",        SYM_CBP,    0x4,    (ST_FIRST_BLK_6 - ST_CBP)},
  441.     {"1100",        SYM_CBP,    0x8,    (ST_FIRST_BLK_6 - ST_CBP)},
  442.     {"1011",        SYM_CBP,    0x10,   (ST_FIRST_BLK_6 - ST_CBP)},
  443.     {"1010",        SYM_CBP,    0x20,   (ST_FIRST_BLK_6 - ST_CBP)},
  444.     {"1001 1",      SYM_CBP,    0xc,    (ST_FIRST_BLK_5 - ST_CBP)},
  445.     {"1001 0",      SYM_CBP,    0x30,   (ST_FIRST_BLK_5 - ST_CBP)},
  446.     {"1000 1",      SYM_CBP,    0x14,   (ST_FIRST_BLK_5 - ST_CBP)},
  447.     {"1000 0",      SYM_CBP,    0x28,   (ST_FIRST_BLK_5 - ST_CBP)},
  448.     {"0111 1",      SYM_CBP,    0x1c,   (ST_FIRST_BLK_4 - ST_CBP)},
  449.     {"0111 0",      SYM_CBP,    0x2c,   (ST_FIRST_BLK_4 - ST_CBP)},
  450.     {"0110 1",      SYM_CBP,    0x34,   (ST_FIRST_BLK_4 - ST_CBP)},
  451.     {"0110 0",      SYM_CBP,    0x38,   (ST_FIRST_BLK_4 - ST_CBP)},
  452.     {"0101 1",      SYM_CBP,    0x1,    (ST_FIRST_BLK_6 - ST_CBP)},
  453.     {"0101 0",      SYM_CBP,    0x3d,   (ST_FIRST_BLK_2 - ST_CBP)},
  454.     {"0100 1",      SYM_CBP,    0x2,    (ST_FIRST_BLK_6 - ST_CBP)},
  455.     {"0100 0",      SYM_CBP,    0x3e,   (ST_FIRST_BLK_2 - ST_CBP)},
  456.     {"0011 11",     SYM_CBP,    0x18,   (ST_FIRST_BLK_5 - ST_CBP)},
  457.     {"0011 10",     SYM_CBP,    0x24,   (ST_FIRST_BLK_5 - ST_CBP)},
  458.     {"0011 01",     SYM_CBP,    0x3,    (ST_FIRST_BLK_5 - ST_CBP)},
  459.     {"0011 00",     SYM_CBP,    0x3f,   (ST_FIRST_BLK_1 - ST_CBP)},
  460.     {"0010 111",    SYM_CBP,    0x5,    (ST_FIRST_BLK_5 - ST_CBP)},
  461.     {"0010 110",    SYM_CBP,    0x9,    (ST_FIRST_BLK_5 - ST_CBP)},
  462.     {"0010 101",    SYM_CBP,    0x11,   (ST_FIRST_BLK_5 - ST_CBP)},
  463.     {"0010 100",    SYM_CBP,    0x21,   (ST_FIRST_BLK_5 - ST_CBP)},
  464.     {"0010 011",    SYM_CBP,    0x6,    (ST_FIRST_BLK_5 - ST_CBP)},
  465.     {"0010 010",    SYM_CBP,    0xa,    (ST_FIRST_BLK_5 - ST_CBP)},
  466.     {"0010 001",    SYM_CBP,    0x12,   (ST_FIRST_BLK_5 - ST_CBP)},
  467.     {"0010 000",    SYM_CBP,    0x22,   (ST_FIRST_BLK_5 - ST_CBP)},
  468.     {"0001 1111",   SYM_CBP,    0x7,    (ST_FIRST_BLK_4 - ST_CBP)},
  469.     {"0001 1110",   SYM_CBP,    0xb,    (ST_FIRST_BLK_4 - ST_CBP)},
  470.     {"0001 1101",   SYM_CBP,    0x13,   (ST_FIRST_BLK_4 - ST_CBP)},
  471.     {"0001 1100",   SYM_CBP,    0x23,   (ST_FIRST_BLK_4 - ST_CBP)},
  472.     {"0001 1011",   SYM_CBP,    0xd,    (ST_FIRST_BLK_4 - ST_CBP)},
  473.     {"0001 1010",   SYM_CBP,    0x31,   (ST_FIRST_BLK_4 - ST_CBP)},
  474.     {"0001 1001",   SYM_CBP,    0x15,   (ST_FIRST_BLK_4 - ST_CBP)},
  475.     {"0001 1000",   SYM_CBP,    0x29,   (ST_FIRST_BLK_4 - ST_CBP)},
  476.     {"0001 0111",   SYM_CBP,    0xe,    (ST_FIRST_BLK_4 - ST_CBP)},
  477.     {"0001 0110",   SYM_CBP,    0x32,   (ST_FIRST_BLK_4 - ST_CBP)},
  478.     {"0001 0101",   SYM_CBP,    0x16,   (ST_FIRST_BLK_4 - ST_CBP)},
  479.     {"0001 0100",   SYM_CBP,    0x2a,   (ST_FIRST_BLK_4 - ST_CBP)},
  480.     {"0001 0011",   SYM_CBP,    0xf,    (ST_FIRST_BLK_3 - ST_CBP)},
  481.     {"0001 0010",   SYM_CBP,    0x33,   (ST_FIRST_BLK_3 - ST_CBP)},
  482.     {"0001 0001",   SYM_CBP,    0x17,   (ST_FIRST_BLK_3 - ST_CBP)},
  483.     {"0001 0000",   SYM_CBP,    0x2b,   (ST_FIRST_BLK_3 - ST_CBP)},
  484.     {"0000 1111",   SYM_CBP,    0x19,   (ST_FIRST_BLK_4 - ST_CBP)},
  485.     {"0000 1110",   SYM_CBP,    0x25,   (ST_FIRST_BLK_4 - ST_CBP)},
  486.     {"0000 1101",   SYM_CBP,    0x1a,   (ST_FIRST_BLK_4 - ST_CBP)},
  487.     {"0000 1100",   SYM_CBP,    0x26,   (ST_FIRST_BLK_4 - ST_CBP)},
  488.     {"0000 1011",   SYM_CBP,    0x1d,   (ST_FIRST_BLK_3 - ST_CBP)},
  489.     {"0000 1010",   SYM_CBP,    0x2d,   (ST_FIRST_BLK_3 - ST_CBP)},
  490.     {"0000 1001",   SYM_CBP,    0x35,   (ST_FIRST_BLK_3 - ST_CBP)},
  491.     {"0000 1000",   SYM_CBP,    0x39,   (ST_FIRST_BLK_3 - ST_CBP)},
  492.     {"0000 0111",   SYM_CBP,    0x1e,   (ST_FIRST_BLK_3 - ST_CBP)},
  493.     {"0000 0110",   SYM_CBP,    0x2e,   (ST_FIRST_BLK_3 - ST_CBP)},
  494.     {"0000 0101",   SYM_CBP,    0x36,   (ST_FIRST_BLK_3 - ST_CBP)},
  495.     {"0000 0100",   SYM_CBP,    0x3a,   (ST_FIRST_BLK_3 - ST_CBP)},
  496.     {"0000 00",     SYM_ESCAPE, TAB_LONG_CBP,   0},
  497.     {"End"}
  498. };
  499. static  struct vlc_entry long_cbp[] = {
  500.     {"11 1",        SYM_CBP,    0x1f,   (ST_FIRST_BLK_2 - ST_CBP)},
  501.     {"11 0",        SYM_CBP,    0x2f,   (ST_FIRST_BLK_2 - ST_CBP)},
  502.     {"10 1",        SYM_CBP,    0x37,   (ST_FIRST_BLK_2 - ST_CBP)},
  503.     {"10 0",        SYM_CBP,    0x3b,   (ST_FIRST_BLK_2 - ST_CBP)},
  504.     {"01 1",        SYM_CBP,    0x1b,   (ST_FIRST_BLK_3 - ST_CBP)},
  505.     {"01 0",        SYM_CBP,    0x27,   (ST_FIRST_BLK_3 - ST_CBP)},
  506.     {"End"}
  507. };
  508. static  struct vlc_entry quant_tr[] = {
  509.     {"FLC"},
  510.     {"00000",   SYM_QUANT_TR,   0,      ST_DIFF_QUANT,      31},
  511.     {"End"}
  512. };
  513. static  struct vlc_entry gei_pei[] = {
  514.     {"0",       SYM_GEI_PEI,    0,      (ST_MBA_STARTCODE - ST_GEI_PEI)},
  515.     {"1",       SYM_ESCAPE, TAB_LONG_SPARE,     0},
  516.     {"End"}
  517. };
  518. static  struct vlc_entry long_spare[] = {
  519.     {"FLC"},
  520.     {"0000 0000",   SYM_SPARE,  0,      0,      255},
  521.     {"End"}
  522. };
  523. static  struct vlc_entry gn[] = {
  524.     {"FLC"},
  525.     {"0000",    SYM_GN,     0,  (ST_TR - ST_AFTER_STARTCODE),       0},
  526.     {"0001",    SYM_GN,     1,  (ST_GQUANT - ST_AFTER_STARTCODE),   15},
  527.     {"End"}
  528. };
  529. static  struct vlc_entry ptype[] = {
  530.     {"FLC"},
  531.     {"0000 00", SYM_PTYPE,  0,  (ST_GEI_PEI - ST_PTYPE),    63},
  532.     {"End"}
  533. };
  534. static  struct vlc_entry illegal_state[] = {
  535.     {"0",       SYM_EXIT,   ILLEGAL_STATE,      0},
  536.     {"1",       SYM_EXIT,   ILLEGAL_STATE,      0},
  537.     {"End"}
  538. };
  539. ////////////////  Tables for H.263  //////////////////
  540. // Starts with COD=0 for coded block; COD=1 for skipped block
  541. static  struct vlc_entry mcbpc263[] = {
  542.     {"0 0000 0",    SYM_ESCAPE, TAB263_LONG_MCBPC_INTER},
  543.     
  544.     {"1",           SYM_MCBPC,  MTYPE_SKIP},
  545.     
  546.     {"0 1",         SYM_MCBPC,  MTYPE263_INTER + 0},
  547.     {"0 0011",      SYM_MCBPC,  MTYPE263_INTER + 1},
  548.     {"0 0010",      SYM_MCBPC,  MTYPE263_INTER + 2},
  549.     {"0 0001 01",   SYM_MCBPC,  MTYPE263_INTER + 3},
  550.     {"0 011",       SYM_MCBPC,  MTYPE263_INTER_Q + 0},
  551.     {"0 0000 111",  SYM_MCBPC,  MTYPE263_INTER_Q + 1},
  552.     {"0 0000 110",  SYM_MCBPC,  MTYPE263_INTER_Q + 2},
  553.     {"0 010",       SYM_MCBPC,  MTYPE263_INTER4V + 0},
  554.     {"0 0000 101",  SYM_MCBPC,  MTYPE263_INTER4V + 1},
  555.     {"0 0000 100",  SYM_MCBPC,  MTYPE263_INTER4V + 2},
  556.     {"0 0001 1",    SYM_MCBPC,  MTYPE263_INTRA + 0},
  557.     {"0 0001 00",   SYM_MCBPC,  MTYPE263_INTRA_Q + 0},
  558.     {"End"}
  559. };
  560. static  struct vlc_entry long_mcbpc263[] = {        // Starts with "0 0000 0"
  561.     {"00 0000 0",  SYM_ESCAPE, TAB263_LONG_STARTCODE},  // Note: no COD=0 preceeds startcode
  562.     
  563.     {"000 1",       SYM_MCBPC_STUFFING,  MTYPE263_STUFFING},
  564.     {"010 1",       SYM_MCBPC,  MTYPE263_INTER_Q + 3},
  565.     {"101",         SYM_MCBPC,  MTYPE263_INTER4V + 3},
  566.     {"100",         SYM_MCBPC,  MTYPE263_INTRA + 1},
  567.     {"011",         SYM_MCBPC,  MTYPE263_INTRA + 2},
  568.     {"11",          SYM_MCBPC,  MTYPE263_INTRA + 3},
  569.     {"010 0",       SYM_MCBPC,  MTYPE263_INTRA_Q + 1},
  570.     {"001 1",       SYM_MCBPC,  MTYPE263_INTRA_Q + 2},
  571.     {"001 0",       SYM_MCBPC,  MTYPE263_INTRA_Q + 3},
  572.     {"End"}
  573. };
  574. static  struct vlc_entry long_startcode263[] = {    // Starts with "0000 0000 0000 0"
  575.     {"000 0",       SYM_ESCAPE,     TAB263_ZEROS_AND_START},
  576.     {"000 1",       SYM_STARTCODE,  MTYPE263_STARTCODE},
  577.     {"End"}
  578. };
  579. // Handle startcodes preceded by 1 to 7 zeros
  580. // Starts with 17 zeros
  581. // CJG 8.13.96: added line containing "0000 0001"
  582. //   Deals with Intel's padding more than 7 bits of zeros (8) after last macroblock in row.
  583. //    This does not conform to H.263, and we may want to remove it after(if) Intel fixes
  584. //    their video coder.  This change was interop tested in San Jose with all other vendors.
  585. static  struct vlc_entry zeros_and_start263[] = {
  586.     {"1",           SYM_STARTCODE,  MTYPE263_STARTCODE},
  587.     {"01",          SYM_STARTCODE,  MTYPE263_STARTCODE},
  588.     {"001",         SYM_STARTCODE,  MTYPE263_STARTCODE},
  589.     {"0001",        SYM_STARTCODE,  MTYPE263_STARTCODE},
  590.     {"0000 1",      SYM_STARTCODE,  MTYPE263_STARTCODE},
  591.     {"0000 01",     SYM_STARTCODE,  MTYPE263_STARTCODE},
  592.     {"0000 001",    SYM_STARTCODE,  MTYPE263_STARTCODE},
  593.     {"0000 0001",   SYM_STARTCODE,  MTYPE263_STARTCODE},
  594.     {"End"}
  595. };
  596. static  struct vlc_entry intra_mcbpc263[] = {
  597.     {"0000 0000",   SYM_ESCAPE, TAB263_LONG_MCBPC_INTRA},
  598.     
  599.     {"1",           SYM_MCBPC,  MTYPE263_INTRA + 0},
  600.     {"001",         SYM_MCBPC,  MTYPE263_INTRA + 1},
  601.     {"010",         SYM_MCBPC,  MTYPE263_INTRA + 2},
  602.     {"011",         SYM_MCBPC,  MTYPE263_INTRA + 3},
  603.     
  604.     {"0001",        SYM_MCBPC,  MTYPE263_INTRA_Q + 0},
  605.     {"0000 01",     SYM_MCBPC,  MTYPE263_INTRA_Q + 1},
  606.     {"0000 10",     SYM_MCBPC,  MTYPE263_INTRA_Q + 2},
  607.     {"0000 11",     SYM_MCBPC,  MTYPE263_INTRA_Q + 3},
  608.     {"End"}
  609. };
  610. static  struct vlc_entry long_intra_mcbpc263[] = {  // Starts with "0000 0000"
  611.     {" 0000 0",    SYM_ESCAPE,  TAB263_LONG_STARTCODE},
  612.     
  613.     {" 1",          SYM_MCBPC_STUFFING,  MTYPE263_STUFFING},
  614.     {"End"}
  615. };
  616. static  struct vlc_entry modb263[] = {
  617.     {"0",   SYM_MODB,   0},
  618.     {"10",  SYM_MODB,   1},
  619.     {"11",  SYM_MODB,   2},
  620.     {"End"}
  621. };
  622. static  struct vlc_entry cbpy263[] = {
  623.     {"0011",    SYM_CBPY,   0xf },
  624.     {"0010 1",  SYM_CBPY,   0xe },
  625.     {"0010 0",  SYM_CBPY,   0xd },
  626.     {"1001",    SYM_CBPY,   0xc },
  627.     
  628.     {"0001 1",  SYM_CBPY,   0xb },
  629.     {"0111",    SYM_CBPY,   0xa },
  630.     {"0000 10", SYM_CBPY,   0x9 },
  631.     {"1011",    SYM_CBPY,   0x8 },
  632.     
  633.     {"0001 0",  SYM_CBPY,   0x7 },
  634.     {"0000 11", SYM_CBPY,   0x6 },
  635.     {"0101",    SYM_CBPY,   0x5 },
  636.     {"1010",    SYM_CBPY,   0x4 },
  637.     
  638.     {"0100",    SYM_CBPY,   0x3 },
  639.     {"1000",    SYM_CBPY,   0x2 },
  640.     {"0110",    SYM_CBPY,   0x1 },
  641.     {"11",      SYM_CBPY,   0x0 },
  642.     {"End"}
  643. };
  644. static  struct vlc_entry intra_cbpy263[] = {
  645.     {"0011",    SYM_CBPY,   0x0 },
  646.     {"0010 1",  SYM_CBPY,   0x1 },
  647.     {"0010 0",  SYM_CBPY,   0x2 },
  648.     {"1001",    SYM_CBPY,   0x3 },
  649.     
  650.     {"0001 1",  SYM_CBPY,   0x4 },
  651.     {"0111",    SYM_CBPY,   0x5 },
  652.     {"0000 10", SYM_CBPY,   0x6 },
  653.     {"1011",    SYM_CBPY,   0x7 },
  654.     
  655.     {"0001 0",  SYM_CBPY,   0x8 },
  656.     {"0000 11", SYM_CBPY,   0x9 },
  657.     {"0101",    SYM_CBPY,   0xa },
  658.     {"1010",    SYM_CBPY,   0xb },
  659.     
  660.     {"0100",    SYM_CBPY,   0xc },
  661.     {"1000",    SYM_CBPY,   0xd },
  662.     {"0110",    SYM_CBPY,   0xe },
  663.     {"11",      SYM_CBPY,   0xf },
  664.     {"End"}
  665. };
  666. static  struct vlc_entry dquant263[] = {
  667.     {"00",      SYM_DQUANT, -1},
  668.     {"01",      SYM_DQUANT, -2},
  669.     {"10",      SYM_DQUANT, 1},
  670.     {"11",      SYM_DQUANT, 2},
  671.     {"End"}
  672. };
  673. static  struct vlc_entry mvd263[] = {
  674.     {"0000 0",      SYM_ESCAPE, TAB263_LONG_MVD},
  675.     
  676.     {"0000 1001",   SYM_MVD,    -6},
  677.     {"0000 1011",   SYM_MVD,    -5},
  678.     
  679.     {"0000 111",    SYM_MVD,    -4},
  680.     {"0001 1",      SYM_MVD,    -3},
  681.     {"0011",        SYM_MVD,    -2},
  682.     {"011",         SYM_MVD,    -1},
  683.     
  684.     {"1",           SYM_MVD,    0},
  685.     {"010",         SYM_MVD,    1},
  686.     {"0010",        SYM_MVD,    2},
  687.     {"0001 0",      SYM_MVD,    3},
  688.     
  689.     {"0000 110",    SYM_MVD,    4},
  690.     {"0000 1010",   SYM_MVD,    5},
  691.     {"0000 1000",   SYM_MVD,    6},
  692.     {"End"}
  693. };
  694. static  struct vlc_entry long_mvd263[] = {  // Starts with "0000 0"
  695.     {"000 0010 1",    SYM_MVD,    -32},
  696.     {"000 0011 1",    SYM_MVD,    -31},
  697.     {"000 0101",      SYM_MVD,    -30},
  698.     {"000 0111",      SYM_MVD,    -29},
  699.     
  700.     {"000 1001",      SYM_MVD,    -28},
  701.     {"000 1011",      SYM_MVD,    -27},
  702.     {"000 1101",      SYM_MVD,    -26},
  703.     {"000 1111",      SYM_MVD,    -25},
  704.     
  705.     {"001 001",       SYM_MVD,    -24},
  706.     {"001 011",       SYM_MVD,    -23},
  707.     {"001 101",       SYM_MVD,    -22},
  708.     {"001 111",       SYM_MVD,    -21},
  709.     
  710.     {"010 001",       SYM_MVD,    -20},
  711.     {"010 011",       SYM_MVD,    -19},
  712.     {"010 101",       SYM_MVD,    -18},
  713.     {"010 111",       SYM_MVD,    -17},
  714.     
  715.     {"011 001",       SYM_MVD,    -16},
  716.     {"011 011",       SYM_MVD,    -15},
  717.     {"011 101",       SYM_MVD,    -14},
  718.     {"011 111",       SYM_MVD,    -13},
  719.     
  720.     {"100 001",       SYM_MVD,    -12},
  721.     {"100 011",       SYM_MVD,    -11},
  722.     {"100 11",        SYM_MVD,    -10},
  723.     {"101 01",        SYM_MVD,    -9},
  724.     
  725.     {"101 11",        SYM_MVD,    -8},
  726.     {"111",           SYM_MVD,    -7},
  727.     {"110",           SYM_MVD,    7},
  728.     
  729.     {"101 10",        SYM_MVD,    8},
  730.     {"101 00",        SYM_MVD,    9},
  731.     {"100 10",        SYM_MVD,    10},
  732.     {"100 010",       SYM_MVD,    11},
  733.     
  734.     {"100 000",       SYM_MVD,    12},
  735.     {"011 110",       SYM_MVD,    13},
  736.     {"011 100",       SYM_MVD,    14},
  737.     {"011 010",       SYM_MVD,    15},
  738.     
  739.     {"011 000",       SYM_MVD,    16},
  740.     {"010 110",       SYM_MVD,    17},
  741.     {"010 100",       SYM_MVD,    18},
  742.     {"010 010",       SYM_MVD,    19},
  743.     
  744.     {"010 000",       SYM_MVD,    20},
  745.     {"001 110",       SYM_MVD,    21},
  746.     {"001 100",       SYM_MVD,    22},
  747.     {"001 010",       SYM_MVD,    23},
  748.     
  749.     {"001 000",       SYM_MVD,    24},
  750.     {"000 1110",      SYM_MVD,    25},
  751.     {"000 1100",      SYM_MVD,    26},
  752.     {"000 1010",      SYM_MVD,    27},
  753.     
  754.     {"000 1000",      SYM_MVD,    28},
  755.     {"000 0110",      SYM_MVD,    29},
  756.     {"000 0100",      SYM_MVD,    30},
  757.     {"000 0011 0",    SYM_MVD,    31},
  758.     {"End"}
  759. };
  760. static  struct vlc_entry finished_263blk[] = {
  761.     {" ",       SYM_EXIT,   FINISHED_LAST_BLOCK,    0},
  762.     {"End"}
  763. };
  764. static  struct vlc_entry tcoef[] = {
  765.     {"0001",        SYM_ESCAPE, TAB263_TCOEF_0001,      0},
  766.     {"0000 1",      SYM_ESCAPE, TAB263_TCOEF_0000_1,    0},
  767.     {"0000 0",      SYM_ESCAPE, TAB263_TCOEF_0000_0,    0},
  768.     {"100",         0,      1,      0},
  769.     {"101",         0,      -1,     0},
  770.     {"1111 0",      0,      2,      0},
  771.     {"1111 1",      0,      -2,     0},
  772.     {"0101 010",    0,      3,      0},
  773.     {"0101 011",    0,      -3,     0},
  774.     {"0010 1110",   0,      4,      0},
  775.     {"0010 1111",   0,      -4,     0},
  776.     {"1100",        1,      1,      0},
  777.     {"1101",        1,      -1,     0},
  778.     {"0101 000",    1,      2,      0},
  779.     {"0101 001",    1,      -2,     0},
  780.     {"1110 0",      2,      1,      0},
  781.     {"1110 1",      2,      -1,     0},
  782.     {"0110 10",     3,      1,      0},
  783.     {"0110 11",     3,      -1,     0},
  784.     {"0110 00",     4,      1,      0},
  785.     {"0110 01",     4,      -1,     0},
  786.     {"0101 10",     5,      1,      0},
  787.     {"0101 11",     5,      -1,     0},
  788.     {"0100 110",    6,      1,      0},
  789.     {"0100 111",    6,      -1,     0},
  790.     {"0100 100",    7,      1,      0},
  791.     {"0100 101",    7,      -1,     0},
  792.     {"0100 010",    8,      1,      0},
  793.     {"0100 011",    8,      -1,     0},
  794.     {"0100 000",    9,      1,      0},
  795.     {"0100 001",    9,      -1,     0},
  796.     {"0010 1100",   10,     1,      0},
  797.     {"0010 1101",   10,     -1,     0},
  798.     {"0010 1010",   11,     1,      0},
  799.     {"0010 1011",   11,     -1,     0},
  800.     {"0010 1000",   12,     1,      0},
  801.     {"0010 1001",   12,     -1,     0},
  802.     {"0111 0",      0 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  803.     {"0111 1",      0 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  804.     {"0011 110",    1 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  805.     {"0011 111",    1 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  806.     {"0011 100",    2 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  807.     {"0011 101",    2 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  808.     {"0011 010",    3 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  809.     {"0011 011",    3 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  810.     {"0011 000",    4 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  811.     {"0011 001",    4 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  812.     {"0010 0110",   5 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  813.     {"0010 0111",   5 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  814.     {"0010 0100",   6 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  815.     {"0010 0101",   6 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  816.     {"0010 0010",   7 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  817.     {"0010 0011",   7 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  818.     {"0010 0000",   8 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  819.     {"0010 0001",   8 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  820.     {"End"}
  821. };
  822. static  struct vlc_entry tcoef_0001[] = {
  823.     {" 1111 0",     0,      5,      0},
  824.     {" 1111 1",     0,      -5,     0},
  825.     {" 0010 10",    0,      6,      0},
  826.     {" 0010 11",    0,      -6,     0},
  827.     {" 0010 00",    0,      7,      0},
  828.     {" 0010 01",    0,      -7,     0},
  829.     {" 1110 0",     1,      3,      0},
  830.     {" 1110 1",     1,      -3,     0},
  831.     {" 1101 0",     2,      2,      0},
  832.     {" 1101 1",     2,      -2,     0},
  833.     {" 0001 10",    3,      2,      0},
  834.     {" 0001 11",    3,      -2,     0},
  835.     {" 0001 00",    4,      2,      0},
  836.     {" 0001 01",    4,      -2,     0},
  837.     {" 1100 0",     13,     1,      0},
  838.     {" 1100 1",     13,     -1,     0},
  839.     {" 1011 0",     14,     1,      0},
  840.     {" 1011 1",     14,     -1,     0},
  841.     {" 0000 10",    15,     1,      0},
  842.     {" 0000 11",    15,     -1,     0},
  843.     {" 0000 00",    16,     1,      0},
  844.     {" 0000 01",    16,     -1,     0},
  845.     {" 1010 0",     9 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  846.     {" 1010 1",     9 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  847.     {" 1001 0",     10 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  848.     {" 1001 1",     10 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  849.     {" 1000 0",     11 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  850.     {" 1000 1",     11 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  851.     {" 0111 0",     12 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  852.     {" 0111 1",     12 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  853.     {" 0110 0",     13 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  854.     {" 0110 1",     13 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  855.     {" 0101 0",     14 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  856.     {" 0101 1",     14 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  857.     {" 0100 0",     15 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  858.     {" 0100 1",     15 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  859.     {" 0011 0",     16 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  860.     {" 0011 1",     16 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  861.     {"End"}
  862. };
  863. static  struct vlc_entry tcoef_0000_1[] = {
  864.     {"000 010",     0,      8,      0},
  865.     {"000 011",     0,      -8,     0},
  866.     {"000 000",     0,      9,      0},
  867.     {"000 001",     0,      -9,     0},
  868.     {"111 10",      17,     1,      0},
  869.     {"111 11",      17,     -1,     0},
  870.     {"111 00",      18,     1,      0},
  871.     {"111 01",      18,     -1,     0},
  872.     {"110 10",      19,     1,      0},
  873.     {"110 11",      19,     -1,     0},
  874.     {"110 00",      20,     1,      0},
  875.     {"110 01",      20,     -1,     0},
  876.     {"101 10",      21,     1,      0},
  877.     {"101 11",      21,     -1,     0},
  878.     {"101 00",      22,     1,      0},
  879.     {"101 01",      22,     -1,     0},
  880.     {"100 10",      0 + LAST263_RUNVAL,     2,      ST263_DIFF_LAST},
  881.     {"100 11",      0 + LAST263_RUNVAL,     -2,     ST263_DIFF_LAST},
  882.     {"100 00",      17 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  883.     {"100 01",      17 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  884.     {"011 10",      18 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  885.     {"011 11",      18 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  886.     {"011 00",      19 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  887.     {"011 01",      19 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  888.     {"010 10",      20 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  889.     {"010 11",      20 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  890.     {"010 00",      21 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  891.     {"010 01",      21 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  892.     {"001 10",      22 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  893.     {"001 11",      22 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  894.     {"001 00",      23 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  895.     {"001 01",      23 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  896.     {"000 10",      24 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  897.     {"000 11",      24 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  898.     {"End"}
  899. };
  900. static  struct vlc_entry tcoef_0000_0[] = {
  901.     {"11",          SYM_ESCAPE, TAB263_ESC_RUN,     0},
  902.     
  903.     {"000 1110",    0,      10,     0},
  904.     {"000 1111",    0,      -10,    0},
  905.     {"000 1100",    0,      11,     0},
  906.     {"000 1101",    0,      -11,    0},
  907.     {"100 0000",    0,      12,     0},
  908.     {"100 0001",    0,      -12,    0},
  909.     {"011 110",     1,      4,      0},
  910.     {"011 111",     1,      -4,     0},
  911.     {"100 0010",    1,      5,      0},
  912.     {"100 0011",    1,      -5,     0},
  913.     {"101 0000 0",  1,      6,      0},
  914.     {"101 0000 1",  1,      -6,     0},
  915.     {"011 100",     2,      3,      0},
  916.     {"011 101",     2,      -3,     0},
  917.     {"101 0001 0",  2,      4,      0},
  918.     {"101 0001 1",  2,      -4,     0},
  919.     {"011 010",     3,      3,      0},
  920.     {"011 011",     3,      -3,     0},
  921.     {"101 0010 0",  4,      3,      0},
  922.     {"101 0010 1",  4,      -3,     0},
  923.     {"011 000",     5,      2,      0},
  924.     {"011 001",     5,      -2,     0},
  925.     {"101 0011 0",  5,      3,      0},
  926.     {"101 0011 1",  5,      -3,     0},
  927.     {"010 110",     6,      2,      0},
  928.     {"010 111",     6,      -2,     0},
  929.     {"101 0100 0",  6,      3,      0},
  930.     {"101 0100 1",  6,      -3,     0},
  931.     {"010 100",     7,      2,      0},
  932.     {"010 101",     7,      -2,     0},
  933.     {"010 010",     8,      2,      0},
  934.     {"010 011",     8,      -2,     0},
  935.     {"010 000",     9,      2,      0},
  936.     {"010 001",     9,      -2,     0},
  937.     {"101 0101 0",  10,     2,      0},
  938.     {"101 0101 1",  10,     -2,     0},
  939.     {"100 0100",    23,     1,      0},
  940.     {"100 0101",    23,     -1,     0},
  941.     {"100 0110",    24,     1,      0},
  942.     {"100 0111",    24,     -1,     0},
  943.     {"101 0110 0",  25,     1,      0},
  944.     {"101 0110 1",  25,     -1,     0},
  945.     {"101 0111 0",  26,     1,      0},
  946.     {"101 0111 1",  26,     -1,     0},
  947.     {"000 1010",    0 + LAST263_RUNVAL,     3,      ST263_DIFF_LAST},
  948.     {"000 1011",    0 + LAST263_RUNVAL,     -3,     ST263_DIFF_LAST},
  949.     {"000 1000",    1 + LAST263_RUNVAL,     2,      ST263_DIFF_LAST},
  950.     {"000 1001",    1 + LAST263_RUNVAL,     -2,     ST263_DIFF_LAST},
  951.     {"001 110",     25 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  952.     {"001 111",     25 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  953.     {"001 100",     26 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  954.     {"001 101",     26 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  955.     {"001 010",     27 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  956.     {"001 011",     27 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  957.     {"001 000",     28 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  958.     {"001 001",     28 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  959.     {"100 1000",    29 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  960.     {"100 1001",    29 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  961.     {"100 1010",    30 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  962.     {"100 1011",    30 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  963.     {"100 1100",    31 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  964.     {"100 1101",    31 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  965.     {"100 1110",    32 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  966.     {"100 1111",    32 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  967.     {"101 1000 0",  33 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  968.     {"101 1000 1",  33 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  969.     {"101 1001 0",  34 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  970.     {"101 1001 1",  34 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  971.     {"101 1010 0",  35 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  972.     {"101 1010 1",  35 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  973.     {"101 1011 0",  36 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  974.     {"101 1011 1",  36 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  975.     {"101 1100 0",  37 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  976.     {"101 1100 1",  37 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  977.     {"101 1101 0",  38 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  978.     {"101 1101 1",  38 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  979.     {"101 1110 0",  39 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  980.     {"101 1110 1",  39 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  981.     {"101 1111 0",  40 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  982.     {"101 1111 1",  40 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  983.     {"End"}
  984. };
  985. static  struct vlc_entry esc263_run[] = {
  986.     {"FLC"},
  987.     {"0 00 0000",   SYM_ESC_RUN,    0,  -ST263_DIFF_ESC_LEVEL,  63},
  988.     {"1 00 0000",   SYM_ESC_RUN,
  989.                     0 + LAST263_RUNVAL,
  990.                     ST263_DIFF_LAST - ST263_DIFF_ESC_LEVEL,
  991.                     63 + LAST263_RUNVAL},
  992.     {"End"}
  993. };
  994. /* ESC_LEVEL: Levels 0 and -128 are not allowed */
  995. static  struct vlc_entry esc263_level[] = {
  996.     {"FLC"},
  997.     {"0000 0001",   SYM_ESC_LEVEL,      1,  ST263_DIFF_ESC_LEVEL,   127},
  998.     {"1000 0001",   SYM_ESC_LEVEL,   -127,  ST263_DIFF_ESC_LEVEL,   -1},
  999.     {"End"}
  1000. };
  1001. // INTRA DC coeff:  Levels 0 and 255 not allowed; level 128 repr. by 255
  1002. // Indicate run=0 by setting type=0
  1003. static  struct vlc_entry intra263_dc[] = {
  1004.     {"FLC"},
  1005.     {"0000 0001",   0,      1,      ST263_DIFF_INTRA_DC,    127},
  1006.     {"1111 1111",   0,      128,    ST263_DIFF_INTRA_DC,    128},
  1007.     {"1000 0001",   0,      129,    ST263_DIFF_INTRA_DC,    254},
  1008.     {"End"}
  1009. };
  1010. ////////////////  Tables for H.263+  //////////////////
  1011. static  struct vlc_entry modb263plus[] = {
  1012.     {"0",   SYM_MODB,   0},
  1013.     {"10",  SYM_MODB,   1},
  1014.     {"110", SYM_MODB,   2},
  1015.     {"111", SYM_MODB,   3},
  1016.     {"End"}
  1017. };
  1018. static  struct vlc_entry intra_mode263plus[] = {
  1019.     {"0",   SYM_INTRA_MODE,   0},
  1020.     {"10",  SYM_INTRA_MODE,   1},
  1021.     {"11",  SYM_INTRA_MODE,   2},
  1022.     {"End"}
  1023. };
  1024. static  struct vlc_entry tcoef_plus[] = {
  1025.     {"0001",        SYM_ESCAPE, TAB263PLUS_TCOEF_0001,      0},
  1026.     {"0000 1",      SYM_ESCAPE, TAB263PLUS_TCOEF_0000_1,    0},
  1027.     {"0000 0",      SYM_ESCAPE, TAB263PLUS_TCOEF_0000_0,    0},
  1028.     {"100",         0,      1,      0},
  1029.     {"101",         0,      -1,     0},
  1030.     {"1111 0",      1,      1,      0},
  1031.     {"1111 1",      1,      -1,     0},
  1032.     {"0101 010",    3,      1,      0},
  1033.     {"0101 011",    3,      -1,     0},
  1034.     {"0010 1110",   5,      1,      0},
  1035.     {"0010 1111",   5,      -1,     0},
  1036.     {"1100",        0,      2,      0},
  1037.     {"1101",        0,      -2,     0},
  1038.     {"0101 000",    1,      2,      0},
  1039.     {"0101 001",    1,      -2,     0},
  1040.     {"1110 0",      0,      3,      0},
  1041.     {"1110 1",      0,      -3,     0},
  1042.     {"0110 10",     0,      5,      0},
  1043.     {"0110 11",     0,      -5,     0},
  1044.     {"0110 00",     0,      4,      0},
  1045.     {"0110 01",     0,      -4,     0},
  1046.     {"0101 10",     2,      1,      0},
  1047.     {"0101 11",     2,      -1,     0},
  1048.     {"0100 110",    4,      1,      0},
  1049.     {"0100 111",    4,      -1,     0},
  1050.     {"0100 100",    0,      8,      0},
  1051.     {"0100 101",    0,      -8,     0},
  1052.     {"0100 010",    0,      7,      0},
  1053.     {"0100 011",    0,      -7,     0},
  1054.     {"0100 000",    0,      6,      0},
  1055.     {"0100 001",    0,      -6,     0},
  1056.     {"0010 1100",   0,      9,      0},
  1057.     {"0010 1101",   0,      -9,     0},
  1058.     {"0010 1010",   2,      2,      0},
  1059.     {"0010 1011",   2,      -2,     0},
  1060.     {"0010 1000",   1,      3,      0},
  1061.     {"0010 1001",   1,      -3,     0},
  1062.     {"0111 0",      0 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1063.     {"0111 1",      0 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1064.     {"0011 110",    1 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1065.     {"0011 111",    1 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1066.     {"0011 100",    2 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1067.     {"0011 101",    2 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1068.     {"0011 010",    3 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1069.     {"0011 011",    3 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1070.     {"0011 000",    0 + LAST263_RUNVAL,     2,      ST263_DIFF_LAST},
  1071.     {"0011 001",    0 + LAST263_RUNVAL,     -2,     ST263_DIFF_LAST},
  1072.     {"0010 0110",   5 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1073.     {"0010 0111",   5 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1074.     {"0010 0100",   6 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1075.     {"0010 0101",   6 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1076.     {"0010 0010",   4 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1077.     {"0010 0011",   4 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1078.     {"0010 0000",   0 + LAST263_RUNVAL,     3,      ST263_DIFF_LAST},
  1079.     {"0010 0001",   0 + LAST263_RUNVAL,     -3,     ST263_DIFF_LAST},
  1080.     {"End"}
  1081. };
  1082. static  struct vlc_entry tcoef_0001_plus[] = {
  1083.     {" 1111 0",     7,      1,      0},
  1084.     {" 1111 1",     7,      -1,     0},
  1085.     {" 0010 10",    8,      1,      0},
  1086.     {" 0010 11",    8,      -1,     0},
  1087.     {" 0010 00",    9,      1,      0},
  1088.     {" 0010 01",    9,      -1,     0},
  1089.     {" 1110 0",     1,      4,      0},
  1090.     {" 1110 1",     1,      -4,     0},
  1091.     {" 1101 0",     3,      2,      0},
  1092.     {" 1101 1",     3,      -2,     0},
  1093.     {" 0001 10",    4,      2,      0},
  1094.     {" 0001 11",    4,      -2,     0},
  1095.     {" 0001 00",    5,      2,      0},
  1096.     {" 0001 01",    5,      -2,     0},
  1097.     {" 1100 0",     6,      1,      0},
  1098.     {" 1100 1",     6,      -1,     0},
  1099.     {" 1011 0",     0,      10,     0},
  1100.     {" 1011 1",     0,      -10,    0},
  1101.     {" 0000 10",    0,      12,     0},
  1102.     {" 0000 11",    0,      -12,    0},
  1103.     {" 0000 00",    0,      11,     0},
  1104.     {" 0000 01",    0,      -11,    0},
  1105.     {" 1010 0",     9 + LAST263_RUNVAL,     1,      ST263_DIFF_LAST},
  1106.     {" 1010 1",     9 + LAST263_RUNVAL,     -1,     ST263_DIFF_LAST},
  1107.     {" 1001 0",     10 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1108.     {" 1001 1",     10 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1109.     {" 1000 0",     11 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1110.     {" 1000 1",     11 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1111.     {" 0111 0",     12 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1112.     {" 0111 1",     12 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1113.     {" 0110 0",     13 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1114.     {" 0110 1",     13 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1115.     {" 0101 0",      8 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1116.     {" 0101 1",      8 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1117.     {" 0100 0",      7 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1118.     {" 0100 1",      7 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1119.     {" 0011 0",      0 + LAST263_RUNVAL,    4,      ST263_DIFF_LAST},
  1120.     {" 0011 1",      0 + LAST263_RUNVAL,    -4,     ST263_DIFF_LAST},
  1121.     {"End"}
  1122. };
  1123. static  struct vlc_entry tcoef_0000_1_plus[] = {
  1124.     {"000 010",     10,     1,      0},
  1125.     {"000 011",     10,     -1,     0},
  1126.     {"000 000",     11,     1,      0},
  1127.     {"000 001",     11,     -1,     0},
  1128.     {"111 10",       0,     18,     0},
  1129.     {"111 11",       0,     -18,    0},
  1130.     {"111 00",       0,     17,     0},
  1131.     {"111 01",       0,     -17,    0},
  1132.     {"110 10",       0,     16,     0},
  1133.     {"110 11",       0,     -16,    0},
  1134.     {"110 00",       0,     15,     0},
  1135.     {"110 01",       0,     -15,    0},
  1136.     {"101 10",       0,     14,     0},
  1137.     {"101 11",       0,     -14,    0},
  1138.     {"101 00",       0,     13,     0},
  1139.     {"101 01",       0,     -13,    0},
  1140.     {"100 10",      14 + LAST263_RUNVAL,     1,     ST263_DIFF_LAST},
  1141.     {"100 11",      14 + LAST263_RUNVAL,     -1,    ST263_DIFF_LAST},
  1142.     {"100 00",      17 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1143.     {"100 01",      17 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1144.     {"011 10",      18 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1145.     {"011 11",      18 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1146.     {"011 00",      16 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1147.     {"011 01",      16 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1148.     {"010 10",      15 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1149.     {"010 11",      15 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1150.     {"010 00",       2 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1151.     {"010 01",       2 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1152.     {"001 10",       1 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1153.     {"001 11",       1 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1154.     {"001 00",       0 + LAST263_RUNVAL,    6,      ST263_DIFF_LAST},
  1155.     {"001 01",       0 + LAST263_RUNVAL,    -6,     ST263_DIFF_LAST},
  1156.     {"000 10",       0 + LAST263_RUNVAL,    5,      ST263_DIFF_LAST},
  1157.     {"000 11",       0 + LAST263_RUNVAL,    -5,     ST263_DIFF_LAST},
  1158.     {"End"}
  1159. };
  1160. static  struct vlc_entry tcoef_0000_0_plus[] = {
  1161.     {"11",          SYM_ESCAPE, TAB263_ESC_RUN,     0},
  1162.     
  1163.     {"000 1110",    4,       3,    0},
  1164.     {"000 1111",    4,       -3,   0},
  1165.     {"000 1100",    9,      2,     0},
  1166.     {"000 1101",    9,      -2,    0},
  1167.     {"100 0000",   13,      1,     0},
  1168.     {"100 0001",   13,      -1,    0},
  1169.     {"011 110",     1,      5,      0},
  1170.     {"011 111",     1,      -5,     0},
  1171.     {"100 0010",    1,      6,      0},
  1172.     {"100 0011",    1,      -6,     0},
  1173.     {"101 0000 0",  1,      7,      0},
  1174.     {"101 0000 1",  1,      -7,     0},
  1175.     {"011 100",     2,      3,      0},
  1176.     {"011 101",     2,      -3,     0},
  1177.     {"101 0001 0",  3,      4,      0},
  1178.     {"101 0001 1",  3,      -4,     0},
  1179.     {"011 010",     3,      3,      0},
  1180.     {"011 011",     3,      -3,     0},
  1181.     {"101 0010 0",  5,      3,      0},
  1182.     {"101 0010 1",  5,      -3,     0},
  1183.     {"011 000",     6,      2,      0},
  1184.     {"011 001",     6,      -2,     0},
  1185.     {"101 0011 0",  0,      25,      0},
  1186.     {"101 0011 1",  0,      -25,     0},
  1187.     {"010 110",     7,      2,      0},
  1188.     {"010 111",     7,      -2,     0},
  1189.     {"101 0100 0",  0,      24,      0},
  1190.     {"101 0100 1",  0,      -24,     0},
  1191.     {"010 100",     8,      2,      0},
  1192.     {"010 101",     8,      -2,     0},
  1193.     {"010 010",     2,      4,      0},
  1194.     {"010 011",     2,      -4,     0},
  1195.     {"010 000",    12,      1,      0},
  1196.     {"010 001",    12,      -1,     0},
  1197.     {"101 0101 0",  0,     23,      0},
  1198.     {"101 0101 1",  0,     -23,     0},
  1199.     {"100 0100",    0,     20,      0},
  1200.     {"100 0101",    0,     -20,     0},
  1201.     {"100 0110",    0,     19,      0},
  1202.     {"100 0111",    0,     -19,     0},
  1203.     {"101 0110 0",  0,     22,      0},
  1204.     {"101 0110 1",  0,     -22,     0},
  1205.     {"101 0111 0",  0,     21,      0},
  1206.     {"101 0111 1",  0,     -21,     0},
  1207.     {"000 1010",    20 + LAST263_RUNVAL,     1,     ST263_DIFF_LAST},
  1208.     {"000 1011",    20 + LAST263_RUNVAL,     -1,    ST263_DIFF_LAST},
  1209.     {"000 1000",    19 + LAST263_RUNVAL,     1,     ST263_DIFF_LAST},
  1210.     {"000 1001",    19 + LAST263_RUNVAL,     -1,    ST263_DIFF_LAST},
  1211.     {"001 110",      4 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1212.     {"001 111",      4 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1213.     {"001 100",      3 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1214.     {"001 101",      3 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1215.     {"001 010",      1 + LAST263_RUNVAL,    3,      ST263_DIFF_LAST},
  1216.     {"001 011",      1 + LAST263_RUNVAL,    -3,     ST263_DIFF_LAST},
  1217.     {"001 000",      0 + LAST263_RUNVAL,    7,      ST263_DIFF_LAST},
  1218.     {"001 001",      0 + LAST263_RUNVAL,    -7,     ST263_DIFF_LAST},
  1219.     {"100 1000",     2 + LAST263_RUNVAL,    3,      ST263_DIFF_LAST},
  1220.     {"100 1001",     2 + LAST263_RUNVAL,    -3,     ST263_DIFF_LAST},
  1221.     {"100 1010",     1 + LAST263_RUNVAL,    4,      ST263_DIFF_LAST},
  1222.     {"100 1011",     1 + LAST263_RUNVAL,    -4,     ST263_DIFF_LAST},
  1223.     {"100 1100",     0 + LAST263_RUNVAL,    9,      ST263_DIFF_LAST},
  1224.     {"100 1101",     0 + LAST263_RUNVAL,    -9,     ST263_DIFF_LAST},
  1225.     {"100 1110",     0 + LAST263_RUNVAL,    8,      ST263_DIFF_LAST},
  1226.     {"100 1111",     0 + LAST263_RUNVAL,    -8,     ST263_DIFF_LAST},
  1227.     {"101 1000 0",  21 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1228.     {"101 1000 1",  21 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1229.     {"101 1001 0",  22 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1230.     {"101 1001 1",  22 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1231.     {"101 1010 0",  23 + LAST263_RUNVAL,    1,      ST263_DIFF_LAST},
  1232.     {"101 1010 1",  23 + LAST263_RUNVAL,    -1,     ST263_DIFF_LAST},
  1233.     {"101 1011 0",   7 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1234.     {"101 1011 1",   7 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1235.     {"101 1100 0",   6 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1236.     {"101 1100 1",   6 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1237.     {"101 1101 0",   5 + LAST263_RUNVAL,    2,      ST263_DIFF_LAST},
  1238.     {"101 1101 1",   5 + LAST263_RUNVAL,    -2,     ST263_DIFF_LAST},
  1239.     {"101 1110 0",   3 + LAST263_RUNVAL,    3,      ST263_DIFF_LAST},
  1240.     {"101 1110 1",   3 + LAST263_RUNVAL,    -3,     ST263_DIFF_LAST},
  1241.     {"101 1111 0",   0 + LAST263_RUNVAL,    10,     ST263_DIFF_LAST},
  1242.     {"101 1111 1",   0 + LAST263_RUNVAL,    -10,    ST263_DIFF_LAST},
  1243.     {"End"}
  1244. };
  1245. #endif