OutputVlc.h
上传用户:szklck
上传日期:2007-01-22
资源大小:925k
文件大小:5k
源码类别:

图形图像处理

开发平台:

Visual C++

  1. //OutputVlc.h gives the VlcTable and the declaration of output functions.
  2. #ifndef _INC_OutputVlcAPI
  3. #define _INC_OutputVlcAPI
  4. /* type definitions for variable length code table entries */
  5. #define sign(a)        ((a) < 0 ? 1 : 0)
  6. /* Motion vectors */
  7. static VLCtable mvtab[33] =
  8. {
  9.   {1,1}, {1,2}, {1,3}, {1,4}, {3,6}, {5,7}, {4,7}, {3,7},
  10.   {11,9}, {10,9}, {9,9}, {17,10}, {16,10}, {15,10}, {14,10}, {13,10},
  11.   {12,10}, {11,10}, {10,10}, {9,10}, {8,10}, {7,10}, {6,10}, {5,10},
  12.   {4,10}, {7,11}, {6,11}, {5,11}, {4,11}, {3,11}, {2,11}, {3,12},
  13.   {2,12}
  14. };
  15. /* CBPCM (MCBPC) Indexing by cbpc in first two bits, mode in last two.
  16.  CBPC as in table 4/H.263, MB type (mode): 3 = 01, 4 = 10.
  17.  Example: cbpc = 01 and mode = 4 gives index = 0110 = 6. */
  18. static VLCtable cbpcm_intra_tab[15] =
  19. {
  20.   {0x01,9}, {0x01,1}, {0x01,4}, {0x00,0},
  21.   {0x00,0}, {0x01,3}, {0x01,6}, {0x00,0},
  22.   {0x00,0}, {0x02,3}, {0x02,6}, {0x00,0},
  23.   {0x00,0}, {0x03,3}, {0x03,6}
  24. };
  25. /* CBPCM inter.
  26.    Addressing: 5 bit ccmmm (cc = CBPC, mmm = mode (1-4 binary)) */
  27. static VLCtable cbpcm_inter_tab[29] =
  28. {
  29.   {1,1}, {3,3}, {2,3}, {3,5}, {4,6}, {1,9}, {0,0}, {0,0},
  30.   {3,4}, {7,7}, {5,7}, {4,8}, {4,9}, {0,0}, {0,0}, {0,0},
  31.   {2,4}, {6,7}, {4,7}, {3,8}, {3,9}, {0,0}, {0,0}, {0,0},
  32.   {5,6}, {5,9}, {5,8}, {3,7}, {2,9}
  33. };
  34. /* CBPY. Straightforward indexing */
  35. static VLCtable cbpy_tab[16] =
  36. {
  37.   {3,4}, {5,5}, {4,5}, {9,4}, {3,5}, {7,4}, {2,6}, {11,4},
  38.   {2,5}, {3,6}, {5,4}, {10,4}, {4,4}, {8,4}, {6,4}, {3,2}
  39. };
  40. /* DCT coefficients. Four tables, two for last = 0, two for last = 1.
  41.    the sign bit must be added afterwards. */
  42. /* first part of coeffs for last = 0. Indexed by [run][level-1] */
  43. static VLCtable coeff_tab0[2][12] =
  44. {
  45.   /* run = 0 */
  46.   {
  47.     {0x02, 2}, {0x0f, 4}, {0x15, 6}, {0x17, 7},
  48.     {0x1f, 8}, {0x25, 9}, {0x24, 9}, {0x21,10},
  49.     {0x20,10}, {0x07,11}, {0x06,11}, {0x20,11}
  50.   },
  51.   /* run = 1 */
  52.   {
  53.     {0x06, 3}, {0x14, 6}, {0x1e, 8}, {0x0f,10},
  54.     {0x21,11}, {0x50,12}, {0x00, 0}, {0x00, 0},
  55.     {0x00, 0}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  56.   }
  57. };
  58. /* rest of coeffs for last = 0. indexing by [run-2][level-1] */
  59. static VLCtable coeff_tab1[25][4] =
  60. {
  61.   /* run = 2 */
  62.   {
  63.     {0x0e, 4}, {0x1d, 8}, {0x0e,10}, {0x51,12}
  64.   },
  65.   /* run = 3 */
  66.   {
  67.     {0x0d, 5}, {0x23, 9}, {0x0d,10}, {0x00, 0}
  68.   },
  69.   /* run = 4-26 */
  70.   {
  71.     {0x0c, 5}, {0x22, 9}, {0x52,12}, {0x00, 0}
  72.   },
  73.   {
  74.     {0x0b, 5}, {0x0c,10}, {0x53,12}, {0x00, 0}
  75.   },
  76.   {
  77.     {0x13, 6}, {0x0b,10}, {0x54,12}, {0x00, 0}
  78.   },
  79.   {
  80.     {0x12, 6}, {0x0a,10}, {0x00, 0}, {0x00, 0}
  81.   },
  82.   {
  83.     {0x11, 6}, {0x09,10}, {0x00, 0}, {0x00, 0}
  84.   },
  85.   {
  86.     {0x10, 6}, {0x08,10}, {0x00, 0}, {0x00, 0}
  87.   },
  88.   {
  89.     {0x16, 7}, {0x55,12}, {0x00, 0}, {0x00, 0}
  90.   },
  91.   {
  92.     {0x15, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  93.   },
  94.   {
  95.     {0x14, 7}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  96.   },
  97.   {
  98.     {0x1c, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  99.   },
  100.   {
  101.     {0x1b, 8}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  102.   },
  103.   {
  104.     {0x21, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  105.   },
  106.   {
  107.     {0x20, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  108.   },
  109.   {
  110.     {0x1f, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  111.   },
  112.   {
  113.     {0x1e, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  114.   },
  115.   {
  116.     {0x1d, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  117.   },
  118.   {
  119.     {0x1c, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  120.   },
  121.   {
  122.     {0x1b, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  123.   },
  124.   {
  125.     {0x1a, 9}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  126.   },
  127.   {
  128.     {0x22,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  129.   },
  130.   {
  131.     {0x23,11}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  132.   },
  133.   {
  134.     {0x56,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  135.   },
  136.   {
  137.     {0x57,12}, {0x00, 0}, {0x00, 0}, {0x00, 0}
  138.   }
  139. };
  140. /* first coeffs of last = 1. indexing by [run][level-1] */
  141. static VLCtable coeff_tab2[2][3] =
  142. {
  143.   /* run = 0 */
  144.   {
  145.     {0x07, 4}, {0x19, 9}, {0x05,11}
  146.   },
  147.   /* run = 1 */
  148.   {
  149.     {0x0f, 6}, {0x04,11}, {0x00, 0}
  150.   }
  151. };
  152. /* rest of coeffs for last = 1. indexing by [run-2] */
  153. static VLCtable coeff_tab3[40] =
  154. {
  155.   {0x0e, 6}, {0x0d, 6}, {0x0c, 6},
  156.   {0x13, 7}, {0x12, 7}, {0x11, 7}, {0x10, 7},
  157.   {0x1a, 8}, {0x19, 8}, {0x18, 8}, {0x17, 8},
  158.   {0x16, 8}, {0x15, 8}, {0x14, 8}, {0x13, 8},
  159.   {0x18, 9}, {0x17, 9}, {0x16, 9}, {0x15, 9},    
  160.   {0x14, 9}, {0x13, 9}, {0x12, 9}, {0x11, 9},    
  161.   {0x07,10}, {0x06,10}, {0x05,10}, {0x04,10},    
  162.   {0x24,11}, {0x25,11}, {0x26,11}, {0x27,11},    
  163.   {0x58,12}, {0x59,12}, {0x5a,12}, {0x5b,12},    
  164.   {0x5c,12}, {0x5d,12}, {0x5e,12}, {0x5f,12},
  165.   {0x00, 0}               
  166. };
  167. extern int put_mv (int);
  168. extern int put_cbpcm_intra (int, int);
  169. extern int put_cbpcm_inter (int, int);
  170. extern int put_cbpy (int, int);
  171. extern int put_coeff (int last, int run, int level);
  172.  void initbits();
  173. extern void putbits (int n, int value);
  174. extern int alignbits ();
  175. extern int bitcount();
  176. #endif //!_INC_OutputVlcAPI