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

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: mpeg_stream.h 271 2005-08-09 08:31:35Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #ifndef __MPEG_STREAM_H
  24. #define __MPEG_STREAM_H
  25. #ifdef MIPS
  26. static INLINE void inlineloadbits( mpeg_decode* dec )
  27. {
  28. int n = dec->bitpos-8;
  29. if (n>=0)
  30. {
  31. const uint8_t* bitptr = dec->bitptr;
  32. int bits = dec->bits;
  33. do
  34. {
  35. bits = (bits << 8) | *bitptr++;
  36. n -= 8;
  37. }
  38. while (n>=0);
  39. dec->bits = bits;
  40. dec->bitptr = bitptr;
  41. dec->bitpos = n+8;
  42. }
  43. }
  44. #else
  45. #define inlineloadbits(dec) loadbits(dec)
  46. #endif
  47. // n=1..24 (or ..32 after bytealign)
  48. #define showbits(dec,n) ((uint32_t)(dec->bits << dec->bitpos) >> (32-(n)))
  49. #define flushbits(dec,n) dec->bitpos += n;
  50. // use this only in boolean expression. to get a 1 bit value use getbits(dec,1)
  51. #define getbits1(dec) ((dec->bits << dec->bitpos++) < 0)
  52. static INLINE int getbits(mpeg_decode* dec,int n)
  53. {
  54. int i = showbits(dec,n);
  55. flushbits(dec,n);
  56. return i;
  57. }
  58. static INLINE int eofbits(mpeg_decode* dec)
  59. {
  60. return dec->bitptr >= dec->bitend;
  61. }
  62. static INLINE void bytealign(mpeg_decode* dec)
  63. {
  64. dec->bitpos = (dec->bitpos + 7) & ~7;
  65. }
  66. static INLINE int bitstonextbyte(mpeg_decode* dec)
  67. {
  68. return 8-(dec->bitpos & 7);
  69. }
  70. static INLINE const uint8_t *bytepos(mpeg_decode* dec)
  71. {
  72. return dec->bitptr - 4 + ((dec->bitpos+7) >> 3);
  73. }
  74. //**************************************************************************
  75. #define loadbits_pos( dec, bitpos )
  76. bitpos -= 8;
  77. if (bitpos >= 0) {
  78. int bits = dec->bits;
  79. const uint8_t* bitptr = dec->bitptr;
  80. do {
  81. bits = (bits << 8) | *bitptr++;
  82. bitpos -= 8;
  83. } while (bitpos>=0);
  84. dec->bits = bits;
  85. dec->bitptr = bitptr;
  86. }
  87. bitpos += 8;
  88. #define showbits_pos(dec,bitpos,n) ((uint32_t)(dec->bits << bitpos) >> (32-(n)))
  89. #define flushbits_pos(dec,bitpos,n) bitpos += n
  90. #define getbits1_pos(dec,bitpos) ((dec->bits << bitpos++) < 0)
  91. #endif