annotate liba52/bitstream.c @ 27478:158a04c991d6

Do not refer to libcdio and liblzo as external in the help output. External libraries are the default, no need to stress this fact.
author diego
date Mon, 01 Sep 2008 17:48:45 +0000
parents 0783dd397f74
children e83eef58b30a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
1 /*
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
2 * bitstream.c
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
3 * Copyright (C) 2000-2002 Michel Lespinasse <walken@zoy.org>
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
5 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
6 * This file is part of a52dec, a free ATSC A-52 stream decoder.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
7 * See http://liba52.sourceforge.net/ for updates.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
8 *
14991
07f1e7669772 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 3570
diff changeset
9 * Modified for use with MPlayer, changes contained in liba52_changes.diff.
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 18721
diff changeset
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: 3570
diff changeset
11 * $Id$
07f1e7669772 Mark modified files as such to comply more closely with GPL ¡ø2a.
diego
parents: 3570
diff changeset
12 *
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
13 * a52dec is free software; you can redistribute it and/or modify
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
14 * it under the terms of the GNU General Public License as published by
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
15 * the Free Software Foundation; either version 2 of the License, or
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
16 * (at your option) any later version.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
17 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
18 * a52dec is distributed in the hope that it will be useful,
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
21 * GNU General Public License for more details.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
22 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
23 * You should have received a copy of the GNU General Public License
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
24 * along with this program; if not, write to the Free Software
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
25 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
26 */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
27
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
28 #include "config.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
29
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
30 #include <inttypes.h>
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
31
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
32 #include "a52.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
33 #include "a52_internal.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
34 #include "bitstream.h"
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
35
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
36 #define BUFFER_SIZE 4096
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
37
3570
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
38 #ifdef ALT_BITSTREAM_READER
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
39 int indx=0;
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
40 #endif
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
41
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
42 void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
43 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
44 int align;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
45
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
46 align = (long)buf & 3;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
47 state->buffer_start = (uint32_t *) (buf - align);
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
48 state->bits_left = 0;
3570
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
49 #ifdef ALT_BITSTREAM_READER
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
50 indx=0;
c03e0bb35c16 faster (and simpler) bitstream reader (in C)
michael
parents: 3394
diff changeset
51 #endif
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
52 bitstream_get (state, align * 8);
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
53 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
54
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
55 static inline void bitstream_fill_current (a52_state_t * state)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
56 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
57 uint32_t tmp;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
58
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
59 tmp = *(state->buffer_start++);
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
60 state->current_word = swab32 (tmp);
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
61 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
62
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
63 /*
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
64 * The fast paths for _get is in the
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
65 * bitstream.h header file so it can be inlined.
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
66 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
67 * The "bottom half" of this routine is suffixed _bh
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
68 *
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
69 * -ah
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
70 */
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
71
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
72 uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
73 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
74 uint32_t result;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
75
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
76 num_bits -= state->bits_left;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
77 result = ((state->current_word << (32 - state->bits_left)) >>
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
78 (32 - state->bits_left));
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
79
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
80 bitstream_fill_current (state);
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
81
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
82 if (num_bits != 0)
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
83 result = (result << num_bits) | (state->current_word >> (32 - num_bits));
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
84
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
85 state->bits_left = 32 - num_bits;
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
86
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
87 return result;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
88 }
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
89
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
90 int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits)
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
91 {
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
92 int32_t result;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
93
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
94 num_bits -= state->bits_left;
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
95 result = ((((int32_t)state->current_word) << (32 - state->bits_left)) >>
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
96 (32 - state->bits_left));
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
97
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
98 bitstream_fill_current(state);
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
99
18721
722ac20fac5f sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 18720
diff changeset
100 if (num_bits != 0)
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
101 result = (result << num_bits) | (state->current_word >> (32 - num_bits));
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
102
18720
4bad7f00556e sync with liba52 0.7.4, patch by Emanuele Giaquinta >emanuele.giaquinta ! gmail * com<
rathann
parents: 17566
diff changeset
103 state->bits_left = 32 - num_bits;
3394
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
104
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
105 return result;
35b18ed357c2 imported from liba52 CVS
arpi
parents:
diff changeset
106 }