Mercurial > mplayer.hg
annotate liba52/bitstream.h @ 29888:5c39c41f38e8
Deobfuscate the special hack to disable cache for live555.
Cache can not be used for it, since it does not provide any
data stream, the data is provided to the demuxer "behind
MPlayer's back".
author | reimar |
---|---|
date | Tue, 17 Nov 2009 19:23:55 +0000 |
parents | f01023c524c3 |
children |
rev | line source |
---|---|
3394 | 1 /* |
2 * bitstream.h | |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
3 * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org> |
3394 | 4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca> |
5 * | |
6 * This file is part of a52dec, a free ATSC A-52 stream decoder. | |
7 * See http://liba52.sourceforge.net/ for updates. | |
8 * | |
14991
07f1e7669772
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
10489
diff
changeset
|
9 * Modified for use with MPlayer, changes contained in liba52_changes.diff. |
18783 | 10 * detailed changelog at http://svn.mplayerhq.hu/mplayer/trunk/ |
14991
07f1e7669772
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
10489
diff
changeset
|
11 * $Id$ |
07f1e7669772
Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents:
10489
diff
changeset
|
12 * |
3394 | 13 * a52dec is free software; you can redistribute it and/or modify |
14 * it under the terms of the GNU General Public License as published by | |
15 * the Free Software Foundation; either version 2 of the License, or | |
16 * (at your option) any later version. | |
17 * | |
18 * a52dec is distributed in the hope that it will be useful, | |
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
21 * GNU General Public License for more details. | |
22 * | |
23 * You should have received a copy of the GNU General Public License | |
24 * along with this program; if not, write to the Free Software | |
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
26 */ | |
27 | |
10489
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
28 /* code from ffmpeg/libavcodec */ |
10067
f9eac474eb74
this is a important patch for hpux 11.00, because it avoid the
diego
parents:
7255
diff
changeset
|
29 #if defined(__sparc__) || defined(hpux) |
7255
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
30 /* |
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
31 * the alt bitstream reader performs unaligned memory accesses; that doesn't work |
10067
f9eac474eb74
this is a important patch for hpux 11.00, because it avoid the
diego
parents:
7255
diff
changeset
|
32 * on sparc/hpux. For now, disable ALT_BITSTREAM_READER. |
7255
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
33 */ |
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
34 #undef ALT_BITSTREAM_READER |
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
35 #else |
3570 | 36 // alternative (faster) bitstram reader (reades upto 3 bytes over the end of the input) |
37 #define ALT_BITSTREAM_READER | |
10082 | 38 |
23873 | 39 /* used to avoid misaligned exceptions on some archs (alpha, ...) */ |
28359
4e0196e827db
HAVE_ARMV6 is defined to 0/1, use the preprocessor directive accordingly.
diego
parents:
28290
diff
changeset
|
40 #if ARCH_X86 || HAVE_ARMV6 |
10082 | 41 # define unaligned32(a) (*(uint32_t*)(a)) |
42 #else | |
43 # ifdef __GNUC__ | |
27454
2eb96f52529a
Drop av_always_inline definition. It is duplicated from libavutil and
diego
parents:
27453
diff
changeset
|
44 static inline uint32_t unaligned32(const void *v) { |
10082 | 45 struct Unaligned { |
46 uint32_t i; | |
47 } __attribute__((packed)); | |
48 | |
49 return ((const struct Unaligned *) v)->i; | |
50 } | |
51 # elif defined(__DECC) | |
52 static inline uint32_t unaligned32(const void *v) { | |
53 return *(const __unaligned uint32_t *) v; | |
54 } | |
55 # else | |
56 static inline uint32_t unaligned32(const void *v) { | |
57 return *(const uint32_t *) v; | |
58 } | |
59 # endif | |
60 #endif //!ARCH_X86 | |
61 | |
7255
34b5a0b12558
The ALT_BITSTREAM_READER code does not work on SPARC, because the code accesses
jkeil
parents:
4053
diff
changeset
|
62 #endif |
18721
722ac20fac5f
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
18720
diff
changeset
|
63 |
3394 | 64 /* (stolen from the kernel) */ |
29401
f01023c524c3
Replace WORDS_BIGENDIAN by HAVE_BIGENDIAN in all internal code.
diego
parents:
29264
diff
changeset
|
65 #if HAVE_BIGENDIAN |
3394 | 66 |
67 # define swab32(x) (x) | |
68 | |
69 #else | |
70 | |
71 # if defined (__i386__) | |
72 | |
73 # define swab32(x) __i386_swab32(x) | |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
74 static inline const uint32_t __i386_swab32(uint32_t x) |
3394 | 75 { |
76 __asm__("bswap %0" : "=r" (x) : "0" (x)); | |
77 return x; | |
78 } | |
79 | |
80 # else | |
81 | |
10489
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
82 # define swab32(x) __generic_swab32(x) |
27454
2eb96f52529a
Drop av_always_inline definition. It is duplicated from libavutil and
diego
parents:
27453
diff
changeset
|
83 static inline const uint32_t __generic_swab32(uint32_t x) |
10489
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
84 { |
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
85 return ((((uint8_t*)&x)[0] << 24) | (((uint8_t*)&x)[1] << 16) | |
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
86 (((uint8_t*)&x)[2] << 8) | (((uint8_t*)&x)[3])); |
b7a6edb6100e
Changed swab32 from macro to inline function, this fixes compilation on alpha (with gcc2.95). Based on patch by KotH
alex
parents:
10313
diff
changeset
|
87 } |
3394 | 88 # endif |
89 #endif | |
90 | |
3570 | 91 #ifdef ALT_BITSTREAM_READER |
92 extern int indx; | |
93 #endif | |
3394 | 94 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
95 void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf); |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
96 uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits); |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
97 int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits); |
3394 | 98 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
99 static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits) |
3394 | 100 { |
3570 | 101 #ifdef ALT_BITSTREAM_READER |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
102 uint32_t result= swab32( unaligned32(((uint8_t *)state->buffer_start)+(indx>>3)) ); |
3570 | 103 |
104 result<<= (indx&0x07); | |
105 result>>= 32 - num_bits; | |
106 indx+= num_bits; | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
28359
diff
changeset
|
107 |
3570 | 108 return result; |
109 #else | |
3394 | 110 uint32_t result; |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
28359
diff
changeset
|
111 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
112 if (num_bits < state->bits_left) { |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
113 result = (state->current_word << (32 - state->bits_left)) >> (32 - num_bits); |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
114 state->bits_left -= num_bits; |
3394 | 115 return result; |
116 } | |
117 | |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
118 return a52_bitstream_get_bh (state, num_bits); |
3570 | 119 #endif |
3394 | 120 } |
121 | |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
122 static inline void bitstream_skip(a52_state_t * state, int num_bits) |
4053
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
123 { |
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
124 #ifdef ALT_BITSTREAM_READER |
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
125 indx+= num_bits; |
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
126 #else |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
127 bitstream_get(state, num_bits); |
4053
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
128 #endif |
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
129 } |
75415651e3b9
bitstream_skip() instead of bitstream_get() if possible
michael
parents:
3570
diff
changeset
|
130 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
131 static inline int32_t bitstream_get_2 (a52_state_t * state, uint32_t num_bits) |
3394 | 132 { |
3570 | 133 #ifdef ALT_BITSTREAM_READER |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
134 int32_t result= swab32( unaligned32(((uint8_t *)state->buffer_start)+(indx>>3)) ); |
3570 | 135 |
136 result<<= (indx&0x07); | |
137 result>>= 32 - num_bits; | |
138 indx+= num_bits; | |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
28359
diff
changeset
|
139 |
3570 | 140 return result; |
141 #else | |
3394 | 142 int32_t result; |
29264
e83eef58b30a
Remove all kind of trailing whitespaces from all MPlayer's files.
bircoph
parents:
28359
diff
changeset
|
143 |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
144 if (num_bits < state->bits_left) { |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
145 result = (((int32_t)state->current_word) << (32 - state->bits_left)) >> (32 - num_bits); |
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
146 state->bits_left -= num_bits; |
3394 | 147 return result; |
148 } | |
149 | |
18720
4bad7f00556e
sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents:
14991
diff
changeset
|
150 return a52_bitstream_get_bh_2 (state, num_bits); |
3570 | 151 #endif |
3394 | 152 } |