mpegencodevlc.h
上传用户:jxp0626
上传日期:2007-01-08
资源大小:102k
文件大小:11k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Unix_Linux

  1. /*
  2.  * RV 1.0 compatible encoder.
  3.  * Copyright (c) 2000 Gerard Lantau.
  4.  *
  5.  * The licence of this code is contained in file LICENCE found in the
  6.  * same archive 
  7.  */
  8. const unsigned char vlc_dc_table[256] = {
  9.     0, 1, 2, 2,
  10.     3, 3, 3, 3,
  11.     4, 4, 4, 4, 4, 4, 4, 4,
  12.     5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  13.     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  14.     6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  15.     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  16.     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  17.     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  18.     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  19.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  20.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  21.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  22.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  23.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  24.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  25.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  26.     8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
  27. };
  28. const unsigned char vlc_dc_lum_code[9] = {
  29.     0x4, 0x0, 0x1, 0x5, 0x6, 0xe, 0x1e, 0x3e, 0x7e,
  30. };
  31. const unsigned char vlc_dc_lum_bits[9] = {
  32.     3, 2, 2, 3, 3, 4, 5, 6, 7,
  33. };
  34. const unsigned char vlc_dc_chroma_code[9] = {
  35.     0x0, 0x1, 0x2, 0x6, 0xe, 0x1e, 0x3e, 0x7e, 0xfe,
  36. };
  37. const unsigned char vlc_dc_chroma_bits[9] = {
  38.     2, 2, 2, 3, 4, 5, 6, 7, 8,
  39. };
  40. /*
  41.  * Copyright (c) 1995 The Regents of the University of California.
  42.  * All rights reserved.
  43.  *
  44.  * Permission to use, copy, modify, and distribute this software and its
  45.  * documentation for any purpose, without fee, and without written agreement is
  46.  * hereby granted, provided that the above copyright notice and the following
  47.  * two paragraphs appear in all copies of this software.
  48.  *
  49.  * IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
  50.  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT
  51.  * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE UNIVERSITY OF
  52.  * CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  53.  *
  54.  * THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
  55.  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
  56.  * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
  57.  * ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATION TO
  58.  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
  59.  */
  60. #define HUFF_MAXRUN 32
  61. #define HUFF_MAXLEVEL 41
  62. static const int huff_maxlevel[HUFF_MAXRUN] = { 41, 19, 6, 5, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 };
  63. static const UINT8 huff_table0[41] = { 0x0, 0x6, 0x8, 0xa, 0xc, 0x4c, 0x42, 0x14, 0x3a, 0x30, 0x26, 0x20, 0x34, 0x32, 0x30, 0x2e, 0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x30, 0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20, 0x30, 0x2e, 0x2c, 0x2a, 0x28, 0x26, 0x24, 0x22, 0x20 };
  64. static const UINT8 huff_bits0[41] = { 0, 3, 5, 6, 8, 9, 9, 11, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16 };
  65. static const UINT8 huff_table1[19] = { 0x0, 0x6, 0xc, 0x4a, 0x18, 0x36, 0x2c, 0x2a, 0x3e, 0x3c, 0x3a, 0x38, 0x36, 0x34, 0x32, 0x26, 0x24, 0x22, 0x20 };
  66. static const UINT8 huff_bits1[19] = { 0, 4, 7, 9, 11, 13, 14, 14, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17 };
  67. static const UINT8 huff_table2[6] = { 0x0, 0xa, 0x8, 0x16, 0x28, 0x28 };
  68. static const UINT8 huff_bits2[6] = { 0, 5, 8, 11, 13, 14 };
  69. static const UINT8 huff_table3[5] = { 0x0, 0xe, 0x48, 0x38, 0x26 };
  70. static const UINT8 huff_bits3[5] = { 0, 6, 9, 13, 14 };
  71. static const UINT8 huff_table4[4] = { 0x0, 0xc, 0x1e, 0x24 };
  72. static const UINT8 huff_bits4[4] = { 0, 6, 11, 13 };
  73. static const UINT8 huff_table5[4] = { 0x0, 0xe, 0x12, 0x24 };
  74. static const UINT8 huff_bits5[4] = { 0, 7, 11, 14 };
  75. static const UINT8 huff_table6[4] = { 0x0, 0xa, 0x3c, 0x28 };
  76. static const UINT8 huff_bits6[4] = { 0, 7, 13, 17 };
  77. static const UINT8 huff_table7[3] = { 0x0, 0x8, 0x2a };
  78. static const UINT8 huff_bits7[3] = { 0, 7, 13 };
  79. static const UINT8 huff_table8[3] = { 0x0, 0xe, 0x22 };
  80. static const UINT8 huff_bits8[3] = { 0, 8, 13 };
  81. static const UINT8 huff_table9[3] = { 0x0, 0xa, 0x22 };
  82. static const UINT8 huff_bits9[3] = { 0, 8, 14 };
  83. static const UINT8 huff_table10[3] = { 0x0, 0x4e, 0x20 };
  84. static const UINT8 huff_bits10[3] = { 0, 9, 14 };
  85. static const UINT8 huff_table11[3] = { 0x0, 0x46, 0x34 };
  86. static const UINT8 huff_bits11[3] = { 0, 9, 17 };
  87. static const UINT8 huff_table12[3] = { 0x0, 0x44, 0x32 };
  88. static const UINT8 huff_bits12[3] = { 0, 9, 17 };
  89. static const UINT8 huff_table13[3] = { 0x0, 0x40, 0x30 };
  90. static const UINT8 huff_bits13[3] = { 0, 9, 17 };
  91. static const UINT8 huff_table14[3] = { 0x0, 0x1c, 0x2e };
  92. static const UINT8 huff_bits14[3] = { 0, 11, 17 };
  93. static const UINT8 huff_table15[3] = { 0x0, 0x1a, 0x2c };
  94. static const UINT8 huff_bits15[3] = { 0, 11, 17 };
  95. static const UINT8 huff_table16[3] = { 0x0, 0x10, 0x2a };
  96. static const UINT8 huff_bits16[3] = { 0, 11, 17 };
  97. static const UINT8 huff_table17[2] = { 0x0, 0x3e };
  98. static const UINT8 huff_bits17[2] = { 0, 13 };
  99. static const UINT8 huff_table18[2] = { 0x0, 0x34 };
  100. static const UINT8 huff_bits18[2] = { 0, 13 };
  101. static const UINT8 huff_table19[2] = { 0x0, 0x32 };
  102. static const UINT8 huff_bits19[2] = { 0, 13 };
  103. static const UINT8 huff_table20[2] = { 0x0, 0x2e };
  104. static const UINT8 huff_bits20[2] = { 0, 13 };
  105. static const UINT8 huff_table21[2] = { 0x0, 0x2c };
  106. static const UINT8 huff_bits21[2] = { 0, 13 };
  107. static const UINT8 huff_table22[2] = { 0x0, 0x3e };
  108. static const UINT8 huff_bits22[2] = { 0, 14 };
  109. static const UINT8 huff_table23[2] = { 0x0, 0x3c };
  110. static const UINT8 huff_bits23[2] = { 0, 14 };
  111. static const UINT8 huff_table24[2] = { 0x0, 0x3a };
  112. static const UINT8 huff_bits24[2] = { 0, 14 };
  113. static const UINT8 huff_table25[2] = { 0x0, 0x38 };
  114. static const UINT8 huff_bits25[2] = { 0, 14 };
  115. static const UINT8 huff_table26[2] = { 0x0, 0x36 };
  116. static const UINT8 huff_bits26[2] = { 0, 14 };
  117. static const UINT8 huff_table27[2] = { 0x0, 0x3e };
  118. static const UINT8 huff_bits27[2] = { 0, 17 };
  119. static const UINT8 huff_table28[2] = { 0x0, 0x3c };
  120. static const UINT8 huff_bits28[2] = { 0, 17 };
  121. static const UINT8 huff_table29[2] = { 0x0, 0x3a };
  122. static const UINT8 huff_bits29[2] = { 0, 17 };
  123. static const UINT8 huff_table30[2] = { 0x0, 0x38 };
  124. static const UINT8 huff_bits30[2] = { 0, 17 };
  125. static const UINT8 huff_table31[2] = { 0x0, 0x36 };
  126. static const UINT8 huff_bits31[2] = { 0, 17 };
  127. static const UINT8 *huff_table[32] = { huff_table0, huff_table1, huff_table2, huff_table3, huff_table4, huff_table5, huff_table6, huff_table7, huff_table8, huff_table9, huff_table10, huff_table11, huff_table12, huff_table13, huff_table14, huff_table15, huff_table16, huff_table17, huff_table18, huff_table19, huff_table20, huff_table21, huff_table22, huff_table23, huff_table24, huff_table25, huff_table26, huff_table27, huff_table28, huff_table29, huff_table30, huff_table31 };
  128. static const UINT8 *huff_bits[32] = { huff_bits0, huff_bits1, huff_bits2, huff_bits3, huff_bits4, huff_bits5, huff_bits6, huff_bits7, huff_bits8, huff_bits9, huff_bits10, huff_bits11, huff_bits12, huff_bits13, huff_bits14, huff_bits15, huff_bits16, huff_bits17, huff_bits18, huff_bits19, huff_bits20, huff_bits21, huff_bits22, huff_bits23, huff_bits24, huff_bits25, huff_bits26, huff_bits27, huff_bits28, huff_bits29, huff_bits30, huff_bits31 };
  129. static const UINT8 mbAddrIncrTable[][2] = {
  130.     {0x0, 0},
  131.     {0x1, 1},
  132.     {0x3, 3},
  133.     {0x2, 3},
  134.     {0x3, 4},
  135.     {0x2, 4},
  136.     {0x3, 5},
  137.     {0x2, 5},
  138.     {0x7, 7},
  139.     {0x6, 7},
  140.     {0xb, 8},
  141.     {0xa, 8},
  142.     {0x9, 8},
  143.     {0x8, 8},
  144.     {0x7, 8},
  145.     {0x6, 8},
  146.     {0x17, 10},
  147.     {0x16, 10},
  148.     {0x15, 10},
  149.     {0x14, 10},
  150.     {0x13, 10},
  151.     {0x12, 10},
  152.     {0x23, 11},
  153.     {0x22, 11},
  154.     {0x21, 11},
  155.     {0x20, 11},
  156.     {0x1f, 11},
  157.     {0x1e, 11},
  158.     {0x1d, 11},
  159.     {0x1c, 11},
  160.     {0x1b, 11},
  161.     {0x1a, 11},
  162.     {0x19, 11},
  163.     {0x18, 11}};
  164. static const UINT8 mbPatTable[][2] = {
  165.     {0x0, 0},
  166.     {0xb, 5},
  167.     {0x9, 5},
  168.     {0xd, 6},
  169.     {0xd, 4},
  170.     {0x17, 7},
  171.     {0x13, 7},
  172.     {0x1f, 8},
  173.     {0xc, 4},
  174.     {0x16, 7},
  175.     {0x12, 7},
  176.     {0x1e, 8},
  177.     {0x13, 5},
  178.     {0x1b, 8},
  179.     {0x17, 8},
  180.     {0x13, 8},
  181.     {0xb, 4},
  182.     {0x15, 7},
  183.     {0x11, 7},
  184.     {0x1d, 8},
  185.     {0x11, 5},
  186.     {0x19, 8},
  187.     {0x15, 8},
  188.     {0x11, 8},
  189.     {0xf, 6},
  190.     {0xf, 8},
  191.     {0xd, 8},
  192.     {0x3, 9},
  193.     {0xf, 5},
  194.     {0xb, 8},
  195.     {0x7, 8},
  196.     {0x7, 9},
  197.     {0xa, 4},
  198.     {0x14, 7},
  199.     {0x10, 7},
  200.     {0x1c, 8},
  201.     {0xe, 6},
  202.     {0xe, 8},
  203.     {0xc, 8},
  204.     {0x2, 9},
  205.     {0x10, 5},
  206.     {0x18, 8},
  207.     {0x14, 8},
  208.     {0x10, 8},
  209.     {0xe, 5},
  210.     {0xa, 8},
  211.     {0x6, 8},
  212.     {0x6, 9},
  213.     {0x12, 5},
  214.     {0x1a, 8},
  215.     {0x16, 8},
  216.     {0x12, 8},
  217.     {0xd, 5},
  218.     {0x9, 8},
  219.     {0x5, 8},
  220.     {0x5, 9},
  221.     {0xc, 5},
  222.     {0x8, 8},
  223.     {0x4, 8},
  224.     {0x4, 9},
  225.     {0x7, 3},
  226.     {0xa, 5}, /* grrr... 61, 62, 63 added - Kevin */
  227.     {0x8, 5},
  228.     {0xc, 6}
  229. };
  230. static const UINT8 mbMotionVectorTable[][2] = {
  231.     {0x19, 11},
  232.     {0x1b, 11},
  233.     {0x1d, 11},
  234.     {0x1f, 11},
  235.     {0x21, 11},
  236.     {0x23, 11},
  237.     {0x13, 10},
  238.     {0x15, 10},
  239.     {0x17, 10},
  240.     {0x7, 8},
  241.     {0x9, 8},
  242.     {0xb, 8},
  243.     {0x7, 7},
  244.     {0x3, 5},
  245.     {0x3, 4},
  246.     {0x3, 3},
  247.     {0x1, 1},
  248.     {0x2, 3},
  249.     {0x2, 4},
  250.     {0x2, 5},
  251.     {0x6, 7},
  252.     {0xa, 8},
  253.     {0x8, 8},
  254.     {0x6, 8},
  255.     {0x16, 10},
  256.     {0x14, 10},
  257.     {0x12, 10},
  258.     {0x22, 11},
  259.     {0x20, 11},
  260.     {0x1e, 11},
  261.     {0x1c, 11},
  262.     {0x1a, 11},
  263.     {0x18, 11}
  264. };
  265. const UINT8 zigzag_direct[64] = {
  266.     0, 1, 8, 16, 9, 2, 3, 10,
  267.     17, 24, 32, 25, 18, 11, 4, 5,
  268.     12, 19, 26, 33, 40, 48, 41, 34,
  269.     27, 20, 13, 6, 7, 14, 21, 28,
  270.     35, 42, 49, 56, 57, 50, 43, 36,
  271.     29, 22, 15, 23, 30, 37, 44, 51,
  272.     58, 59, 52, 45, 38, 31, 39, 46,
  273.     53, 60, 61, 54, 47, 55, 62, 63
  274. };
  275. static unsigned char const default_intra_matrix[64] = {
  276. 8, 16, 19, 22, 26, 27, 29, 34,
  277. 16, 16, 22, 24, 27, 29, 34, 37,
  278. 19, 22, 26, 27, 29, 34, 34, 38,
  279. 22, 22, 26, 27, 29, 34, 37, 40,
  280. 22, 26, 27, 29, 32, 35, 40, 48,
  281. 26, 27, 29, 32, 35, 40, 48, 58,
  282. 26, 27, 29, 34, 38, 46, 56, 69,
  283. 27, 29, 35, 38, 46, 56, 69, 83
  284. };
  285. /* XXX: could hardcode this matrix */
  286. static unsigned char const default_non_intra_matrix[64] = {
  287.     16, 16, 16, 16, 16, 16, 16, 16,
  288.     16, 16, 16, 16, 16, 16, 16, 16,
  289.     16, 16, 16, 16, 16, 16, 16, 16,
  290.     16, 16, 16, 16, 16, 16, 16, 16,
  291.     16, 16, 16, 16, 16, 16, 16, 16,
  292.     16, 16, 16, 16, 16, 16, 16, 16,
  293.     16, 16, 16, 16, 16, 16, 16, 16,
  294.     16, 16, 16, 16, 16, 16, 16, 16,
  295. };
  296. static unsigned char const frame_rate_tab[9] = {
  297.     0, 24, 24, 25, 30, 30, 50, 60, 60,
  298. };