vld.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:58k
源码类别:

Symbian

开发平台:

Visual C++

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