vlc.h
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:4k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: vlc.h 287 2005-10-07 17:49:26Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __VLC_H
  24. #define __VLC_H
  25. typedef uint16_t vlc;
  26. // item: code[32] bits[16] value[16]
  27. DLL bool_t vlcinit(vlc**, int* size, const void* code, bool_t code32, const uint16_t* data, int num, int escape, int bits);
  28. DLL void vlcdone(vlc**,int* size);
  29. #define vlcget2_pos(code, table, stream, bitpos, tmp, mask, bits)
  30. {
  31. bitload_pos(stream,bitpos);
  32. code = table[bitshow_pos(stream,bitpos,bits)];
  33. tmp = code >> 12;
  34. if (tmp >= 12)
  35. {
  36. bitflush_pos(stream,bitpos,bits);
  37. bitload_pos(stream,bitpos);
  38. tmp = (code >> 10) & 15;
  39. code = (code & 1023) << 3;
  40. code = table[code+bitshow_pos(stream,bitpos,tmp)];
  41. assert((code >> 12) < 12);
  42. tmp = code >> 12;
  43. }
  44. bitflush_pos(stream,bitpos,tmp);
  45. code &= mask;
  46. }
  47. #define vlcget3_pos(code, table, stream, bitpos, tmp, mask, bits)
  48. {
  49. bitload_pos(stream,bitpos);
  50. code = table[bitshow_pos(stream,bitpos,bits)];
  51. tmp = code >> 12;
  52. if (tmp >= 12)
  53. {
  54. const vlc *_table;
  55. bitflush_pos(stream,bitpos,bits);
  56. bitload_pos(stream,bitpos);
  57. tmp = (code >> 10) & 15;
  58. _table = table;
  59. _table += (code & 1023) << 3;
  60. code = _table[bitshow_pos(stream,bitpos,tmp)];
  61. if ((code >> 12) >= 12)
  62. {
  63. bitflush_pos(stream,bitpos,tmp);
  64. bitload_pos(stream,bitpos);
  65. tmp = (code >> 10) & 15;
  66. _table += (code & 1023) << 3;
  67. code = _table[bitshow_pos(stream,bitpos,tmp)];
  68. assert((code >> 12) < 12);
  69. }
  70. tmp = code >> 12;
  71. }
  72. bitflush_pos(stream,bitpos,tmp);
  73. code &= mask;
  74. }
  75. #define DECLARE_VLCGET3(BITS)
  76. static int vlcget3(const vlc* p, bitstream* stream)
  77. {
  78. int n,code;
  79. int bits = BITS;
  80. code = p[bitshow(stream,bits)];
  81. n = code >> 12;
  82. if (n >= 12)
  83. {
  84. bitflush(stream,bits);
  85. bits = (code >> 10) & 15;
  86. p += (code & 1023) << 3;
  87. code = p[bitshow(stream,bits)];
  88. n = code >> 12;
  89. if (n >= 12)
  90. {
  91. bitflush(stream,bits);
  92. bits = (code >> 10) & 15;
  93. p += (code & 1023) << 3;
  94. bitload(stream);
  95. code = p[bitshow(stream,bits)];
  96. n = code >> 12;
  97. assert(n < 12);
  98. }
  99. }
  100. bitflush(stream,n);
  101. return code & 0xFFF;
  102. }
  103. #define DECLARE_VLCGET2(BITS)
  104. static int vlcget2(const vlc* p, bitstream* stream)
  105. {
  106. int n,code;
  107. int bits = BITS;
  108. code = p[bitshow(stream,bits)];
  109. n = code >> 12;
  110. if (n >= 12)
  111. {
  112. bitflush(stream,bits);
  113. bits = (code >> 10) & 15;
  114. p += (code & 1023) << 3;
  115. code = p[bitshow(stream,bits)];
  116. n = code >> 12;
  117. assert(n < 12);
  118. }
  119. bitflush(stream,n);
  120. return code & 0xFFF;
  121. }
  122. #endif