annotate liba52/bitstream.c @ 1352:e8ff4783f188 libavcodec

1) remove TBL support in PPC performance. It's much more useful to use the PMCs, and with Apple's CHUD it's fairly easy too. No reason to keep useless code around 2) make the PPC perf stuff a configure option 3) make put_pixels16_altivec a bit faster by unrolling the loop by 4 patch by (Romain Dolbeau <dolbeau at irisa dot fr>)
author michaelni
date Wed, 09 Jul 2003 20:18:13 +0000
parents 68d0a38bd802
children e101d1cffec6
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.c
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
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
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
24 #include "config.h"
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
25
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
26 #include <inttypes.h>
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
27
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
28 #include "a52.h"
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
29 #include "a52_internal.h"
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
30 #include "bitstream.h"
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
31
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
32 #define BUFFER_SIZE 4096
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
33
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
34 void a52_bitstream_set_ptr (a52_state_t * state, uint8_t * buf)
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
35 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
36 int align;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
37
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
38 align = (long)buf & 3;
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
39 state->buffer_start = (uint32_t *) (buf - align);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
40 state->bits_left = 0;
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
41 state->current_word = 0;
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
42 bitstream_get (state, align * 8);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
43 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
44
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
45 static inline void bitstream_fill_current (a52_state_t * state)
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
46 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
47 uint32_t tmp;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
48
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
49 tmp = *(state->buffer_start++);
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
50 state->current_word = swab32 (tmp);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
51 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
52
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
53 /*
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
54 * The fast paths for _get is in the
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
55 * bitstream.h header file so it can be inlined.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
56 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
57 * The "bottom half" of this routine is suffixed _bh
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
58 *
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
59 * -ah
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
60 */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
61
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
62 uint32_t a52_bitstream_get_bh (a52_state_t * state, uint32_t num_bits)
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
63 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
64 uint32_t result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
65
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
66 num_bits -= state->bits_left;
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
67 result = ((state->current_word << (32 - state->bits_left)) >>
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
68 (32 - state->bits_left));
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
69
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
70 bitstream_fill_current (state);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
71
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
72 if (num_bits != 0)
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
73 result = (result << num_bits) | (state->current_word >> (32 - num_bits));
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
74
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
75 state->bits_left = 32 - num_bits;
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
76
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
77 return result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
78 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
79
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
80 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
81 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
82 int32_t result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
83
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
84 num_bits -= state->bits_left;
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
85 result = ((((int32_t)state->current_word) << (32 - state->bits_left)) >>
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
86 (32 - state->bits_left));
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
87
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
88 bitstream_fill_current(state);
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
89
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
90 if (num_bits != 0)
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
91 result = (result << num_bits) | (state->current_word >> (32 - num_bits));
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
92
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
93 state->bits_left = 32 - num_bits;
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
94
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
95 return result;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
96 }