annotate liba52/bit_allocate.c @ 1795:920e6381e1fe libavcodec

2 byte shorter userdata for mpeg4 in the past it was startcode,string,00,7F,startcode now it is startcode,string,stratcode both are mpeg4 compliant, as according to the standard the userdata lasts until the next 00 00 01 (startcode prefix) but some very primitive decoders which simply skip until the first 00 byte and then expect the next valid startcode might fail with the old variant, just a theory though (didnt test if quicktime can decode it now)
author michael
date Sun, 08 Feb 2004 22:52:35 +0000
parents e101d1cffec6
children 0b546eab515d
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 * bit_allocate.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 #include "a52.h"
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
24 #include "a52_internal.h"
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
25
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
26 static int hthtab[3][50] = {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
27 {0x730, 0x730, 0x7c0, 0x800, 0x820, 0x840, 0x850, 0x850, 0x860, 0x860,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
28 0x860, 0x860, 0x860, 0x870, 0x870, 0x870, 0x880, 0x880, 0x890, 0x890,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
29 0x8a0, 0x8a0, 0x8b0, 0x8b0, 0x8c0, 0x8c0, 0x8d0, 0x8e0, 0x8f0, 0x900,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
30 0x910, 0x910, 0x910, 0x910, 0x900, 0x8f0, 0x8c0, 0x870, 0x820, 0x7e0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
31 0x7a0, 0x770, 0x760, 0x7a0, 0x7c0, 0x7c0, 0x6e0, 0x400, 0x3c0, 0x3c0},
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
32 {0x710, 0x710, 0x7a0, 0x7f0, 0x820, 0x830, 0x840, 0x850, 0x850, 0x860,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
33 0x860, 0x860, 0x860, 0x860, 0x870, 0x870, 0x870, 0x880, 0x880, 0x880,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
34 0x890, 0x890, 0x8a0, 0x8a0, 0x8b0, 0x8b0, 0x8c0, 0x8c0, 0x8e0, 0x8f0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
35 0x900, 0x910, 0x910, 0x910, 0x910, 0x900, 0x8e0, 0x8b0, 0x870, 0x820,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
36 0x7e0, 0x7b0, 0x760, 0x770, 0x7a0, 0x7c0, 0x780, 0x5d0, 0x3c0, 0x3c0},
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
37 {0x680, 0x680, 0x750, 0x7b0, 0x7e0, 0x810, 0x820, 0x830, 0x840, 0x850,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
38 0x850, 0x850, 0x860, 0x860, 0x860, 0x860, 0x860, 0x860, 0x860, 0x860,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
39 0x870, 0x870, 0x870, 0x870, 0x880, 0x880, 0x880, 0x890, 0x8a0, 0x8b0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
40 0x8c0, 0x8d0, 0x8e0, 0x8f0, 0x900, 0x910, 0x910, 0x910, 0x900, 0x8f0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
41 0x8d0, 0x8b0, 0x840, 0x7f0, 0x790, 0x760, 0x7a0, 0x7c0, 0x7b0, 0x720}
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
42 };
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
43
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
44 static int8_t baptab[305] = {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
45 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
46 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
47 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
48 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
49 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
50 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, /* 93 padding elems */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
51
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
52 16, 16, 16, 16, 16, 16, 16, 16, 16, 14, 14, 14, 14, 14, 14, 14,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
53 14, 12, 12, 12, 12, 11, 11, 11, 11, 10, 10, 10, 10, 9, 9, 9,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
54 9, 8, 8, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 5, 5, 5,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
55 5, 4, 4, -3, -3, 3, 3, 3, -2, -2, -1, -1, -1, -1, -1, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
56
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
57 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
58 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
59 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
60 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
61 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
62 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
63 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
64 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
65 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
66 0, 0, 0, 0 /* 148 padding elems */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
67 };
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
68
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
69 static int bndtab[30] = {21, 22, 23, 24, 25, 26, 27, 28, 31, 34,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
70 37, 40, 43, 46, 49, 55, 61, 67, 73, 79,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
71 85, 97, 109, 121, 133, 157, 181, 205, 229, 253};
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
72
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
73 static int8_t latab[256] = {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
74 -64, -63, -62, -61, -60, -59, -58, -57, -56, -55, -54, -53,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
75 -52, -52, -51, -50, -49, -48, -47, -47, -46, -45, -44, -44,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
76 -43, -42, -41, -41, -40, -39, -38, -38, -37, -36, -36, -35,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
77 -35, -34, -33, -33, -32, -32, -31, -30, -30, -29, -29, -28,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
78 -28, -27, -27, -26, -26, -25, -25, -24, -24, -23, -23, -22,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
79 -22, -21, -21, -21, -20, -20, -19, -19, -19, -18, -18, -18,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
80 -17, -17, -17, -16, -16, -16, -15, -15, -15, -14, -14, -14,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
81 -13, -13, -13, -13, -12, -12, -12, -12, -11, -11, -11, -11,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
82 -10, -10, -10, -10, -10, -9, -9, -9, -9, -9, -8, -8,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
83 -8, -8, -8, -8, -7, -7, -7, -7, -7, -7, -6, -6,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
84 -6, -6, -6, -6, -6, -6, -5, -5, -5, -5, -5, -5,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
85 -5, -5, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
86 -4, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3, -3,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
87 -3, -3, -3, -2, -2, -2, -2, -2, -2, -2, -2, -2,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
88 -2, -2, -2, -2, -2, -2, -2, -2, -2, -2, -1, -1,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
89 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
90 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
91 -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
92 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
93 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
94 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
95 0, 0, 0, 0
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
96 };
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
97
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
98 #define UPDATE_LEAK() \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
99 do { \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
100 fastleak += fdecay; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
101 if (fastleak > psd + fgain) \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
102 fastleak = psd + fgain; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
103 slowleak += sdecay; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
104 if (slowleak > psd + sgain) \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
105 slowleak = psd + sgain; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
106 } while (0)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
107
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
108 #define COMPUTE_MASK() \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
109 do { \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
110 if (psd > dbknee) \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
111 mask -= (psd - dbknee) >> 2; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
112 if (mask > hth [i >> halfrate]) \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
113 mask = hth [i >> halfrate]; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
114 mask -= snroffset + 128 * deltba[i]; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
115 mask = (mask > 0) ? 0 : ((-mask) >> 5); \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
116 mask -= floor; \
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
117 } while (0)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
118
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
119 void a52_bit_allocate (a52_state_t * state, ba_t * ba, int bndstart,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
120 int start, int end, int fastleak, int slowleak,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
121 expbap_t * expbap)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
122 {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
123 static int slowgain[4] = {0x540, 0x4d8, 0x478, 0x410};
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
124 static int dbpbtab[4] = {0xc00, 0x500, 0x300, 0x100};
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
125 static int floortab[8] = {0x910, 0x950, 0x990, 0x9d0,
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
126 0xa10, 0xa90, 0xb10, 0x1400};
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
127
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
128 int i, j;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
129 uint8_t * exp;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
130 int8_t * bap;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
131 int fdecay, fgain, sdecay, sgain, dbknee, floor, snroffset;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
132 int psd, mask;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
133 int8_t * deltba;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
134 int * hth;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
135 int halfrate;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
136
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
137 halfrate = state->halfrate;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
138 fdecay = (63 + 20 * ((state->bai >> 7) & 3)) >> halfrate; /* fdcycod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
139 fgain = 128 + 128 * (ba->bai & 7); /* fgaincod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
140 sdecay = (15 + 2 * (state->bai >> 9)) >> halfrate; /* sdcycod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
141 sgain = slowgain[(state->bai >> 5) & 3]; /* sgaincod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
142 dbknee = dbpbtab[(state->bai >> 3) & 3]; /* dbpbcod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
143 hth = hthtab[state->fscod];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
144 /*
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
145 * if there is no delta bit allocation, make deltba point to an area
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
146 * known to contain zeroes. baptab+156 here.
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
147 */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
148 deltba = (ba->deltbae == DELTA_BIT_NONE) ? baptab + 156 : ba->deltba;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
149 floor = floortab[state->bai & 7]; /* floorcod */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
150 snroffset = 960 - 64 * state->csnroffst - 4 * (ba->bai >> 3) + floor;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
151 floor >>= 5;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
152
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
153 exp = expbap->exp;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
154 bap = expbap->bap;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
155
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
156 i = bndstart;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
157 j = start;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
158 if (start == 0) { /* not the coupling channel */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
159 int lowcomp;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
160
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
161 lowcomp = 0;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
162 j = end - 1;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
163 do {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
164 if (i < j) {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
165 if (exp[i+1] == exp[i] - 2)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
166 lowcomp = 384;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
167 else if (lowcomp && (exp[i+1] > exp[i]))
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
168 lowcomp -= 64;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
169 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
170 psd = 128 * exp[i];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
171 mask = psd + fgain + lowcomp;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
172 COMPUTE_MASK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
173 bap[i] = (baptab+156)[mask + 4 * exp[i]];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
174 i++;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
175 } while ((i < 3) || ((i < 7) && (exp[i] > exp[i-1])));
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
176 fastleak = psd + fgain;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
177 slowleak = psd + sgain;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
178
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
179 while (i < 7) {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
180 if (i < j) {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
181 if (exp[i+1] == exp[i] - 2)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
182 lowcomp = 384;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
183 else if (lowcomp && (exp[i+1] > exp[i]))
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
184 lowcomp -= 64;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
185 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
186 psd = 128 * exp[i];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
187 UPDATE_LEAK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
188 mask = ((fastleak + lowcomp < slowleak) ?
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
189 fastleak + lowcomp : slowleak);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
190 COMPUTE_MASK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
191 bap[i] = (baptab+156)[mask + 4 * exp[i]];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
192 i++;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
193 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
194
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
195 if (end == 7) /* lfe channel */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
196 return;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
197
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
198 do {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
199 if (exp[i+1] == exp[i] - 2)
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
200 lowcomp = 320;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
201 else if (lowcomp && (exp[i+1] > exp[i]))
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
202 lowcomp -= 64;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
203 psd = 128 * exp[i];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
204 UPDATE_LEAK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
205 mask = ((fastleak + lowcomp < slowleak) ?
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
206 fastleak + lowcomp : slowleak);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
207 COMPUTE_MASK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
208 bap[i] = (baptab+156)[mask + 4 * exp[i]];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
209 i++;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
210 } while (i < 20);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
211
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
212 while (lowcomp > 128) { /* two iterations maximum */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
213 lowcomp -= 128;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
214 psd = 128 * exp[i];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
215 UPDATE_LEAK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
216 mask = ((fastleak + lowcomp < slowleak) ?
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
217 fastleak + lowcomp : slowleak);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
218 COMPUTE_MASK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
219 bap[i] = (baptab+156)[mask + 4 * exp[i]];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
220 i++;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
221 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
222 j = i;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
223 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
224
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
225 do {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
226 int startband, endband;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
227
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
228 startband = j;
1072
68d0a38bd802 * sync with main liba52 sources
kabi
parents: 428
diff changeset
229 endband = (bndtab[i-20] < end) ? bndtab[i-20] : end;
332
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
230 psd = 128 * exp[j++];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
231 while (j < endband) {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
232 int next, delta;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
233
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
234 next = 128 * exp[j++];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
235 delta = next - psd;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
236 switch (delta >> 9) {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
237 case -6: case -5: case -4: case -3: case -2:
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
238 psd = next;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
239 break;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
240 case -1:
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
241 psd = next + latab[(-delta) >> 1];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
242 break;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
243 case 0:
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
244 psd += latab[delta >> 1];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
245 break;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
246 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
247 }
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
248 /* minpsd = -289 */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
249 UPDATE_LEAK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
250 mask = (fastleak < slowleak) ? fastleak : slowleak;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
251 COMPUTE_MASK ();
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
252 i++;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
253 j = startband;
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
254 do {
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
255 /* max(mask+4*exp)=147=-(minpsd+fgain-deltba-snroffset)>>5+4*exp */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
256 /* min(mask+4*exp)=-156=-(sgain-deltba-snroffset)>>5 */
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
257 bap[j] = (baptab+156)[mask + 4 * exp[j]];
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
258 } while (++j < endband);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
259 } while (j < end);
207cc56d18f8 * add support for liba52
kabi
parents:
diff changeset
260 }