annotate liba52/bitstream.h @ 2497:69adfbbdcdeb libavcodec

- samples from mplayer ftp in the "adv" profile seem to have profile=2, which isn't the advanced one; and indeed, using adv. profile parser fails. Using normal parser works, and that's what is done - attempt at taking care of stride for NORM2 bitplane decoding - duplication of much code from msmpeg4.c; this code isn't yet used, but goes down as far as the block layer (mainly Transform Type stuff, the remains are wild editing without checking). Unusable yet, and lacks the AC decoding (but a step further in bitstream parsing) patch by anonymous
author michael
date Fri, 04 Feb 2005 02:20:38 +0000
parents 68d0a38bd802
children ef2149182f1c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
1 /*
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
2 * bitstream.h
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
3 * Copyright (C) 2000-2003 Michel Lespinasse <walken@zoy.org>
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
4 * Copyright (C) 1999-2000 Aaron Holtzman <aholtzma@ess.engr.uvic.ca>
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
5 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
6 * This file is part of a52dec, a free ATSC A-52 stream decoder.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
7 * See http://liba52.sourceforge.net/ for updates.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
8 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
9 * a52dec is free software; you can redistribute it and/or modify
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
10 * it under the terms of the GNU General Public License as published by
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
11 * the Free Software Foundation; either version 2 of the License, or
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
12 * (at your option) any later version.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
13 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
14 * a52dec is distributed in the hope that it will be useful,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
17 * GNU General Public License for more details.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
18 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
19 * You should have received a copy of the GNU General Public License
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
20 * along with this program; if not, write to the Free Software
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
22 */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
23
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
24 /* (stolen from the kernel) */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
25 #ifdef WORDS_BIGENDIAN
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
26
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
27 # define swab32(x) (x)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
28
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
29 #else
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
30
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
31 # if 0 && defined (__i386__)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
32
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
33 # define swab32(x) __i386_swab32(x)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
34 static inline const uint32_t __i386_swab32(uint32_t x)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
35 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
36 __asm__("bswap %0" : "=r" (x) : "0" (x));
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
37 return x;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
38 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
39
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
40 # else
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
41
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
42 # define swab32(x)\
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
43 ((((uint8_t*)&x)[0] << 24) | (((uint8_t*)&x)[1] << 16) | \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
44 (((uint8_t*)&x)[2] << 8) | (((uint8_t*)&x)[3]))
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
45
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
46 # endif
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
47 #endif
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
48
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
49 void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
50 uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
51 int32_t a52_bitstream_get_bh_2 (a52_state_t * state, uint32_t num_bits);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
52
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
53 static inline uint32_t bitstream_get (a52_state_t * state, uint32_t num_bits)
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
54 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
55 uint32_t result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
56
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
57 if (num_bits < state->bits_left) {
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
58 result = (state->current_word << (32 - state->bits_left)) >> (32 - num_bits);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
59 state->bits_left -= num_bits;
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
60 return result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
61 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
62
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
63 return a52_bitstream_get_bh (state, num_bits);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
64 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
65
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
66 static inline int32_t bitstream_get_2 (a52_state_t * state, uint32_t num_bits)
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
67 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
68 int32_t result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
69
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
70 if (num_bits < state->bits_left) {
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
71 result = (((int32_t)state->current_word) << (32 - state->bits_left)) >> (32 - num_bits);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
72 state->bits_left -= num_bits;
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
73 return result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
74 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
75
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 332
diff changeset
76 return a52_bitstream_get_bh_2 (state, num_bits);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
77 }