vlc.h
上传用户:enenge
上传日期:2007-01-08
资源大小:96k
文件大小:19k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. #ifndef _VLC_H_
  2. #define _VLC_H_
  3. /* type definitions for variable length code table entries */
  4. typedef struct
  5. {
  6.   U_Int code; /* right justified */
  7.   Int len;
  8. } VLCtable;
  9. /* DC prediction sizes */
  10.  static VLCtable DCtab_lum[13] =
  11. {
  12.   {3,3}, {3,2}, {2,2}, {2,3}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7},
  13.   {1,8}, {1,9}, {1,10}, {1,11}
  14. }; 
  15.  static VLCtable DCtab_chrom[13] =
  16. {
  17.   {3,2}, {2,2}, {1,2}, {1,3}, {1,4}, {1,5}, {1,6}, {1,7}, {1,8},
  18.   {1,9}, {1,10}, {1,11}, {1,12}
  19. }; 
  20.  /* Motion vectors */
  21.  static VLCtable mvtab[33] =
  22. {
  23.   {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
  24.   {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
  25.   {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
  26.   {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
  27.   {2,12}
  28. };
  29. /* MCBPC Indexing by cbpc in first two bits, mode in last two.
  30.  CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10.
  31.  Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */
  32. static VLCtable mcbpc_intra_tab[15] =
  33. {
  34.   {0x01,9}, {0x01,1}, {0x01,4}, {0x00,0},
  35.   {0x00,0}, {0x01,3}, {0x01,6}, {0x00,0},
  36.   {0x00,0}, {0x02,3}, {0x02,6}, {0x00,0},
  37.   {0x00,0}, {0x03,3}, {0x03,6}
  38. };
  39. /* MCBPC inter.
  40.    Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */
  41. static VLCtable mcbpc_inter_tab[29] =
  42. {
  43.   {1,1}, {3,3}, {2,3}, {3,5}, {4,6}, {1,9}, {0,0}, {0,0},
  44.   {3,4}, {7,7}, {5,7}, {4,8}, {4,9}, {0,0}, {0,0}, {0,0},
  45.   {2,4}, {6,7}, {4,7}, {3,8}, {3,9}, {0,0}, {0,0}, {0,0},
  46.   {5,6}, {5,9}, {5,8}, {3,7}, {2,9}
  47. };
  48. static VLCtable mcbpc_sprite_tab[31] =
  49. {
  50.   {1,1}, {0,12}, {2,3}, {3,5}, {4,6}, {3,3}, {12,4}, {1,9},
  51.   {3,4}, {1,12}, {5,7}, {4,8}, {4,9}, {7,7}, {12,5}, {0,0},
  52.   {2,4}, {2,12}, {4,7}, {3,8}, {3,9}, {6,7}, {12,6}, {0,0},
  53.   {5,6}, {3,12}, {5,8}, {3,7}, {2,9}, {5,9}, {12,7}
  54. };
  55. /* MODB table, MW 18-MAY-1998 */
  56.  static VLCtable modb_tab[3] =
  57. {
  58.   {1,1}, {1,2}, {0,2}
  59. }; 
  60. #if 0
  61. /* MCBPC for separate mode */
  62. static VLCtable mcbpc_sep_tab[9] =
  63. {
  64.     {1,1}, {1,3}, {2,3}, {3,3}, {1,4}, {1,6}, {2,6}, {3,6}, {1,9}
  65. };
  66. #endif
  67. /* CBPY. Straightforward indexing */
  68. static VLCtable cbpy_tab[16] =
  69. {
  70.   {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
  71.   {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
  72. };
  73. static VLCtable cbpy_tab3[8] = 
  74.   {
  75.     {3,3},{1,6},{1,5},{2,3},{2,5},{3,5},{1,3},{1,1}
  76.   };
  77. static VLCtable cbpy_tab2[4] = 
  78.   {
  79.     {1,4},{1,3},{1,2},{1,1}
  80.   }; 
  81. /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
  82.    the sign bit must be added afterwards. */
  83. /* first part of coeffs for last = 0. Indexed by [run][level-1] */
  84. static VLCtable coeff_tab0[2][12] =
  85. {
  86.   /* run = 0 */
  87.   {
  88.     {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7},
  89.     {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21,10},
  90.     {0x20,10}, {0x07,11}, {0x06,11}, {0x20,11}
  91.   },
  92.   /* run = 1 */
  93.   {
  94.     {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f,10},
  95.     {0x21,11}, {0x50,12}, {0x00, 0}, {0x00, 0},
  96.     {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  97.   }
  98. };
  99. /* rest of coeffs for last = 0. indexing by [run-2][level-1] */
  100. static VLCtable coeff_tab1[25][4] =
  101. {
  102.   /* run = 2 */
  103.   {
  104.     {0x0e, 4}, {0x1d, 8}, {0x0e,10}, {0x51,12}
  105.   },
  106.   /* run = 3 */
  107.   {
  108.     {0x0d, 5}, {0x23, 9}, {0x0d,10}, {0x00, 0}
  109.   },
  110.   /* run = 4-26 */
  111.   {
  112.     {0x0c, 5}, {0x22, 9}, {0x52,12}, {0x00, 0}
  113.   },
  114.   {
  115.     {0x0b, 5}, {0x0c,10}, {0x53,12}, {0x00, 0}
  116.   },
  117.   {
  118.     {0x13, 6}, {0x0b,10}, {0x54,12}, {0x00, 0}
  119.   },
  120.   {
  121.     {0x12, 6}, {0x0a,10}, {0x00, 0}, {0x00, 0}
  122.   },
  123.   {
  124.     {0x11, 6}, {0x09,10}, {0x00, 0}, {0x00, 0}
  125.   },
  126.   {
  127.     {0x10, 6}, {0x08,10}, {0x00, 0}, {0x00, 0}
  128.   },
  129.   {
  130.     {0x16, 7}, {0x55,12}, {0x00, 0}, {0x00, 0}
  131.   },
  132.   {
  133.     {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  134.   },
  135.   {
  136.     {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  137.   },
  138.   {
  139.     {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  140.   },
  141.   {
  142.     {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  143.   },
  144.   {
  145.     {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  146.   },
  147.   {
  148.     {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  149.   },
  150.   {
  151.     {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  152.   },
  153.   {
  154.     {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  155.   },
  156.   {
  157.     {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  158.   },
  159.   {
  160.     {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  161.   },
  162.   {
  163.     {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  164.   },
  165.   {
  166.     {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  167.   },
  168.   {
  169.     {0x22,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  170.   },
  171.   {
  172.     {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  173.   },
  174.   {
  175.     {0x56,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  176.   },
  177.   {
  178.     {0x57,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  179.   }
  180. };
  181. /* first coeffs of last = 1. indexing by [run][level-1] */
  182. static VLCtable coeff_tab2[2][3] =
  183. {
  184.   /* run = 0 */
  185.   {
  186.     {0x07, 4}, {0x19, 9}, {0x05,11}
  187.   },
  188.   /* run = 1 */
  189.   {
  190.     {0x0f, 6}, {0x04,11}, {0x00, 0}
  191.   }
  192. };
  193. /* rest of coeffs for last = 1. indexing by [run-2] */
  194. static VLCtable coeff_tab3[40] =
  195. {
  196.   {0x0e, 6}, {0x0d, 6}, {0x0c, 6},
  197.   {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7},
  198.   {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8},
  199.   {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8},
  200.   {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9},    
  201.   {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},    
  202.   {0x07,10}, {0x06,10}, {0x05,10}, {0x04,10},    
  203.   {0x24,11}, {0x25,11}, {0x26,11}, {0x27,11},    
  204.   {0x58,12}, {0x59,12}, {0x5a,12}, {0x5b,12},    
  205.   {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12},
  206.   {0x00, 0}               
  207. };
  208. /* New tables for Intra luminance coefficients. Same codewords,
  209.    different meaning */
  210. /* Coeffs for last = 0, run = 0. Indexed by [level-1] */
  211. static VLCtable coeff_tab4[27] =
  212. {
  213.     /* run = 0 */
  214.     {0x02, 2}, {0x06, 3}, {0x0f, 4}, {0x0d, 5},
  215.     {0x0c, 5}, {0x15, 6}, {0x13, 6}, {0x12, 6}, 
  216.     {0x17, 7}, {0x1f, 8}, {0x1e, 8}, {0x1d, 8},
  217.     {0x25, 9}, {0x24, 9}, {0x23, 9}, {0x21, 9},
  218.     {0x21,10}, {0x20,10}, {0x0f,10}, {0x0e,10},
  219.     {0x07,11}, {0x06,11}, {0x20,11}, {0x21,11},
  220.     {0x50,12}, {0x51,12}, {0x52,12}
  221. };
  222. /* Coeffs for last = 0, run = 1. Indexed by [level-1] */
  223. static VLCtable coeff_tab5[10] =
  224. {
  225.     {0x0e, 4}, {0x14, 6}, {0x16, 7}, {0x1c, 8},
  226.     {0x20, 9}, {0x1f, 9}, {0x0d,10}, {0x22,11},
  227.     {0x53,12}, {0x55,12}
  228. };
  229. /* Coeffs for last = 0, run = 2 -> 9. Indexed by [run-2][level-1] */
  230. static VLCtable coeff_tab6[8][5] =
  231. {
  232.     /* run = 2 */
  233.     {
  234. {0x0b, 5}, {0x15, 7}, {0x1e, 9}, {0x0c,10},
  235. {0x56,12}
  236.     },
  237.     /* run = 3 */
  238.     {
  239. {0x11, 6}, {0x1b, 8}, {0x1d, 9}, {0x0b,10},
  240. {0x00, 0}
  241.     },
  242.     /* run = 4 */
  243.     {
  244. {0x10, 6}, {0x22, 9}, {0x0a,10}, {0x00, 0},
  245. {0x00, 0}
  246.     },
  247.     /* run = 5 */
  248.     {
  249. {0x0d, 6}, {0x1c, 9}, {0x08,10}, {0x00, 0},
  250. {0x00, 0}
  251.     },
  252.     /* run = 6 */
  253.     {
  254. {0x12, 7}, {0x1b, 9}, {0x54,12}, {0x00, 0},
  255. {0x00, 0}
  256.     },
  257.     /* run = 7 */
  258.     {
  259. {0x14, 7}, {0x1a, 9}, {0x57,12}, {0x00, 0},
  260. {0x00, 0}
  261.     },
  262.     /* run = 8 */
  263.     {
  264. {0x19, 8}, {0x09,10}, {0x00, 0}, {0x00, 0},
  265. {0x00, 0}
  266.     },
  267.     /* run = 9 */
  268.     {
  269. {0x18, 8}, {0x23,11}, {0x00, 0}, {0x00, 0},
  270. {0x00, 0}
  271.     }
  272. };
  273. /* Coeffs for last = 0, run = 10 -> 14. Indexed by [run-10] */
  274. static VLCtable coeff_tab7[5] =
  275. {
  276.     {0x17, 8}, {0x19, 9}, {0x18, 9}, {0x07,10},
  277.     {0x58,12}
  278. };
  279. /* Coeffs for last = 1, run = 0. Indexed by [level-1] */
  280. static VLCtable coeff_tab8[8] =
  281. {
  282.     {0x07, 4}, {0x0c, 6}, {0x16, 8}, {0x17, 9},
  283.     {0x06,10}, {0x05,11}, {0x04,11}, {0x59,12}
  284. };
  285. /* Coeffs for last = 1, run = 1 -> 6. Indexed by [run-1][level-1] */
  286. static VLCtable coeff_tab9[6][3] =
  287. {
  288.     /* run = 1 */
  289.     {
  290. {0x0f, 6}, {0x16, 9}, {0x05,10}
  291.     },
  292.     /* run = 2 */
  293.     {
  294. {0x0e, 6}, {0x04,10}, {0x00, 0}
  295.     },
  296.     /* run = 3 */
  297.     {
  298. {0x11, 7}, {0x24,11}, {0x00, 0}
  299.     },
  300.     /* run = 4 */
  301.     {
  302. {0x10, 7}, {0x25,11}, {0x00, 0}
  303.     },
  304.     /* run = 5 */
  305.     {
  306. {0x13, 7}, {0x5a,12}, {0x00, 0}
  307.     },
  308.     /* run = 6 */
  309.     {
  310. {0x15, 8}, {0x5b,12}, {0x00, 0}
  311.     }
  312. };
  313. /* Coeffs for last = 1, run = 7 -> 20. Indexed by [run-7] */
  314. static VLCtable coeff_tab10[14] =
  315. {
  316.     {0x14, 8}, {0x13, 8}, {0x1a, 8}, {0x15, 9},
  317.     {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},
  318.     {0x26,11}, {0x27,11}, {0x5c,12}, {0x5d,12},
  319.     {0x5e,12}, {0x5f,12}
  320. };
  321. /* RVLC tables */
  322. /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
  323.    the sign bit must be added afterwards. */
  324. /* DCT  coeffs (intra) for last = 0.  */
  325. /* Indexed by [level-1] */
  326. static VLCtable coeff_RVLCtab1[27] =
  327. {
  328.   /* run = 0 */
  329.     {     0x6,  3},
  330.     {     0x7,  3},
  331.     {     0xa,  4},
  332.     {     0x9,  5},
  333.     {    0x14,  6},
  334.     {    0x15,  6},
  335.     {    0x34,  7},
  336.     {    0x74,  8},
  337.     {    0x75,  8},
  338.     {    0xdd,  9},
  339.     {    0xec,  9},
  340.     {   0x1ec, 10},
  341.     {   0x1ed, 10},
  342.     {   0x1f4, 10},
  343.     {   0x3ec, 11},
  344.     {   0x3ed, 11},
  345.     {   0x3f4, 11},
  346.     {   0x77d, 12},
  347.     {   0x7bc, 12},
  348.     {   0xfbd, 13},
  349.     {   0xfdc, 13},
  350.     {   0x7bd, 12},
  351.     {   0xfdd, 13},
  352.     {  0x1fbd, 14},
  353.     {  0x1fdc, 14},
  354.     {  0x1fdd, 14},
  355.     {  0x1ffc, 15}  
  356. };
  357. /* Indexed by [level-1] */
  358. static VLCtable coeff_RVLCtab2[13] =
  359. {
  360.   /* run = 1 */
  361.     {     0x1,  4},
  362.     {     0x8,  5},
  363.     {    0x2d,  7},
  364.     {    0x6c,  8},
  365.     {    0x6d,  8},
  366.     {    0xdc,  9},
  367.     {   0x1dd, 10},
  368.     {   0x3dc, 11},
  369.     {   0x3dd, 11},
  370.     {   0x77c, 12},
  371.     {   0xfbc, 13},
  372.     {  0x1f7d, 14},
  373.     {  0x1fbc, 14}  
  374. };
  375. /* Indexed by [level-1] */
  376. static VLCtable coeff_RVLCtab3[11] =
  377. {
  378.   /* run = 2 */
  379.     {     0x4,  5},
  380.     {    0x2c,  7},
  381.     {    0xbc,  9},
  382.     {   0x1dc, 10},
  383.     {   0x3bc, 11},
  384.     {   0x3bd, 11},
  385.     {   0xefd, 13},
  386.     {   0xf7c, 13},
  387.     {   0xf7d, 13},
  388.     {  0x1efd, 14},
  389.     {  0x1f7c, 14}  
  390. };
  391. /* Indexed by [level-1] */
  392. static VLCtable coeff_RVLCtab4[9] =
  393. {
  394.   /* run = 3 */
  395.     {     0x5,  5},
  396.     {    0x5c,  8},
  397.     {    0xbd,  9},
  398.     {   0x37d, 11},
  399.     {   0x6fc, 12},
  400.     {   0xefc, 13},
  401.     {  0x1dfd, 14},
  402.     {  0x1efc, 14},
  403.     {  0x1ffd, 15}  
  404. };
  405. /* Indexed by [run-4][level-1] */
  406. static VLCtable coeff_RVLCtab5[2][6] =
  407. {
  408.   /* run = 4 */
  409.   {
  410.     {     0xc,  6},
  411.     {    0x5d,  8},
  412.     {   0x1bd, 10},
  413.     {   0x3fd, 12},
  414.     {   0x6fd, 12},
  415.     {  0x1bfd, 14}  
  416.   },
  417.   /* run = 5 */
  418.   {
  419.     {     0xd,  6},
  420.     {    0x7d,  9},
  421.     {   0x2fc, 11},
  422.     {   0x5fc, 12},
  423.     {  0x1bfc, 14},
  424.     {  0x1dfc, 14}  
  425.   }
  426. };
  427. /* Indexed by [run-6][level-1]       */
  428. static VLCtable coeff_RVLCtab6[2][5] =
  429. {
  430.   /* run = 6 */
  431.   {
  432.     {    0x1c,  7},
  433.     {   0x17c, 10},
  434.     {   0x2fd, 11},
  435.     {   0x5fd, 12},
  436.     {  0x2ffc, 15}  
  437.   },
  438.   /* run = 7 */
  439.   {
  440.     {    0x1d,  7},
  441.     {   0x17d, 10},
  442.     {   0x37c, 11},
  443.     {   0xdfd, 13},
  444.     {  0x2ffd, 15}  
  445.   }
  446. };
  447. /* Indexed by [run-8][level-1] */
  448. static VLCtable coeff_RVLCtab7[2][4] =
  449. {
  450.    /* run = 8 */
  451.   {
  452.     {    0x3c,  8},
  453.     {   0x1bc, 10},
  454.     {   0xbfd, 13},
  455.     {  0x17fd, 14}  
  456.   },
  457.   /* run = 9 */
  458.   {
  459.     {    0x3d,  8},
  460.     {   0x1fd, 11},
  461.     {   0xdfc, 13},
  462.     {  0x37fc, 15}, 
  463.   }
  464. };
  465. /* Indexed by [run-10][level-1] */
  466. static VLCtable coeff_RVLCtab8[3][2] =
  467. {
  468.   /* run = 10 */
  469.   {
  470.     {    0x7c,  9},
  471.     {   0x3fc, 12}  
  472.   },
  473.   /* run = 11 */
  474.   {
  475.     {    0xfc, 10},
  476.     {   0xbfc, 13}  
  477.   },
  478.   /* run = 12 */
  479.   {
  480.     {    0xfd, 10},
  481.     {  0x37fd, 15}  
  482.   }
  483. };
  484. /* Indexed by [level-1] */
  485. static VLCtable coeff_RVLCtab9[7] =
  486. {
  487.   /* run = 13 -> 19 */
  488.     {   0x1fc, 11},
  489.     {   0x7fc, 13},
  490.     {   0x7fd, 13},
  491.     {   0xffc, 14},
  492.     {   0xffd, 14},
  493.     {  0x17fc, 14},
  494.     {  0x3bfc, 15}  
  495. };
  496. /* first coeffs of last = 1. indexing by [run][level-1] */
  497. static VLCtable coeff_RVLCtab10[2][5] =
  498. {
  499.   /* run = 0 */
  500.   {
  501.     {     0xb,  4},
  502.     {    0x78,  8},
  503.     {   0x3f5, 11},
  504.     {   0xfec, 13},
  505.     {  0x1fec, 14}    
  506.   },
  507.   /* run = 1 */
  508.   {
  509.     {    0x12,  5},
  510.     {    0xed,  9},
  511.     {   0x7dc, 12},
  512.     {  0x1fed, 14},
  513.     {  0x3bfd, 15}    
  514.   }
  515. };
  516. static VLCtable coeff_RVLCtab11[3] =
  517. {
  518.   /* run = 2 */
  519.   {    0x13,  5},
  520.   {   0x3f8, 11},
  521.   {  0x3dfc, 15}      
  522. };
  523. static VLCtable coeff_RVLCtab12[11][2] =
  524. {
  525.   /* run = 3 */
  526.   {
  527.     {    0x18,  6},
  528.     {   0x7dd, 12}    
  529.   },
  530.   /* run = 4 */
  531.   {
  532.     {    0x19,  6},
  533.     {   0x7ec, 12}    
  534.   },
  535.   /* run = 5 */
  536.   {
  537.     {    0x22,  6},
  538.     {   0xfed, 13}    
  539.   },
  540.   /* run = 6 */
  541.   {
  542.     {    0x23,  6},
  543.     {   0xff4, 13}    
  544.   },
  545.   /* run = 7 */
  546.   {
  547.     {    0x35,  7},
  548.     {   0xff5, 13}    
  549.   },
  550.   /* run = 8 */
  551.   {
  552.     {    0x38,  7},
  553.     {   0xff8, 13}    
  554.   },
  555.   /* run = 9 */
  556.   {
  557.     {    0x39,  7},
  558.     {   0xff9, 13}    
  559.   },
  560.   /* run = 10 */
  561.   {
  562.     {    0x42,  7},
  563.     {  0x1ff4, 14}    
  564.   },
  565.   /* run = 11 */
  566.   {
  567.     {    0x43,  7},
  568.     {  0x1ff5, 14}    
  569.   },
  570.   /* run = 12 */
  571.   {
  572.     {    0x79,  8},
  573.     {  0x1ff8, 14}    
  574.   },
  575.   /* run = 13 */
  576.   {
  577.     {    0x82,  8},
  578.     {  0x3dfd, 15}    
  579.   }
  580. };
  581. static VLCtable coeff_RVLCtab13[32] =
  582. {
  583.   /* run = 14 -> 45 */
  584.     {    0x83,  8},
  585.     {    0xf4,  9},
  586.     {    0xf5,  9},
  587.     {    0xf8,  9},
  588.     {    0xf9,  9},
  589.     {   0x102,  9},
  590.     {   0x103,  9},
  591.     {   0x1f5, 10},
  592.     {   0x1f8, 10},
  593.     {   0x1f9, 10},
  594.     {   0x202, 10},
  595.     {   0x203, 10},
  596.     {   0x3f9, 11},
  597.     {   0x402, 11},
  598.     {   0x403, 11},
  599.     {   0x7ed, 12},
  600.     {   0x7f4, 12},
  601.     {   0x7f5, 12},
  602.     {   0x7f8, 12},
  603.     {   0x7f9, 12},
  604.     {   0x802, 12},
  605.     {   0x803, 12},
  606.     {  0x1002, 13},
  607.     {  0x1003, 13},
  608.     {  0x1ff9, 14},
  609.     {  0x2002, 14},
  610.     {  0x2003, 14},
  611.     {  0x3efc, 15},
  612.     {  0x3efd, 15},
  613.     {  0x3f7c, 15},
  614.     {  0x3f7d, 15}    
  615. };
  616. /* Coeffs for last = 0, run = 0. Indexed by [level-1] */
  617. static VLCtable coeff_RVLCtab14[19] =
  618. {
  619.   /* run = 0 */
  620.     {     0x6,  3},
  621.     {     0x1,  4},
  622.     {     0x4,  5},
  623.     {    0x1c,  7},
  624.     {    0x3c,  8},
  625.     {    0x3d,  8},
  626.     {    0x7c,  9},
  627.     {    0xfc, 10},
  628.     {    0xfd, 10},
  629.     {   0x1fc, 11},
  630.     {   0x1fd, 11},
  631.     {   0x3fc, 12},
  632.     {   0x7fc, 13},
  633.     {   0x7fd, 13},
  634.     {   0xbfc, 13},
  635.     {   0xbfd, 13},
  636.     {   0xffc, 14},
  637.     {   0xffd, 14},
  638.     {  0x1ffc, 15}    
  639. };
  640. static VLCtable coeff_RVLCtab15[10] =
  641. {
  642.   /* run = 1 */
  643.     {     0x7,  3},
  644.     {     0xc,  6},
  645.     {    0x5c,  8},
  646.     {    0x7d,  9},
  647.     {   0x17c, 10},
  648.     {   0x2fc, 11},
  649.     {   0x3fd, 12},
  650.     {   0xdfc, 13},
  651.     {  0x17fc, 14},
  652.     {  0x17fd, 14}    
  653. };
  654. static VLCtable coeff_RVLCtab16[2][7] =
  655. {
  656.   /* run = 2 */
  657.   {
  658.     {     0xa,  4},
  659.     {    0x1d,  7},
  660.     {    0xbc,  9},
  661.     {   0x2fd, 11},
  662.     {   0x5fc, 12},
  663.     {  0x1bfc, 14},
  664.     {  0x1bfd, 14}    
  665.   },
  666.   /* run = 3 */
  667.   {
  668.     {     0x5,  5},
  669.     {    0x5d,  8},
  670.     {   0x17d, 10},
  671.     {   0x5fd, 12},
  672.     {   0xdfd, 13},
  673.     {  0x1dfc, 14},
  674.     {  0x1ffd, 15}    
  675.   }
  676. };
  677. static VLCtable coeff_RVLCtab17[5] =
  678. {
  679.   /* run = 4 */
  680.     {     0x8,  5},
  681.     {    0x6c,  8},
  682.     {   0x37c, 11},
  683.     {   0xefc, 13},
  684.     {  0x2ffc, 15}    
  685. };
  686. static VLCtable coeff_RVLCtab18[3][4] =
  687. {
  688.   /* run = 5 */
  689.   {
  690.     {     0x9,  5},
  691.     {    0xbd,  9},
  692.     {   0x37d, 11},
  693.     {   0xefd, 13}    
  694.   },
  695.   /* run = 6 */
  696.   {
  697.     {     0xd,  6},
  698.     {   0x1bc, 10},
  699.     {   0x6fc, 12},
  700.     {  0x1dfd, 14}    
  701.   },
  702.   /* run = 7 */
  703.   {
  704.     {    0x14,  6},
  705.     {   0x1bd, 10},
  706.     {   0x6fd, 12},
  707.     {  0x2ffd, 15}    
  708.   }
  709. };
  710. static VLCtable coeff_RVLCtab19[2][3] =
  711. {
  712.   /* run = 8 */
  713.   {
  714.     {    0x15,  6},
  715.     {   0x1dc, 10},
  716.     {   0xf7c, 13}    
  717.   },
  718.   /* run = 9 */
  719.   {
  720.     {    0x2c,  7},
  721.     {   0x1dd, 10},
  722.     {  0x1efc, 14}    
  723.   }
  724. };
  725. static VLCtable coeff_RVLCtab20[8][2] =
  726. {
  727.   /* run = 10 */
  728.   {
  729.     {    0x2d,  7},
  730.     {   0x3bc, 11}    
  731.   },
  732.   /* run = 11 */
  733.   {
  734.     {    0x34,  7},
  735.     {   0x77c, 12}    
  736.   },
  737.   /* run = 12 */
  738.   {
  739.     {    0x6d,  8},
  740.     {   0xf7d, 13}    
  741.   },
  742.   /* run = 13 */
  743.   {
  744.     {    0x74,  8},
  745.     {  0x1efd, 14}    
  746.   },
  747.   /* run = 14 */
  748.   {
  749.     {    0x75,  8},
  750.     {  0x1f7c, 14}    
  751.   },
  752.   /* run = 15 */
  753.   {
  754.     {    0xdc,  9},
  755.     {  0x1f7d, 14}    
  756.   },
  757.   /* run = 16 */
  758.   {
  759.     {    0xdd,  9},
  760.     {  0x1fbc, 14}    
  761.   },
  762.   /* run = 17 */
  763.   {
  764.     {    0xec,  9},
  765.     {  0x37fc, 15}    
  766.   }
  767. };
  768. static VLCtable coeff_RVLCtab21[21] =
  769. {
  770.   /* run = 18 -> 38 */
  771.     {   0x1ec, 10},
  772.     {   0x1ed, 10},
  773.     {   0x1f4, 10},
  774.     {   0x3bd, 11},
  775.     {   0x3dc, 11},
  776.     {   0x3dd, 11},
  777.     {   0x3ec, 11},
  778.     {   0x3ed, 11},
  779.     {   0x3f4, 11},
  780.     {   0x77d, 12},
  781.     {   0x7bc, 12},
  782.     {   0x7bd, 12},
  783.     {   0xfbc, 13},
  784.     {   0xfbd, 13},
  785.     {   0xfdc, 13},
  786.     {   0xfdd, 13},
  787.     {  0x1fbd, 14},
  788.     {  0x1fdc, 14},
  789.     {  0x1fdd, 14},
  790.     {  0x37fd, 15},
  791.     {  0x3bfc, 15}    
  792. };
  793. /* first coeffs of last = 1. indexing by [run][level-1] */
  794. static VLCtable coeff_RVLCtab22[2][5] =
  795. {
  796.   /* run = 0 */
  797.   {
  798.     {     0xb,  4},
  799.     {    0x78,  8},
  800.     {   0x3f5, 11},
  801.     {   0xfec, 13},
  802.     {  0x1fec, 14}    
  803.   },
  804.   /* run = 1 */
  805.   {
  806.     {    0x12,  5},
  807.     {    0xed,  9},
  808.     {   0x7dc, 12},
  809.     {  0x1fed, 14},
  810.     {  0x3bfd, 15}    
  811.   }
  812. };
  813. static VLCtable coeff_RVLCtab23[3] =
  814. {
  815.   /* run = 2 */
  816.   {    0x13,  5},
  817.   {   0x3f8, 11},
  818.   {  0x3dfc, 15}      
  819. };
  820. static VLCtable coeff_RVLCtab24[11][2] =
  821. {
  822.   /* run = 3 */
  823.   {
  824.     {    0x18,  6},
  825.     {   0x7dd, 12}    
  826.   },
  827.   /* run = 4 */
  828.   {
  829.     {    0x19,  6},
  830.     {   0x7ec, 12}    
  831.   },
  832.   /* run = 5 */
  833.   {
  834.     {    0x22,  6},
  835.     {   0xfed, 13}    
  836.   },
  837.   /* run = 6 */
  838.   {
  839.     {    0x23,  6},
  840.     {   0xff4, 13}    
  841.   },
  842.   /* run = 7 */
  843.   {
  844.     {    0x35,  7},
  845.     {   0xff5, 13}    
  846.   },
  847.   /* run = 8 */
  848.   {
  849.     {    0x38,  7},
  850.     {   0xff8, 13}    
  851.   },
  852.   /* run = 9 */
  853.   {
  854.     {    0x39,  7},
  855.     {   0xff9, 13}    
  856.   },
  857.   /* run = 10 */
  858.   {
  859.     {    0x42,  7},
  860.     {  0x1ff4, 14}    
  861.   },
  862.   /* run = 11 */
  863.   {
  864.     {    0x43,  7},
  865.     {  0x1ff5, 14}    
  866.   },
  867.   /* run = 12 */
  868.   {
  869.     {    0x79,  8},
  870.     {  0x1ff8, 14}    
  871.   },
  872.   /* run = 13 */
  873.   {
  874.     {    0x82,  8},
  875.     {  0x3dfd, 15}    
  876.   }
  877. };
  878. static VLCtable coeff_RVLCtab25[32] =
  879. {
  880.   /* run = 14 -> 45 */
  881.     {    0x83,  8},
  882.     {    0xf4,  9},
  883.     {    0xf5,  9},
  884.     {    0xf8,  9},
  885.     {    0xf9,  9},
  886.     {   0x102,  9},
  887.     {   0x103,  9},
  888.     {   0x1f5, 10},
  889.     {   0x1f8, 10},
  890.     {   0x1f9, 10},
  891.     {   0x202, 10},
  892.     {   0x203, 10},
  893.     {   0x3f9, 11},
  894.     {   0x402, 11},
  895.     {   0x403, 11},
  896.     {   0x7ed, 12},
  897.     {   0x7f4, 12},
  898.     {   0x7f5, 12},
  899.     {   0x7f8, 12},
  900.     {   0x7f9, 12},
  901.     {   0x802, 12},
  902.     {   0x803, 12},
  903.     {  0x1002, 13},
  904.     {  0x1003, 13},
  905.     {  0x1ff9, 14},
  906.     {  0x2002, 14},
  907.     {  0x2003, 14},
  908.     {  0x3efc, 15},
  909.     {  0x3efd, 15},
  910.     {  0x3f7c, 15},
  911.     {  0x3f7d, 15}    
  912. };
  913. #endif /* _VLC_H */